历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 单片机——红外遥控器——代码

2018-06-25 来源:eefocus

  1. #include   

  2. #include   

  3. #include "./delay/delay.h"  

  4. #include "./lcd1602/lcd1602.h"  

  5.   

  6. unsigned int irtime = 0;  

  7. bit startflag = 0;  

  8. unsigned char irdata[33];  

  9. unsigned char ircood[4];  

  10. bit irok = 0;  

  11. sbit IR = P3^2;  

  12.   

  13. void timer0()  

  14. {  

  15.       EA = 1;  

  16.       TMOD |= 0x02;      

  17.       TH0 = 0;  

  18.       TL0 = 0;  

  19.       ET0 = 1;  

  20.       TR0 = 1;  

  21. }  

  22.   

  23. void int0()  

  24. {  

  25.       EA = 1;  

  26.       IT0 = 1;  

  27.       EX0 = 1;  

  28. }  

  29.   

  30. void int0_isr() interrupt 0  

  31. {  

  32.       static unsigned char bitnum = 0;  

  33.       if(1 == startflag)  

  34.       {  

  35.           if((irtime > 40) && (irtime < 60))  

  36.          {  

  37.               bitnum = 0;  

  38.           }  

  39.         irdata[bitnum] = irtime;  

  40.         bitnum++;  

  41.         irtime = 0;  

  42.         if(33 == bitnum)  

  43.         {  

  44.             irok = 1;  

  45.             bitnum = 0;  

  46.             startflag = 0;  

  47.         }  

  48.      }  

  49.     else  

  50.     {  

  51.         startflag = 1;  

  52.         irtime = 0;  

  53.     }  

  54. }  

  55. void timer0_isr() interrupt 1  

  56. {  

  57.     irtime++;  

  58. }  

  59. unsigned char irprocess()  

  60. {  

  61.       unsigned char i,j,k;  

  62.       unsigned char temp;  

  63.       k = 1;  

  64.   

  65.       for(j = 0; j < 4; j++)  

  66.       {  

  67.             for(i = 0; i < 8; i++)  

  68.             {  

  69.                 temp >>= 1;  

  70.                if(irdata[k] > 6)  

  71.                {  

  72.                      temp += 0x80;  

  73.                 }  

  74.                k++;  

  75.              }  

  76.             ircood[j] = temp;  

  77.     }     

  78.     if((ircood[0] + ircood[1] == 0xff)  && (ircood[2] + ircood[3] == 0xff))  

  79.     {  

  80.         switch(ircood[2])  

  81.         {  

  82.                       case 0x16: return 0;  

  83.                       case 0x0c: return 1;  

  84.                       case 0x18: return 2;  

  85.                       case 0x5e: return 3;  

  86.                       case 0x08: return 4;  

  87.                       case 0x1c: return 5;  

  88.                       case 0x5a: return 6;  

  89.                       case 0x42: return 7;  

  90.                       case 0x52: return 8;  

  91.                       case 0x4a: return 9;  

  92.                       case 0x45: return 10;  

  93.                       case 0x46: return 11;  

  94.                       case 0x47: return 12;  

  95.                       case 0x44: return 13;  

  96.                       case 0x40: return 14;  

  97.                       case 0x43: return 15;  

  98.                       case 0x07: return 16;  

  99.                       case 0x15: return 17;  

  100.                       case 0x09: return 18;  

  101.                       case 0x19: return 19;  

  102.                       case 0x0d: return 20;  

  103.                         default: break;  

  104.          }  

  105.     }  

  106.     return 0xff;  

  107.   

  108. }  

  109. void display()  

  110. {  

  111.       unsigned char high,low;  

  112.       unsigned char i;  

  113.       for(i = 0; i < 4; i++)  

  114.       {  

  115.               high = ircood[i]/16;  

  116.               low = ircood[i]%16;  

  117.               if(high > 9)  

  118.              {  

  119.                  high += 0x37;  

  120.               }  

  121.             else  

  122.             {  

  123.                  high += 0x30;  

  124.              }  

  125.             if(low > 9)  

  126.             {  

  127.                  low += 0x37;  

  128.              }  

  129.             else  

  130.             {  

  131.                   low += 0x30;  

  132.              }   

  133.             lcd_print(1, 2*i+1, high);  

  134.             lcd_print(1, 2*i + 2, low);  

  135.      }  

  136. }  

  137. void irdisplay(unsigned char num)  

  138. {  

  139.         unsigned char high,low;  

  140.         high = num/10 +0x30;  

  141.         low = num%10 + 0x30;  

  142.   

  143.         lcd_print(2, 1, high);  

  144.         lcd_print(2, 2, low);  

  145. }  

  146.   

  147. void main()  

  148. {  

  149.       unsigned char keynum;  

  150.       lcd_init();  

  151.       timer0();  

  152.       int0();  

  153.       while(1)  

  154.       {  

  155.           if(1 == irok)  

  156.           {  

  157.                irok = 0;  

  158.               keynum = irprocess();  

  159.               display();  

  160.               if(keynum != 0xff)  

  161.               {  

  162.                      irdisplay(keynum);  

  163.                }  

  164.            }  

  165.        }  

  166. }  


推荐阅读

史海拾趣

问答坊 | AI 解惑

ULINK 制作DIY资料

配合Keil for ARM的ULINK,让ARM开发完全摆脱ADS1.2。   Keil ULINK USB接口仿真器,一款多功能ARM调试工具,可以通过JTAG或CODS接口连接到目标系统仿真或下载程序,目前已经成为国内主流的ARM开发工具。    Keil ULINK的软件环境为Keil uVi ...…

查看全部问答>

嵌入式即将成为纯软件的学科?

现在提及嵌入式,就谈到了嵌入式操作系统。 难道大家不再关心下面硬件和底层的内容了么? 如果这样,嵌入式发展不是应该纳入软件门类?和我们硬件有什么关系呢?…

查看全部问答>

[ZT]送给研发弟兄们几个总结性观点

观察了一些企业的产品技术情况,比较普遍的一个现象是:研发人员无一例外的同声谴责采购和工艺部门,对元器件控制不严,致使电路板入检合格率低、到客户现场后频频出毛病。     举几个简单例子:     一个电解电容 ...…

查看全部问答>

刚进入初级基带工程师,应该学什么?

刚刚进入基带这个行业,还有些摸不到头脑, 请问大家应该从哪里开始学起?…

查看全部问答>

大家来看看晶振的两种接法,有谁用过这种接法?

1.这种接法的优点就是起振容易,适应频率范围比较宽。具体频率范围本人不记得了。 2.这种接法的优点接法简单,缺点是不那么容易起振,C1,C2要合适。 …

查看全部问答>

关于三星6410平台OpenGL

公司一直是基于三星6410平台的Windows Mobile操作系统,之前是没有集成OpenGL的,现在为了显示效果,准备加上,会对目前的系统产生什么影响?…

查看全部问答>

请问如何从U盘启动xpe系统?

我用windows embedded studio制作了一个迷你型的xpe系统,请问我如何能从U盘启动整个系统呢?我在网络上找过相关的一些方法,但是都不能顺利的完成。…

查看全部问答>

在DAVE中,自己建的工程能编译、下载,但是不能单步调试,这是怎么回事?

现在正在学习XMC1300,使用英飞凌官方的编译器DAVE,自己建了工程能编译、下载,是不能单步进行调试,这是怎么回事呢?求大神解? …

查看全部问答>

学MSP430G2553遇到的关于串行I2C的问题求助

最近在自学MSP430G2553的串行I2C    在软件I2C(不是硬件I2C)的编写的时候要不要在编写之前先吧I2C.c和I2C.H文件先包含进去再写发送接收字节和帧函数呢?还是不用  直接就写后面的函数?另外软件设置了CLK和DATA接在p1.6和p1. ...…

查看全部问答>