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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AT89s52單片機設計的紅外遙控計算器顯示于1602上

[復制鏈接]
跳轉到指定樓層
樓主
ID:506496 發表于 2019-12-30 12:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #ifndef _Redreceive_H_
  2. #define _Redreceive_H_

  3. //紅外按鍵檢測
  4. /*69 70 71
  5. 68 64 67                   44 40
  6. 77 21 91                   07 15 5B
  7. 22 25 13                   16 19 0D
  8. 12 24 94
  9. 82 28 90
  10. 66 82 74*/
  11. sbit IR=P3^2;                          //紅外接口標志

  12. #define uchar unsigned char//宏定義
  13. #define uint  unsigned int //宏定義
  14. unsigned char  irtime;        //紅外用全局變量
  15. unsigned char  red_date;        //紅外數據
  16. bit irpro_ok,irok;

  17. unsigned char IRcord[4];
  18. unsigned char irdata[33];
  19. unsigned char first_line[8];
  20. unsigned char second_line[4];
  21. bit flag_cd;
  22. uchar count_cd;

  23. void Ir_work(void);
  24. void Ircordpro(void);
  25. void tim0_isr (void) interrupt 1 using 1
  26. {
  27.   irtime++;  //用于計數2個下降沿之間的時間
  28. }

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

  33.         if(startflag)                        
  34.         {
  35.                 if(irtime<140&&irtime>=130)//引導碼 TC9012的頭碼,9ms+4.5ms
  36.             i=0;
  37.                     irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1
  38.                     irtime=0;
  39.                     i++;
  40.                            if(i==33)
  41.                       {
  42.                                   irok=1;
  43.                                 i=0;
  44.                           }
  45.         }
  46.         else
  47.         {
  48.                 irtime=0;
  49.                 startflag=1;
  50.         }
  51. }

  52. void TIM0init(void)//定時器0初始化           100us
  53. {
  54.         TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
  55.         TH0=0xA3; //重載值
  56.         TL0=0xA3; //初始化值
  57.         ET0=1;    //開中斷
  58.         TR0=1;   
  59. }
  60. void EX0init(void)
  61. {
  62. IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)
  63. EX0 = 1;   //使能外部中斷
  64. EA = 1;    //開總中斷
  65. }

  66. void Ir_work(void)//紅外鍵值散轉程序
  67. {
  68.         static uchar i;
  69.         static uchar j;
  70.         static int A;
  71.         static int B;
  72.         static int C;
  73.         if(IRcord[0]==0)//判斷用戶碼
  74.         {
  75.          switch(IRcord[2])//判斷第三個數碼值
  76.                  {
  77.                          case 0x0c:red_date='1';break;//1 顯示相應的按鍵值
  78.                          case 0x18:red_date='2';break;//2
  79.                          case 0x5e:red_date='3';break;//3
  80.                          case 0x08:red_date='4';break;//4
  81.                          case 0x1c:red_date='5';break;//5
  82.                          case 0x5a:red_date='6';break;//6
  83.                          case 0x42:red_date='7';break;//7
  84.                          case 0x52:red_date='8';break;//8
  85.                          case 0x4a:red_date='9';break;//9
  86.                          case 0x16:red_date='0';break;//0
  87.                          case 0x19:red_date='=';break;//=
  88.                          case 0x07:red_date='-';break;//-
  89.                          case 0x15:red_date='+';break;//+
  90.                          case 0x44:red_date='*';break;//*
  91.                          case 0x40:red_date='/';break;///
  92.                          case 0x0d:red_date=0x0d;break;//clear
  93.          
  94.                          }
  95.                 if(red_date==0x0d)
  96.                 {
  97.                         LCD1602_W_cmd(0x01);
  98.                         count_cd=0;                       
  99.                 }
  100.                 else
  101.                 {
  102.                                 first_line[count_cd++]=red_date;
  103.                                 LCD1602_W_cmd(0x80);
  104.                                 for(i=0;i<count_cd;i++)
  105.                                 {
  106.                                  LCD1602_W_dat(first_line[i]);
  107.                                 }

  108.                                                          if(red_date=='=')
  109.                                                          {
  110.                                                                           for(i=0;i<count_cd-1;i++)
  111.                                                                           {
  112.                                                                                           if(first_line[i]>=48&&first_line[i]<=57)
  113.                                                                                         {
  114.                                                                                          A=pow(10,i)*A+(first_line[i]-48);                                                                       
  115.                                                                                         }
  116.                                                                                         else
  117.                                                                                         {
  118.                                                                                              j=i;
  119.                                                                                                  break;
  120.                                                                                         }
  121.                                                                            }
  122.                                                                                          for(i=j+1;i<count_cd-1;i++)
  123.                                                                                          {
  124.                                                                                           B=pow(10,i-j-1)*B+(first_line[i]-48);
  125.                                                                                          }
  126.                                                                                          switch(first_line[j])
  127.                                                                                  {
  128.                                                                                          case '+':C=B+A;break;//
  129.                                                                                          case '-':C=A-B;break;//
  130.                                                                                          case '*':C=B*A;break;//
  131.                                                                                          case '/':C=A/B;break;//
  132.                                                                              default:break;
  133.                                                                                          }

  134.                                                                   sprintf(second_line,"%d",C);
  135.                                                                   LCD1602_W_cmd(0x80+0x40+16-strlen(second_line));

  136.                                                                   for(i=0;i<strlen(second_line);i++)
  137.                                                                   {
  138.                                                                    LCD1602_W_dat(second_line[i]);
  139.                                                                   }
  140.                                                         }
  141.                 }

  142.                                                                  A=0;
  143.                                                                  B=0;
  144.                                                                  C=0;
  145.                                                                  j=0;
  146.                                                                  i=0;
  147.                                                                   
  148.         }
  149.         irpro_ok=0;//處理完成標志
  150. }
  151.        


  152. void Ircordpro(void)//紅外碼值處理函數
  153. {
  154.         unsigned char i, j, k,cord,value;
  155.         k=1;
  156.         for(i=0;i<4;i++)      //處理4個字節
  157.         {
  158.                 for(j=1;j<=8;j++) //處理1個字節8位
  159.                 {
  160.                         cord=irdata[k];
  161.                         if(cord>15)//大于某值為1,這個和晶振有絕對關系,這里使用11.0592M計算
  162.                         value=value|0x80;
  163.                         if(j<8)
  164.                         {
  165.                                 value>>=1;
  166.                         }
  167.                         k++;
  168.                 }
  169.                 IRcord[i]=value;
  170.                 value=0;     
  171.         }
  172.         irpro_ok=1;//處理完畢標志位置1
  173. }

  174. void red_dispaly()
  175. {
  176.                 if(irok)                        //如果接收好了進行紅外處理
  177.                 {   
  178.                         Ircordpro();
  179.                         irok=0;
  180.                 }
  181.                 if(irpro_ok)                   //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
  182.                 {
  183.                         Ir_work();
  184.                 }
  185. }

  186. void red_ini(void)
  187. {
  188.         EX0init(); //初始化外部中斷
  189.         TIM0init();//初始化定時器
  190. }
  191.   
  192. #endif
復制代碼


簡易紅外遙控計算器.zip

50.79 KB, 下載次數: 12, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2019-12-31 00:47 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久亚洲一区二区三区四区 | 成人免费看片网 | 91精品国产91久久久久游泳池 | 亚洲国产精品成人综合久久久 | 国产清纯白嫩初高生在线播放视频 | 久久国产综合 | 久久久久九九九女人毛片 | 国产高清在线 | 欧美一级欧美一级在线播放 | wwwww在线观看 | 久久久高清 | 情侣av| 国产在线一区观看 | 在线中文字幕亚洲 | 国产免费一区二区三区 | 欧美精品一区二区三区四区 | 伊人伊人| 国产精品99精品久久免费 | 成人午夜网 | 国产一区二区三区视频在线观看 | 亚洲精品一 | 久久中文字幕电影 | av电影一区二区 | 成人免费黄色片 | 无码一区二区三区视频 | 成人在线视频网 | 日本精品久久久久久久 | 美日韩免费 | 日本a网站 | 国产欧美精品在线观看 | 91视频在线观看 | 久久精品| 国产高清无av久久 | 狠狠爱综合网 | 欧美成人高清视频 | 久久精品亚洲一区 | 欧美xxxⅹ性欧美大片 | 成人一区二区三区在线观看 | aaa级片| 国产精品久久国产愉拍 | 中文字幕视频在线 |