内容发布更新时间 : 2025/11/4 16:54:25星期一 下面是文章的全部内容请认真阅读。
图2-16 液晶1602时序图
图2-17 LCD1602显示电路图
图2-18 LCD1602显示效果图
第3章 红外解码程序设计
使用C语言编写程序,调用的库函数多,易于移植,编程简单。
第1节 红外接收电路主程序流程图
主程序是首先初始化红外接收端口,然后检测是否接收红外信号,如果接收到红外信号就调用接收子程序,然后就通过LCD1602显示当前按键的解码值,如图3-1所示。
图3-1 红外接收主程序流程图
第2节 红外接收电路子程序流程图
子程序是首先读取T0定时器的长度,如果是1.125ms就认为是“0”,将其存入缓冲区并且计数器加一,如果是2.25ms就认为是“1”,将其存入缓冲区并且计数器加一。如
果计数器值为32时,就接收结束标志位并且将计数器清0,如果计数器值不为32时,就认为是接收误码,计数器也将清0,此时重新等待读取红外信号。如图3-2所示。
图3-2 红外接收程序流程图
附录1
部分红外解码程序 #include void irpros(void)数据处理函数 {     uchar k=1,i,j;   uchar value;               for(j=0;j<4;j++) {    for(i=0;i<8;i++)   {         }    ircode[j]=value; }    value=value>>1;   if(irdata[k]>6)   {     value=value|0x80;   }   k++;     irprosok=1; }  void irwork(void)数据分离函数 {   display[0]=ircode[0]16;  display[1]=ircode[0];     display[2]=ircode[1]16;  display[3]=ircode[1];  display[4]=ircode[2]16;  display[5]=ircode[2];  display[6]=ircode[3]16;  display[7]=ircode[3]; }  void numzh(void)ASCII码转换函数 {     uchar i,j=8,a;    for(i=0;i<8;i++)                       {                       switch(display[i])   {                   }   case 0 :a=48;break;  case 1 :a=49;break;  case 2 :a=50;break;  case 3 :a=51;break;  case 4 :a=52;break;  case 5 :a=53;break;  case 6 :a=54;break;  case 7 :a=55;break;  case 8 :a=56;break;  case 9 :a=57;break;  case 10:a=65;break;  case 11:a=66;break;  case 12:a=67;break;  case 13:a=68;break;  case 14:a=69;break;  case 15:a=70;break;            table1[j]=a;   j++;       } }  void main()主函数 {    timer0init();   int0init();   lcdinit();   play_1();   while(1)   循环检测处理  {     if (irreceok)    {      irreceok=0;  irpros();       }     if(irprosok)    {          irprosok=0;       irwork();   numzh();   play_2();     }  } }  void tinmer0() interrupt 1定时器0中断函数 {   irtime++; }  void  int0() interrupt 0 外部中断0函数,数据接收