找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10765|回复: 28
收起左侧

单片机DIY红外解码波形12864液晶显示

  [复制链接]
ID:82083 发表于 2015-6-6 03:34 | 显示全部楼层 |阅读模式
201612rw76nslgn7g1g9rp.jpg
201234vvnygx01t11f8z86.jpg
201245nif6p6rxi39f34x9.jpg
201244papbieesbiy5iiei.jpg
201248up0zf9j4h8j3g70p.jpg
20124745tv7ttwvwft2zwz.jpg
201235mvmi22wz1r3g1y2y.jpg
程序与原理图如下:
  1. /*******************************************************************************************************************************
  2.                                                                      
  3.                                                              长沙太阳人”杯红外波形显示单片机设计大赛
  4.                                 ***  
  5.                                *****      作品:  红外波形显示
  6.                                 ***              
  7.                 ****                      功能描述:  检测 显示32位红外遥控编码                        
  8.               ********     ******                                          
  9.            *****    *****  ******                     显示32位遥控编码波形                    
  10.         *****          **********                                       
  11.      *****                *******                     显示16位系统及系统反码波形                  
  12.   *****                     *****                                    
  13. *****                          *****                  显示16位用户及用户反码波形                 
  14.       **********    **********                                                        
  15.       **********    **********                                                      
  16.       ***           ***                                               
  17.       ***           ***                                                
  18.       **********    **********                                                      
  19.       **********    **********                  制作人:小杨(杨再兴)                                          
  20.       ***           ***                                                
  21.       ***           ***                               <2016.7.5>                           
  22.       **********    **********                                                        
  23.       **********    **********            
  24.    
  25. *******************************************************************************************************************************/
  26. #include
  27. #include


  28. #define uint unsigned int
  29. #define uchar unsigned char


  30. #define LCD_DATA P1
  31. sbit LCD_RS=P3^4;
  32. sbit LCD_RW=P3^1;
  33. sbit LCD_EN =P3^0;
  34. sbit LCD_PSB=P3^6;

  35. sbit IRDATA=P3^2;   



  36. sbit key1=P2^0;   
  37. sbit key2=P2^1;
  38. sbit key3=P2^2;
  39. sbit key4=P2^3;
  40. sbit key5=P2^4;


  41. uchar b=35;      //波形的初始位置垂直坐标 初值35   
  42. uchar w=4;       //波形脉宽位位4(个像素点)
  43. uchar amp=15;   //波形幅值初值为15(个点)

  44. uchar stat=1; //根据按键画波形的状态标志
  45. uchar   boma[8]; //存放波形码
  46. uchar   xitongma[4],yonghuma[4]; //存放波形码
  47. unsigned long recode;   //接收码
  48. uint recodehigh,recodelow; //接收码的高低16位
  49. uchar code zifu1[]={"  红外波形显示"};
  50. uchar code zifu2[]={"遥控码为:"};
  51. uchar code zifu3[]={"  系统及系统反码"};
  52. uchar code zifu4[]={"码值为:0X "};
  53. uchar code zifu5[]={"  操作及操作反码"};
  54. uchar code zifu6[]={"码值为:0X "};

  55. uchar Y_Coord,X_Byte,X_Bit; //定义 Y坐标 X字节坐标 X位坐标
  56. uchar High_8bit=0,Low_8bit=0; //读出 2个字节的 高8位 和 低8位 先高8位 后低8位
  57. uchar  data  hongwaicode[4];   //定义一个4字节的数组用来存储代码
  58. uchar     CodeTemp;   //编码字节缓存变量
  59. uchar     i,j,k;    //延时用的循环变量
  60. bit biaozhi=0;



  61. void key(void);
  62. void boxing(unsigned long temp);
  63. void LCD12864_DisplayCLR();//清屏
  64. void LCD12864_IfBusy(void);//判断液晶是否忙
  65. void LCD_writedcmd(uchar Rom);//写指令
  66. void LCD_writedata(uchar Data);//写数据
  67. void LCD12864_DisplayChinese(uchar Addr,uchar *p);//显示中文或字符串
  68. uchar LCD12864_ReadByte();//读取函数
  69. void LCD_Point(uchar X, uchar Y );//画点
  70. void LCD12864_DrawXline(uchar X0,uchar X1,uchar Y);//画 X轴水平线
  71. void LCD12864_DrawYline(uchar X,uchar Y0,uchar Y1);//画 Y轴水平线
  72. void LCD12864_Init(void);//液晶初始化


  73. unsigned char code         tu1[] =                  // 数据表 图1
  74. {
  75.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  76.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  77.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  78.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  79.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  80.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  81.       0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
  82.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  83.       0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,
  84.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  85.       0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,
  86.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87.       0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,
  88.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  89.       0x00,0x00,0x00,0x00,0x01,0x81,0x80,0x00,
  90.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  91.       0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,
  92.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  93.       0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,
  94.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  95.       0x00,0x00,0x1F,0x80,0x0F,0xE0,0x00,0x00,
  96.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  97.       0x00,0x00,0x3F,0xC0,0x0F,0xE0,0x00,0x00,
  98.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  99.       0x00,0x00,0x7F,0xE0,0x07,0xC0,0x00,0x00,
  100.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  101.       0x00,0x00,0xFF,0xF0,0x03,0x80,0x00,0x00,
  102.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  103.       0x00,0x01,0xFF,0xF9,0xF8,0x00,0x00,0x00,
  104.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  105.       0x00,0x03,0xF9,0xFD,0xF8,0x00,0x00,0x00,
  106.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  107.       0x00,0x07,0xF0,0xFF,0xF8,0x00,0x60,0x00,
  108.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109.       0x00,0x0F,0xE0,0x7F,0xF8,0x00,0x60,0x00,
  110.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  111.       0x00,0x1F,0xC0,0x3F,0xF8,0x00,0x60,0x00,
  112.       0x00,0x00,0x60,0x04,0x00,0x30,0x06,0x00,
  113.       0x00,0x3F,0x80,0x1F,0xF8,0x00,0x60,0x7F,
  114.       0xCF,0xF9,0xEF,0x85,0xF8,0x30,0xFF,0xF8,
  115.       0x00,0x7F,0x00,0x07,0xF8,0x07,0xFE,0x7F,
  116.       0xCF,0xFB,0xEF,0x95,0xF8,0x30,0xFF,0xF8,
  117.       0x00,0xFE,0x00,0x03,0xFC,0x07,0xFE,0x03,
  118.       0x8F,0xF8,0xC9,0x94,0x61,0xFE,0x80,0x08,
  119.       0x01,0xFC,0x00,0x01,0xFE,0x06,0x66,0x03,
  120.       0x00,0xC3,0xEF,0x95,0xF9,0xFE,0xBF,0xC8,
  121.       0x03,0xF8,0x00,0x00,0xFF,0x07,0xFE,0x07,
  122.       0x00,0xC3,0xE0,0x15,0xF8,0x0E,0x07,0x80,
  123.       0x07,0xF0,0x00,0x00,0x7F,0x87,0xFE,0x7F,
  124.       0xE0,0xC0,0x9F,0x95,0x68,0x0C,0x3E,0x00,
  125.       0x0F,0xE0,0x00,0x00,0x3F,0xC6,0x66,0x7F,
  126.       0xE0,0xC0,0x9F,0x95,0x68,0x1C,0x73,0x20,
  127.       0x1F,0xC0,0x00,0x00,0x1F,0xF6,0x66,0x06,
  128.       0x00,0xC1,0xE6,0x15,0x68,0x38,0x0F,0xC0,
  129.       0x3F,0x80,0x00,0x00,0x0F,0xF7,0xFE,0x06,
  130.       0x00,0xC1,0xEF,0x15,0x69,0xF0,0x73,0x00,
  131.       0x7F,0x00,0x00,0x00,0x07,0xFB,0xF0,0x06,
  132.       0x00,0xC3,0xCF,0x05,0x69,0xE0,0x0F,0xC0,
  133.       0xFE,0x00,0x00,0x00,0x03,0xFC,0x62,0x26,
  134.       0x00,0xC0,0xC6,0x05,0x79,0xE0,0x19,0x60,
  135.       0xFC,0xFF,0xFC,0x7F,0xFF,0xFC,0x66,0x36,
  136.       0x1F,0xFC,0xDF,0x9C,0x63,0x7F,0x31,0x30,
  137.       0xF8,0xFF,0xFC,0x7F,0xFE,0x7C,0x7E,0x3E,
  138.       0x1F,0xFC,0xDF,0x98,0x63,0x3F,0x01,0x00,
  139.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x7E,0x1E,
  140.       0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,
  141.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x00,0x00,
  142.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  143.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  144.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  145.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  146.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  147.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  148.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  149.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  150.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  151.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  152.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  153.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  154.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  155.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  156.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  157.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  158.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  159.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x00,0x00,
  160.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  161.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x00,0x00,
  162.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  163.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x00,0x00,
  164.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  165.       0x00,0xFF,0xFC,0x7F,0xFE,0x00,0x00,0x00,
  166.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  167.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  168.       0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
  169.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  170.       0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
  171.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  172.       0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
  173.       0x00,0xF0,0x00,0x78,0x00,0x00,0x00,0x00,
  174.       0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,
  175.       0x00,0xF0,0x00,0x78,0x00,0x24,0xA4,0xA4,
  176.       0x80,0xFB,0xEF,0x9E,0x7F,0x7C,0x1D,0xF8,
  177.       0x00,0xF0,0x00,0x78,0x00,0x24,0xA4,0xA4,
  178.       0x80,0xCB,0x2F,0x9E,0x7F,0x64,0x3D,0xF8,
  179.       0x00,0xF0,0x00,0x78,0x00,0x24,0xA4,0xA4,
  180.       0x80,0xFB,0xEC,0x92,0x49,0x7C,0x31,0x98,
  181.       0x00,0xF0,0x00,0x78,0x00,0x2E,0xAE,0xAE,
  182.       0x80,0xC3,0x0C,0x92,0x49,0x60,0x31,0x98,
  183.       0x00,0xF0,0x00,0x78,0x00,0x3B,0xBB,0xBB,
  184.       0x98,0xC3,0x0C,0x9E,0x49,0x61,0xB9,0x98,
  185.       0x00,0xF0,0x00,0x78,0x00,0x31,0xB1,0xB1,
  186.       0x98,0xF3,0xEC,0x9E,0x49,0x7D,0x9D,0x98,
  187.       0x00,0xFF,0xFC,0x7F,0xFF,0x00,0x00,0x00,
  188.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  189.       0x00,0xFF,0xFC,0x7F,0xFF,0x00,0x00,0x00,
  190.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  191.       0x00,0xFF,0xFC,0x7F,0xFF,0x00,0x00,0x00,
  192.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  193.       0x00,0xFF,0xFC,0x7F,0xFF,0x00,0x00,0x00,
  194.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  195.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  196.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  197.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  198.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  199.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  200.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  201.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  202.       0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  203. };




  204. /**************************延时50us子程序**********************/
  205. void Delay_50us(uint t)
  206. {
  207.       uchar j;
  208.       for(;t>0;t--)   
  209.              for(j=20;j>0;j--);              
  210. }

  211.               

  212. /**************************延时0.9ms子程序**********************/
  213. void Delay0_9ms(void)
  214. {uchar j,k;
  215.      for(j=18;j>0;j--)
  216.        for(k=20;k>0;k--) ;
  217. }
  218. /***************************延时1ms子程序**********************/
  219. void Delay1ms(void)
  220. {uchar i,j;
  221.    for(i=2;i>0;i--)
  222.       for(j=240;j>0;j--) ;
  223. }
  224. /***************************延时4.5ms子程序**********************/
  225. void Delay4_5ms(void)
  226. {uchar i,j;
  227.      for(i=10;i>0;i--)
  228.       for(j=230;j>0;j--) ;
  229. }






  230. /************************中断0解码服务子程序**********************/
  231. void int0(void) interrupt 0      
  232. {


  233. EA=0;
  234. for(k=0;k<10;k++)
  235.    {Delay0_9ms();
  236.     if (IRDATA==1)         //如果0.9ms后IRDATA=1,说明不是引导码
  237.    {k=10;break;}
  238.     else if(k==9)           //如果持续了10×0.9ms=9ms的低电平,说明是引导码
  239.       {while(IRDATA==0);
  240.          Delay4_5ms();        //跳过持续4.5ms的高电平

  241.       for(i=0;i<4;i++)       //分别读取4个字节
  242.          {for(j=1;j<=8;j++)      //每个字节8个bit的判断
  243.                 { while(IRDATA==0);       //等待上升沿
  244.                   Delay0_9ms();      //从上升沿那一时刻开始延时0.9ms,再判断IRDATA
  245.                   if(IRDATA==1)     //如果IRDATA是"1",则向右移入一位"1"
  246.                     {Delay1ms();
  247.                    CodeTemp=CodeTemp|0x80;
  248.                    if(j<8) CodeTemp=CodeTemp>>1;
  249.                   }
  250.                   else
  251.       if(j<8)CodeTemp=CodeTemp>>1;//如果IRDATA是"0",则向右移一位,自动补"0"
  252.                  }
  253.               hongwaicode[i]=CodeTemp;
  254.               CodeTemp=0;
  255.          }
  256.    
  257.        }
  258.    }


  259. recodehigh=hongwaicode[0]<<8|hongwaicode[1];
  260. recodelow=hongwaicode[2]<<8|hongwaicode[3];
  261. recode=recodehigh;
  262. recode=recode<<16;
  263. recode=recode|recodelow;
  264. biaozhi=1;
  265. EA=1;

  266. }

  267. void LCD12864_IfBusy(void)//判断液晶是否忙
  268. {
  269. LCD_RS=0;
  270. LCD_RW=1;
  271. LCD_EN =1;
  272. LCD_DATA=0xff;
  273. while((LCD_DATA&0x80)==0x80);
  274. LCD_EN =0;
  275. }


  276. void LCD_writedcmd(uchar Rom)//写指令
  277. {
  278. LCD12864_IfBusy();
  279. LCD_RS=0;
  280. LCD_RW=0;
  281. LCD_EN =1;
  282. LCD_DATA=Rom;
  283. LCD_EN =0;
  284. }


  285. void LCD_writedata(uchar Data)//写数据
  286. {
  287. LCD12864_IfBusy();
  288. LCD_RS=1;
  289. LCD_RW=0;
  290. LCD_EN =1;
  291. LCD_DATA=Data;

  292. LCD_EN =0;
  293. }

  294. void LCD12864_DisplayChinese(uchar Addr,uchar *p)//显示中文或字符串
  295. {
  296. LCD12864_IfBusy();
  297. LCD_writedcmd(Addr);
  298. LCD12864_IfBusy();

  299. while(*p !='')
  300. {
  301.    LCD_writedata(*p);
  302.    p++;
  303.    LCD12864_IfBusy();
  304. }
  305. }




  306. uchar LCD12864_ReadByte()//读取函数
  307. {
  308. uchar ReadByte;
  309. LCD12864_IfBusy();
  310. LCD_DATA=0xff;//读操作之前 先拉高IO口
  311. LCD_RS=1;
  312. LCD_RW=1;
  313. LCD_EN =0;
  314. Delay1ms();
  315. LCD_EN =1;
  316. ReadByte=LCD_DATA;
  317. LCD_EN =0;
  318. return (ReadByte);
  319. }



  320. void LCD_Point(uchar X, uchar Y)//画点
  321. {
  322.     LCD12864_IfBusy();
  323.     LCD_writedcmd(0x34);//开启 扩充功能
  324.     LCD_writedcmd(0x36);//开启 绘图功能
  325.     X_Byte = X>>4; //取坐标的 字节坐标   
  326.     X_Bit = X&0x0f;//取坐标的 位坐标

  327.     if( Y < 32 )           //上屏
  328.     {
  329.         Y_Coord = Y ;     
  330.     }
  331.     else                  //下屏
  332.     {
  333.         Y_Coord = Y - 32 ;
  334.         X_Byte += 8 ;
  335.     }

  336.     LCD_writedcmd( 0x80+Y_Coord ); //确定 操作字节地址
  337.   Delay_50us(1);
  338.     LCD_writedcmd( 0x80+X_Byte );

  339.    LCD12864_ReadByte(); //读操作
  340.   
  341.   Delay_50us(12);
  342.    High_8bit =LCD12864_ReadByte();
  343.   Low_8bit=LCD12864_ReadByte();

  344.     LCD_writedcmd( 0x80 + Y_Coord );
  345.     LCD_writedcmd( 0x80 + X_Byte );

  346.     if( X_Bit < 8 ) //修改 数据
  347.     {
  348.         High_8bit |= ( 0x01 << ( 7 - X_Bit )) ;
  349.         LCD_writedata( High_8bit) ;
  350.         LCD_writedata( Low_8bit ) ;
  351.     }
  352.     else
  353.     {
  354.         Low_8bit |= ( 0x01 << ( 15 - X_Bit ));
  355.         LCD_writedata( High_8bit ) ;
  356.         LCD_writedata( Low_8bit ) ;
  357.     }

  358.     LCD_writedcmd( 0x30 );
  359. }

  360. void LCD12864_DrawXline(uchar X0,uchar X1,uchar Y)//画 X轴水平线
  361. {
  362. if (X0<x1)

  363. for(;X0<x1;x0++)
  364. {
  365.    LCD_Point(X0,Y);
  366. }

  367. else

  368. for(;X0>X1;X0--)
  369. {
  370.    LCD_Point(X0,Y);
  371. }
  372. }

  373. void LCD12864_DrawYline(uchar X,uchar Y0,uchar Y1)//画 Y轴水平线
  374. {

  375. if (Y0<y1)
  376. for(;Y0<y1;y0++)
  377. {
  378.    LCD_Point(X,Y0);
  379. }

  380. else

  381. for(;Y0>Y1;Y0--)
  382. {
  383.    LCD_Point(X,Y0);
  384. }
  385. }


  386. void LCD12864_DisplayCLR()
  387. {
  388. uchar i, j, k ;
  389. LCD12864_IfBusy();
  390. LCD_writedcmd(0x34);
  391.     LCD_writedcmd(0x36);
  392.     for( i = 0 ; i < 2 ; i++ )//分上下两屏写
  393.     {
  394.         for( j = 0 ; j < 32 ; j++ )
  395.         {
  396.     LCD12864_IfBusy();
  397.    
  398.             LCD_writedcmd( 0x80 + j ) ;//写Y坐标
  399.     Delay_50us(1);
  400.             if( i == 0 )                    //写X坐标
  401.             {
  402.                 LCD_writedcmd( 0x80 ) ;
  403.      Delay_50us(1);
  404.             }
  405.             else
  406.             {
  407.                 LCD_writedcmd( 0x88 ) ;
  408.      Delay_50us(1);
  409.             }
  410.             for( k = 0 ; k < 16 ; k++ )      //写一整行数据
  411.             {
  412.      LCD12864_IfBusy();
  413.                 LCD_writedata(0x00) ;
  414.      Delay_50us(1);
  415.             }
  416.         }
  417.     }
  418.     LCD_writedcmd( 0x30 ) ;
  419. }

  420. void LCD12864_Init(void)//液晶初始化
  421. {
  422. P0=0x00;

  423. LCD_PSB=1;
  424. LCD_writedcmd(0x30);
  425. Delay_50us(2);
  426. LCD_writedcmd(0x06);
  427. Delay_50us(2);
  428. LCD_writedcmd(0x0c);
  429. Delay_50us(2);
  430. LCD_writedcmd(0x01);
  431. Delay_50us(2);
  432. }




  433. void boxing32(unsigned long temp)
  434. {

  435.   unsigned long bit1,bit0;
  436.   uchar i;
  437.   
  438. LCD12864_DrawYline(0,0,63);
  439. LCD12864_DrawXline(0,128,b+3);
  440. for(i=1;i<=(128/w);i++)
  441. {
  442. LCD_Point(w*i,b+2 );
  443. if(i==8||i==16||i==24||i==32||i==40||i==48)
  444. LCD12864_DrawYline(w*i,b-1,b+6);
  445. }


  446.       bit1=temp&0x80000000;
  447.       temp<<=1;
  448.       bit0=bit1;
  449. if(bit1!=0)
  450. LCD12864_DrawXline(0,w,b-amp);
  451. else
  452. LCD12864_DrawXline(0,w,b);

  453. for(i=1;i<32;i++)
  454. {
  455.   bit0=bit1;
  456.   bit1=temp&0x80000000;
  457.   
  458.   if(bit1!=bit0)
  459.           {
  460.            if(bit1<bit0)
  461.                    {
  462.                    LCD12864_DrawYline(i*w,b-amp,b);
  463.                    LCD12864_DrawXline(i*w,(i+1)*w,b);
  464.                    }
  465.            else
  466.                    {
  467.                     LCD12864_DrawYline(i*w,b,b-amp);
  468.                     LCD12864_DrawXline(i*w,(i+1)*w,b-amp);
  469.                   
  470.                    }
  471.           }
  472. else
  473.         {
  474.                 if(bit1!=0)
  475.                 LCD12864_DrawXline(i*w,(i+1)*w,b-amp);
  476.                 else
  477.                 LCD12864_DrawXline(i*w,(i+1)*w,b);

  478.         }
  479. temp<<=1;
  480.       
  481. }
  482. }

  483. void boxing16(uint temp)
  484. {

  485.   uint bit1,bit0;
  486.   uchar i;
  487.   
  488. LCD12864_DrawYline(0,0,63);
  489. LCD12864_DrawXline(0,128,b+3);
  490. for(i=1;i<=(128/w);i++)
  491. {
  492. LCD_Point(w*i,b+2 );
  493. if(i==8||i==16||i==24||i==32||i==40||i==48)
  494. LCD12864_DrawYline(w*i,b-1,b+6);
  495. }


  496.       bit1=temp&0x8000;
  497.       temp<<=1;
  498.       bit0=bit1;
  499. if(bit1!=0)
  500. LCD12864_DrawXline(0,w,b-amp);
  501. else
  502. LCD12864_DrawXline(0,w,b);

  503. for(i=1;i<16;i++)
  504. {
  505.   bit0=bit1;
  506.   bit1=temp&0x8000;
  507.   
  508.   if(bit1!=bit0)
  509.           {
  510.            if(bit1<bit0)
  511.                    {
  512.                    LCD12864_DrawYline(i*w,b-amp,b);
  513.                    LCD12864_DrawXline(i*w,(i+1)*w,b);
  514.                    }
  515.            else
  516.                    {
  517.                     LCD12864_DrawYline(i*w,b,b-amp);
  518.                     LCD12864_DrawXline(i*w,(i+1)*w,b-amp);
  519.                   
  520.                    }
  521.           }
  522. else
  523.         {
  524.                 if(bit1!=0)
  525.                 LCD12864_DrawXline(i*w,(i+1)*w,b-amp);
  526.                 else
  527.                 LCD12864_DrawXline(i*w,(i+1)*w,b);

  528.         }
  529. temp<<=1;
  530.       
  531. }
  532. }
  533. void huatu(uchar *p)
  534. {

  535.   uchar i,j,k;
  536. LCD_writedcmd(0x36);
  537.   for(i=0;i<2;i++)
  538.   {
  539.     for(j=0;j<32;j++)
  540.         {
  541.          LCD_writedcmd(0x80+j);
  542.      if(i==0)
  543.          {
  544.         LCD_writedcmd(0x80);
  545.          }
  546.      else
  547.          {
  548.         LCD_writedcmd(0x88);
  549.          }
  550.       for(k=0;k<16;k++)
  551.           {
  552.           LCD_writedata(*p++);
  553.           }
  554.         }
  555.   }
  556. LCD_writedcmd(0x36);
  557. }



  558. void key(void)
  559. {
  560. P2=0xff;
  561. if(!key1)
  562. {
  563. Delay1ms();
  564. if(!key1)
  565. {
  566. while(!key1);
  567.   amp--; amp--;
  568.   if(amp<3)
  569.    amp=20;
  570.   biaozhi=1;
  571.   }
  572. }
  573. if(!key2)
  574. {
  575. Delay1ms();
  576. if(!key2)
  577. {
  578. while(!key2);
  579. b--;b--;
  580.   if(b<30)
  581.   b=42;
  582.   biaozhi=1;
  583. }
  584. }
  585. if(!key3)
  586. {
  587. Delay1ms();
  588. if(!key3)
  589. {
  590. while(!key3);
  591. stat++;

  592. if(stat>3)
  593. stat=1;
  594. switch(stat)
  595. {
  596. case 1: w=4;break;
  597. case 2: w=8;break;
  598. case 3: w=8;break;
  599. default:break;
  600. }
  601.   biaozhi=1;
  602.    
  603.   }
  604. }
  605. if(!key4)
  606. {
  607. Delay1ms();
  608. if(!key4)
  609. {
  610. while(!key4);
  611. w--;
  612. if(stat==1)
  613.   {
  614.   if(w<2)
  615.   w=4;
  616.   }
  617. else
  618. {
  619. if(w<2)
  620. w=8;
  621. }
  622. biaozhi=1;
  623. }
  624. }
  625. if(!key5)
  626. {
  627. Delay1ms();
  628. if(!key5)
  629. {
  630. while(!key5);
  631.   amp++;  amp++;
  632.   if(amp>20)
  633.   amp=20;
  634. biaozhi=1;
  635. }
  636. }




  637. }







  638. /**************************主程序*************************/
  639. void main()
  640. {

  641. LCD12864_Init();
  642. LCD12864_DisplayCLR();


  643. IT0=1;    //INT0为负边沿触发, (1:负边沿触发,0:低电平触发)
  644. EX0=1;    //外部中断INT0开, (1:开,      0:关    )
  645. EA=1;    //开所有中断
  646. CodeTemp=0;    //初始化红外编码字节缓存变量

  647. for(i=10;i>0;i--)
  648. huatu(tu1);

  649. while(1)
  650. {
  651.   
  652.   while(!biaozhi)
  653.   key();
  654. if(biaozhi)
  655. {

  656.                 LCD12864_Init();
  657.                 LCD12864_DisplayCLR();
  658.                 LCD_writedcmd(0x01);

  659.                 if(stat==1)
  660.                 {
  661.                
  662.                         LCD12864_DisplayChinese(0x80,zifu1);
  663.                         LCD12864_DisplayChinese(0x98,zifu2);
  664.                         boxing32(recode);
  665.                         sprintf(boma,"%04X",recodehigh);
  666.                         sprintf(&boma[4],"%04X",recodelow);
  667.                         LCD12864_DisplayChinese(0x9c,boma);
  668.                 }
  669.                
  670.                 else if(stat==2)
  671.                    {
  672.                
  673.                         LCD12864_DisplayChinese(0x80,zifu3);
  674.                         LCD12864_DisplayChinese(0x98,zifu4);
  675.                         boxing16(recodehigh);
  676.                         sprintf(xitongma,"%04X",recodehigh);
  677.                         LCD12864_DisplayChinese(0x9d,xitongma);
  678.                
  679.                    }
  680.                
  681.                 else if(stat==3)
  682.                     {
  683.                         
  684.                         LCD12864_DisplayChinese(0x80,zifu5);
  685.                         LCD12864_DisplayChinese(0x98,zifu6);
  686.                         boxing16(recodelow);
  687.                         sprintf(yonghuma,"%04X",recodelow);
  688.                         LCD12864_DisplayChinese(0x9d,yonghuma);
  689.                   }
  690.                 biaozhi=0;
  691.    }
  692.   }
  693. }         
复制代码


程序.zip (46.89 KB, 下载次数: 213)
回复

使用道具 举报

ID:14010 发表于 2015-6-25 23:05 | 显示全部楼层
这个不错啊!
回复

使用道具 举报

ID:73679 发表于 2015-6-26 11:20 | 显示全部楼层
楼主很强
回复

使用道具 举报

ID:84495 发表于 2015-7-3 21:34 | 显示全部楼层
厉害,,红外和315  433的单片机解码都看过一眼,还没搞清怎么个原理,若想把接受的数据在发出去是发源码还是发送反码
回复

使用道具 举报

ID:61140 发表于 2015-9-3 08:07 | 显示全部楼层

厉害,,红外和315  433的单片机解码都看过一眼,还没搞清怎么个原理,若想把接受的数据在发出去是发源码还是发送反码
回复

使用道具 举报

ID:79544 发表于 2015-10-6 13:02 | 显示全部楼层
楼主用的多大晶振,我下进去怎么是乱码?红外接收不了?
回复

使用道具 举报

ID:44267 发表于 2015-10-22 19:05 | 显示全部楼层
强得很,值得学习
回复

使用道具 举报

ID:79034 发表于 2015-10-24 21:23 | 显示全部楼层
不错,我还没搞过红外,好想试试。。
回复

使用道具 举报

ID:92764 发表于 2015-10-26 22:38 | 显示全部楼层
我正在学习红外遥控原理,改天做个看看,谢谢
回复

使用道具 举报

ID:6540 发表于 2015-11-7 21:23 | 显示全部楼层
我正在学习红外遥控原理,谢谢分享!
回复

使用道具 举报

ID:92810 发表于 2015-11-21 02:59 | 显示全部楼层
好像蛮不错的样子哦。。
回复

使用道具 举报

ID:105829 发表于 2016-2-19 12:00 | 显示全部楼层
好东西  谢谢
回复

使用道具 举报

ID:47634 发表于 2016-3-1 10:57 | 显示全部楼层
很好很好,学习学习
回复

使用道具 举报

ID:105415 发表于 2016-3-7 16:46 | 显示全部楼层
很不错的程序!学习学习!
回复

使用道具 举报

ID:112503 发表于 2016-4-6 15:03 | 显示全部楼层

很不错的程序!学习学习!
回复

使用道具 举报

ID:112519 发表于 2016-4-7 13:57 | 显示全部楼层
我踩   
我再踩!     
我用力踩!     
我很用力踩!     
我非常用力踩!     
我用尽全力去踩!     
就算鞋子烂也要踩!     
就算51倒闭也要踩!     
就算天塌下来我都要踩!     
要是天真塌下来了继续踩!     
要是地面凹了我不管继续踩!     
要是踩到我脚骨折我也继续踩!     
要是别人见了骂我傻我还是要踩!     
要是**敢过来阻止我就更加要踩!     
要是你看我不爽我没办法还要继续踩!     
要是你觉得敢兴趣你也可以过来一起踩!     
踩到地下水喷发造成洪灾损失惨重我也踩!     
踩到南昌地震山崩地裂地下水泛滥我还要踩!     
踩到火山喷发太平洋海啸我还要继续往死里踩!     
踩到阎罗王说我制造噪音我刁根烟看看他继续踩!   

踩到天昏地暗惊天地泣鬼神我不管我还是要继续踩!  
   

















回复

使用道具 举报

ID:74054 发表于 2016-4-8 19:41 | 显示全部楼层
太好了,不错
回复

使用道具 举报

ID:106575 发表于 2016-4-12 20:33 来自手机 | 显示全部楼层
楼主威武
回复

使用道具 举报

ID:52135 发表于 2016-4-16 21:34 来自手机 | 显示全部楼层
很好的程序
回复

使用道具 举报

ID:115075 发表于 2016-4-18 22:13 | 显示全部楼层
这个想法不错,12864显示波形图
回复

使用道具 举报

ID:107034 发表于 2016-5-30 12:31 | 显示全部楼层
非常棒的帖子,上周根据楼主的资料自己也搞了一个,发现楼上网友一样的问题。LCD12864显示乱码。
于是根据12864LCD sample程序进行了修改,并在按键子程序增加按键初始置1设置后,ok。非常感谢楼主提供的资料,方便了广大C51爱好者学习研究。
回复

使用道具 举报

ID:1 发表于 2016-5-30 12:36 | 显示全部楼层
davidwjwei 发表于 2016-5-30 12:31
非常棒的帖子,上周根据楼主的资料自己也搞了一个,发现楼上网友一样的问题。LCD12864显示乱码。
于是根据 ...

你好,能分享下改过的程序吗?
回复

使用道具 举报

ID:146045 发表于 2016-11-14 13:35 | 显示全部楼层
楼主厉害
回复

使用道具 举报

ID:170675 发表于 2017-3-14 16:54 | 显示全部楼层
学习了~~
回复

使用道具 举报

ID:97915 发表于 2017-3-21 13:00 | 显示全部楼层
下载看看!!!!!!!!!!!!!!!!
回复

使用道具 举报

ID:182940 发表于 2017-3-25 20:52 | 显示全部楼层
学习学习!
回复

使用道具 举报

ID:283908 发表于 2019-3-15 09:47 | 显示全部楼层
现在51这种精品程序很少了。
回复

使用道具 举报

ID:647989 发表于 2020-3-24 14:43 | 显示全部楼层
15年的帖子,可程序的日期写着16年
回复

使用道具 举报

ID:796012 发表于 2023-3-2 14:29 | 显示全部楼层
晶振11.0592,下载了,按遥控也反应了,只是一直是8个0,波形也是平平的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表