这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » goodboy3021 MCU DIY进程帖

共53条 5/6 |‹ 1 2 3 4 5 6 跳转至
专家
2011-12-26 07:10:07     打赏
41楼
谢谢斑竹鼓励!论坛中的高手太多啦,我是来跟他们学习来的!

助工
2011-12-26 19:35:38     打赏
42楼
谢谢楼主的分享!由于自己对编程不是很熟悉,这段时间一直在参照您的程序了!
        呵呵!谢谢...

菜鸟
2011-12-27 14:05:18     打赏
43楼
做得真好!做硬件的,全身心的投入就是好啊!我这个做纯软件的人,也就只能过了把瘾,多多了解而已了!支持!!!!!!!!

专家
2011-12-27 14:15:44     打赏
44楼
呵呵!谢谢关注,我既不是做硬件的,又不是做软件的,我就是一名电子爱好者!

专家
2011-12-27 21:20:13     打赏
45楼
        NOKIA3310液晶是诺基亚手机的拆机件,是一款性价比较高的液晶。工作电压范围是2.7-3.3V,比较省电,适合电池供电。MCU和3310液晶之间使用模拟SPI方式传输数据,3310液晶点阵为48*84点,可显示四行,每行七个汉字,也可以显示不大于84*48的位图,具体效果如下:









驱动程序下载地址:http://share.eepw.com.cn/share/download/id/60556

菜鸟
2011-12-28 14:50:43     打赏
46楼

顶一个!!


高工
2011-12-28 23:33:09     打赏
47楼

有创意


高工
2011-12-29 00:37:44     打赏
48楼
楼主的驱动方案在哪呢?

专家
2011-12-29 21:28:28     打赏
49楼
“驱动方案”是驱动程序吗?

专家
2011-12-29 21:35:48     打赏
50楼

      本实验是由4键无线遥控器,315MHz超再生接收模块和MCU-DIY开发板一起来完成的。其中:4键无线遥控器采用SC2262遥控编码电路,最多有12位三态编码;315MHz超再生接收模块通常与PT2272解码芯片配合来完成遥控器解码的。而本实验是由MCU-DIY开发板上的单片机直接对无线遥控接收软件模拟解码,而无需专用的解码芯片,解码效果如下:



解码程序:

/*******MCU-DIY开发板遥控解码程序*****/
#include <STC12C5A60S2.H> //STC头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

unsigned char  display[4]  =   { 0x77, 0x7c, 0x39, 0x5e};//显示码数组

/*****控制口定义 *****/
sbit WUXIAN = P3^7;                      //遥控信号输入I/O口
#define _rlcar_(RX)  CY=RX&0X80          //RX带进位左移1位,数据放入ACC
uchar bdata wx_data0,wx_data1,wx_data2;  //存储24位无线数据
uchar data wx_code0,wx_code1,wx_code2;
uchar data wx_count,wxcount_buf;         //低电平时间计数器
uchar data wx_bit;                       //无线码位数
bit tb_flag;        //同步码接收成功标志
bit wx_ok;          //无线码接收成功标志
bit wx_sta;         //无线信号输入脚的高低电平状态


//************单片机初始化************//
void mcu_initialize()
{
// WDT_CONTR=0x00;       //关闭看门狗
 AUXR=0x00;               //定时器0和1设为传统8051速度,12分频
//TCON = 0x8E;           //  1 0 0 0 1 1 1 0
P3M1=0x80;P3M0=0x00;   //P1为准双向口
P3=0x00;
 
 TR0=0;               //定时器T0停止
 TH0=0xA4;TL0=0xA4;      //100us中断一次 
 
 TMOD=0x22;       //设置T0为自动装入的8位定时器 
 ET0=1;           //允许T0中断
 EA=1;     //全局中断开启
 TR0=1;           //定时器T0启动
}
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (uint a){
 uint i;
 while( a-- != 0){
  for(i = 0; i < 600; i++);
 }
}
/*********************************************************************************************/
void led_display(void){ //主程序
uchar i;

   for(i=0;i<8;i++)
   {
 P2 = i; 
   }
}
/*********************************************************************************************/
//************解码程序************//
void decode()
{
  if(WUXIAN)         //检测无线I/O口为高
  {          
    if(!wx_sta)  //无线信号输入脚的电平状态为低
    {
      wx_sta=1;  //无线信号状态从低变高
      wxcount_buf=wx_count;
      if(tb_flag)  //同步码标志为1
       {        
         if((0x03<wxcount_buf)&&(wxcount_buf<0x07))        //低电平脉宽范围在200us到800us之间 ------码1
      {          
          CY=1;
         }
         else if((0x0e<wxcount_buf)&&(wxcount_buf<0x12))   //低电平脉宽范围在1.3ms到2ms之间   ------码0
      {    
          CY=0;
         }
         else //干扰码
      {
       P0 = 0x00;       
       wx_count=0;
          wx_bit=0;
          wxcount_buf=0;
       tb_flag=0;
          return;
         }

        _rlcar_(wx_data0);      //移位寄存器,接收一位数据
        wx_data0=ACC;

        _rlcar_(wx_data1);
        wx_data1=ACC;

        _rlcar_(wx_data2);
        wx_data2=ACC;
     
        if(++wx_bit==24)   //接收完24位码,接收成功标志wx_ok置1
     {     
         tb_flag=0;
         wx_bit=0;
         wx_ok=1;      

         wx_code0=wx_data0;
      wx_code1=wx_data1;
      wx_code2=wx_data2;
        }
        }
        else
     {
         if((0x64<wxcount_buf)&&(wxcount_buf<0xc8))  //低电平脉宽范围在13.5ms到20ms之间,把同步码标志置1
           tb_flag=1;  // 同步码标志
         else
           P0 = 0x00;
        }
      }
  }
  else                        //检测无线I/O口为<低>
  {
    if(wx_sta)             //无线信号输入脚的电平状态为<高>
     {
      wx_count=0;       //无线信号从高变低,清零低电平脉宽计数器
      wx_sta=0;
     }       
       else      //无线信号输入脚的电平状态为<低>
           wx_count++;        //无线信号为低电平,低电平脉宽计数器加1
   }
}

//************定时器0中断程序************//
void timer0_isr() interrupt 1
{
    decode();
    switch(wx_code0)
    {
     case 0xc0: P0 = display[0];break;     
     case 0x30: P0 = display[1];break;            
     case 0x0c: P0 = display[2];break;    
     case 0x03: P0 = display[3];break;         
        default: break;
    }
}

//************主程序************//
void main()
{
    mcu_initialize();
 P0 = 0x00;
    while(1)
 {
   led_display();
  }
}


共53条 5/6 |‹ 1 2 3 4 5 6 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]