久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2503|回復: 0
打印 上一主題 下一主題
收起左側

51單片機紅外遙控12864顯示源程序分享

[復制鏈接]
跳轉到指定樓層
樓主
ID:277948 發表于 2018-1-24 08:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機紅外遙控12864顯示
單片機源程序如下:
  1. #include<reg52.h>            //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit RS=P3^5;                                //命令/數據選擇
  5. sbit RW=P3^6;                                               //讀寫口
  6. sbit  E=P3^4;                                            //鎖存控制
  7. sbit PSB=P3^1;                                         //串并選擇
  8. sbit IR=P3^2;                          //紅外接口標志
  9. bit irpro_ok,irok;
  10. uchar code st0[]={"****遙控車***"};
  11. uchar code st1[]={"暫停"};
  12. uchar code st2[]={"床前明月光李疑是地上霜白舉頭望明月唐低頭思故鄉"};
  13. uchar code st3[]={"去年今日此門中,人面桃花相映紅,人面不知何處去,桃花依舊笑春風。"};
  14.                  
  15. uchar  irtime;        //紅外用全局變量
  16. uchar IRcord[4];
  17. uchar irdata[33];
  18. uchar x;
  19. void Ir_work(void);
  20. void Ircordpro(void);
  21. void delay(uint t)
  22. {
  23.    uchar j;
  24.         for(;t>0;t--)
  25.                    for(j=120;j>0;j--);
  26. }
  27. /*******************************************************12864**************************************/
  28. void write_com(uchar cmdcode)
  29. {
  30.    RS=0;                   //命令/數據選擇,為0時選擇命令
  31.    RW=0;                   //讀/寫選擇,為0時選擇寫
  32.    E=1;                    //使能
  33.    P0=cmdcode;             //送入命令
  34.    delay(50);              //等待寫入
  35.    E=0;                    //關閉讀寫
  36.    delay(40);
  37. }
  38. void write_date(uchar date)
  39. {
  40.    RS=1;                   //命令/數據選擇,為1時選擇數據
  41.    RW=0;                   //讀/寫選擇,為0時選擇寫
  42.    E=1;                    //使能
  43.    P0=date;                            //送入數據
  44.    delay(10);              //等待寫入
  45.    E=0;                    //關閉讀寫
  46. }
  47. void init()        //初始化
  48. {
  49.          PSB=1;
  50.         delay(5);
  51.   write_com(0x30);
  52.           delay(10);
  53.   write_com(0x0c);
  54.           delay(5);
  55.   write_com(0x01);
  56.           delay(5);
  57.   write_com(0x06);
  58. }
  59. /****************************************************顯示****************************************/
  60. void di() //  顯示
  61. {
  62.         uchar num,l;
  63.         write_date(0x00);
  64.         write_com(0x01);
  65.         switch(x)
  66.         {
  67.                 case 0x18: num=1;break;
  68.                 case 0x52: num=2;break;
  69.                 case 0x08: num=3;break;
  70.                 case 0x5a: num=0;break;
  71.                 case 0x1c: num=4;break;
  72.                 case 0x42: num=5;break;
  73.                 case 0x4A: num=6;break;

  74.         }
  75.         if(num==0)
  76.         {
  77.                 write_com(0x8e);
  78.                 write_date(0x1a);
  79.                 P1=0XF6;
  80.         }
  81.         else if(num==1)
  82.         {
  83.                 write_com(0x83);
  84.                 write_date(0x18);
  85.                 P1=0XFE;
  86.         }
  87.         else if(num==2)
  88.         {
  89.                 write_com(0x9b);
  90.                 write_date(0x19);
  91.                 P1=0XFD;
  92.         }
  93.         else if(num==3)
  94.         {
  95.                 write_com(0x89);
  96.                 write_date(0x1b);
  97.                 P1=0XFB;
  98.         }
  99.         else if(num==4)
  100.         {
  101.                 write_com(0x8a);
  102.                         while(st1[l]!='\0')
  103.                         {
  104.                                 write_date(st1[l]);
  105.                                 l++;
  106.                                 delay(100);
  107.                         }
  108.         }

  109. }
  110. void tim0_isr (void) interrupt 1 using 1
  111. {
  112.   irtime++;  //用于計數2個下降沿之間的時間
  113. }

  114. void EX0_ISR (void) interrupt 0 //外部中斷0服務函數
  115. {
  116.         static unsigned char  i;             //接收紅外信號處理
  117.         static bit startflag;                //是否開始處理標志位

  118.         if(startflag)                        
  119.         {
  120.                 if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms
  121.             i=0;
  122.                     irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
  123.                     irtime=0;
  124.                     i++;
  125.                            if(i==33)
  126.                       {
  127.                                   irok=1;
  128.                                 i=0;
  129.                           }
  130.         }
  131.         else
  132.         {
  133.                 irtime=0;
  134.                 startflag=1;
  135.         }
  136. }

  137. void TIM0init(void)//定時器0初始化
  138. {
  139.         TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
  140.         TH0=0x00; //重載值
  141.         TL0=0x00; //初始化值
  142.         ET0=1;    //開中斷
  143.         TR0=1;   
  144. }
  145. void EX0init(void)
  146. {
  147. IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
  148. EX0 = 1;   //使能外部中斷
  149. EA = 1;    //開總中斷
  150. }
  151. void Ir_work(void)//紅外鍵值散轉程序
  152. {
  153.         x=IRcord[2];
  154.         di();
  155.         irpro_ok=0;//處理完成標志
  156. }
  157. void Ircordpro(void)//紅外碼值處理函數
  158. {
  159.         unsigned char i, j, k,cord,value;
  160.         k=1;
  161.         for(i=0;i<4;i++)      //處理4個字節
  162.         {
  163.                 for(j=1;j<=8;j++) //處理1個字節8位
  164.                 {
  165.                         cord=irdata[k];
  166.                         if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差
  167.                         value=value|0x80;
  168.                         if(j<8)
  169.                         {
  170.                                 value>>=1;
  171.                         }
  172.                         k++;
  173.                 }
  174.                 IRcord[i]=value;
  175.                 value=0;     
  176.         }
  177.         irpro_ok=1;//處理完畢標志位置1
  178. }

  179. void main(void)
  180. {
  181.     uint z;
  182.         init();
  183. ……………………

  184. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
紅外遙控車.rar (31.32 KB, 下載次數: 42)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区久久精品 | 一级毛片播放 | 久久久国产一区二区三区 | 免费特黄视频 | 黄色一级电影免费观看 | 午夜精品一区二区三区在线观看 | 在线色 | 色在线免费视频 | 福利网站在线观看 | 欧美www在线 | 国产精品久久久久久妇女6080 | 自拍偷拍亚洲欧美 | 久久久久久国产精品免费免费 | 久久精品国产99国产精品 | 国产免费观看久久黄av片涩av | 毛片久久久 | 91免费看片 | 91精品国产一区二区在线观看 | 久久久精品一区二区 | 性一交一乱一透一a级 | www日日日| 秋霞电影院午夜伦 | 国产在线精品一区二区 | 伊人网在线看 | 亚洲国产一区在线 | 欧美男人天堂 | 免费视频一区二区 | 午夜影视大全 | 2一3sex性hd | 特黄一级 | 久久er精品 | 国产黄色大片 | 日韩精品一区二区三区在线观看 | 国产探花在线精品一区二区 | 91久久精品国产91久久性色tv | 成人久久久 | 欧美激情五月 | 欧美亚洲视频在线观看 | 亚洲精品免费在线 | 欧美成年人视频在线观看 | 久久国产精品视频观看 |