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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2343|回復: 0
收起左側

用單片機解碼再用595驅動數碼管顯示出紅外遙控接收來的解碼數據

[復制鏈接]
ID:577326 發表于 2019-7-3 17:41 | 顯示全部樓層 |閱讀模式
自己寫的程序,已經驗證過有實物
QQ圖片20190703174118.jpg QQ圖片20190703174123.jpg

單片機源程序如下:
  1. #include "SC92F732X_C.H"
  2. #define        uchar         unsigned        char
  3. #define        uint         unsigned    int
  4. #define        ul         unsigned    long

  5. ///////////////////////////引腳
  6. #define   mosout               P00                 //輸出引腳
  7. #define   baiout               P11
  8. #define   lvout_510r               P17
  9. #define   huangout_510r               P27
  10. #define   hongout               P24

  11. #define   usbfout               P12



  12. #define   led               P26                               
  13. #define   on               P13
  14. #define   vin               P10

  15. #define   CLK               P02
  16. #define   DATA_1           P01
  17. #define   CKSHX               P05

  18. #define   hwpin               P16


  19. #define   vbatt              0x41
  20. #define   v1              0x40
  21. ////////////////////////////// 變量定義
  22. bit  ON_OFF,bi;
  23. bit irpro_ok,irok,jsok;
  24. uint  sleep_data;

  25. uchar bb,hs,h,ied;

  26. ul v1_add,v1_data;
  27. ul vb_add,vb_data;



  28. uchar  irtime,irdet;


  29. uchar kehuh,kehul,keyma,keyfanma;

  30. uchar keydata,jsokadd;
  31. ///////////////////////////////////
  32. unsigned char IRcord[4];
  33. unsigned char irdata[33];
  34. /////////////////////////////////
  35. unsigned char const code shuma[] =
  36. {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};// 0--9 //
  37. //////////////////////////////////////////////////// 上電初始化程序
  38. void mcu_init(void)
  39. {
  40. /* 初始化I/O口 */
  41.         P0CON =0xff;          // 0為輸入,1為輸出
  42.         P0PH=0;                  //        1有效
  43.         P0 =0;

  44.         P1CON = 0x86;
  45.         P1PH=0x48;
  46.         P1 = 0x49;

  47.         P2CON = 0xf0;
  48.         P2PH=0;
  49.         P2 = 0;
  50. /*初始化AD*/
  51.         ADCCFG1 = 0;                                        // AIN8通道開關 //
  52.         ADCCFG0 = 0x3;                               
  53.         ADCCON = 0;
  54. /////////////////打開外部中斷
  55.     EA=1;
  56.     EINT0=0;
  57.         IPINT0=0;

  58.         INT0F=0;
  59.         INT0R=0;


  60.         EINT1=1;
  61.         INT1F=0x4;        //INT12
  62.         INT1R=0;

  63.         IP1=0x8;
  64. /////////////////打開定時器
  65.     ET0=1;           //**** T0使能
  66.     TMCON=0;   //*****頻率來自FSYS/12(系統時鐘) 12M
  67.     TMOD=0x1A; //****8位自動重裝定時器,溢出時將TH0的值自動裝入TL0
  68.     TR0=1;           //*****定時器1的開始計數

  69.     TL0=0;
  70.         TH0=156;        //256-120
  71. //////////////////////AD參考電壓2.4
  72.     OPINX=0xC2;
  73.     OPREG=0X80;
  74. ////////////////// 初始化變量
  75.                                                                                                                
  76. }
  77. //////////////////////////////////////////////////////////////////       
  78. void waibu12_int(void) interrupt 2
  79. {

  80.          irdet=irtime;
  81.          irtime=0;

  82.     if((irdet<140)&&(irdet>=130))//引導碼 TC9012的頭碼,9ms+4.5ms
  83.        {
  84.                    ied=0;
  85.                    jsok=1;
  86.            }


  87.            if(irdet>160)//引導碼大于16MS
  88.        {
  89.               irdet=0;
  90.                    ied=0;
  91.                    jsok=0;
  92.            }

  93.            if(jsok)
  94.            {
  95.             irdata[ied]=irdet;//存儲每個電平的持續時間,用于以后判斷是0還是1
  96.             ied++;
  97.              if(ied>=33)
  98.                 {
  99.                  irok=1;
  100.                  ied=0;
  101.                                  jsok=0;
  102.                 }
  103.                 }

  104. }
  105. ////////////////////////////////////////////////定時中斷
  106. void time_int(void) interrupt 1
  107. {

  108.   irtime++;  //用于計數2個下降沿之間的時間
  109.   /*if(irtime>250)
  110.   {
  111.    irtime=0;
  112.   }         */
  113. //************************************
  114. }
  115. /////////////////////////////////////////////////////////////
  116. unsigned int ad_conver(uchar ad_pin)
  117. {
  118.         uint ad_res_data,ad_h,ad_l;
  119.         uchar as;
  120.     ADCCON=0x80;
  121.         ad_h=0;ad_l=0;
  122.         ADCCON|=ad_pin;                  //ADCS=1; 00001000  on ad
  123.         while(!(ADCCON&0x10)){as=0;}
  124.         ad_l=ADCVL;       
  125.         ad_h=ADCVH;
  126.         ad_h<<=4;
  127.         ad_l>>=4;
  128.         ad_res_data=ad_h|ad_l;
  129.         ADCCON=0;
  130.         return(ad_res_data);         
  131. }
  132. ///////////////////////////////////
  133. void dalay_1(uint yanshi)
  134. {          
  135.     uint sb;
  136.    for(sb=0;sb<yanshi;sb++){}
  137. }
  138. ////////////////////////////////////////////////
  139. /////////////////////////////////////////////IO口組合
  140. void in_74ls595(uchar p)
  141. {       
  142.       uchar id;
  143.           for(id=0;id<8;id++)
  144.      {        
  145.              if(p&0x80){DATA_1=1;}
  146.              else{DATA_1=0;}
  147.                  CLK=0;
  148.                  CLK=1;
  149.                  p<<=1;
  150.           }       
  151. }
  152. //////////////////////////////////////////
  153. void  led_display(uint display_data )
  154. {       
  155.    uchar qian,bai,shi,ge;
  156.    qian=display_data/1000;
  157.    bai=(display_data%1000)/100;
  158.    shi=(display_data%100)/10;
  159.    ge=display_data%10;

  160. //************************************************掃描

  161.           if(qian==0){in_74ls595(0);}
  162.           else{in_74ls595(shuma[qian]);}
  163.           in_74ls595(0x10);
  164.           CKSHX=1;
  165.           dalay_1(5);
  166.           CKSHX=0;
  167.           dalay_1(100);
  168.           in_74ls595(0);
  169.           in_74ls595(0);
  170.           CKSHX=1;
  171.           dalay_1(3);
  172.           CKSHX=0;
  173.           dalay_1(3);


  174.           if((qian==0)&&(bai==0)){in_74ls595(0);}
  175.           else{in_74ls595(shuma[bai]);}
  176.           in_74ls595(0x20);
  177.           CKSHX=1;
  178.           dalay_1(5);
  179.           CKSHX=0;
  180.           dalay_1(100);
  181.           in_74ls595(0);
  182.           in_74ls595(0);
  183.           CKSHX=1;
  184.           dalay_1(3);
  185.           CKSHX=0;
  186.           dalay_1(3);


  187.           if((qian==0)&&(bai==0)&&(shi==0)){in_74ls595(0);}
  188.           else{in_74ls595(shuma[shi]);}
  189.           in_74ls595(0x40);
  190.           CKSHX=1;
  191.           dalay_1(5);
  192.           CKSHX=0;
  193.           dalay_1(100);
  194.           in_74ls595(0);
  195.           in_74ls595(0);
  196.           CKSHX=1;
  197.           dalay_1(3);
  198.           CKSHX=0;
  199.           dalay_1(3);




  200.           in_74ls595(shuma[ge]);
  201.           in_74ls595(0x80);
  202.           CKSHX=1;
  203.           dalay_1(5);
  204.           CKSHX=0;
  205.           dalay_1(100);
  206.           in_74ls595(0);
  207.           in_74ls595(0);
  208.           CKSHX=1;
  209.           dalay_1(3);
  210.           CKSHX=0;
  211.           dalay_1(3);

  212. }
  213. //////////////////////////////////////////
  214. void  ledoff_display()
  215. {       
  216. //************************************************掃描

  217.           in_74ls595(0);
  218.           in_74ls595(0);
  219.           CKSHX=1;
  220.           dalay_1(3);
  221.           CKSHX=0;
  222.           dalay_1(400);


  223. }
  224. ///////////////////////////////////////////////
  225. void key_in()
  226. {

  227. //*********************************************開關鍵

  228.         if(!on)
  229.         {         
  230.               bb++;
  231.          if((bb>100)&&bi&&(!on))
  232.           {
  233.           bb=0;
  234.           ON_OFF=!ON_OFF;
  235.           bi=0;
  236.           }       
  237.      }
  238.           else
  239.           {
  240.                           bi=1;
  241.                         bb=0;
  242.           }
  243. //********************************************遙控功能鍵

















  244. }
  245. /////////////////////////////////////////////////////////
  246. void vbat_in()
  247. {
  248.                    h++;  
  249.         vb_add+=ad_conver(vbatt);
  250.             if(h>=200)
  251.             {
  252.              h=0;
  253.              vb_data=vb_add/200;
  254.              vb_add=0;                         
  255.             }
  256. }
  257. /////////////////////////////////////////////////////////////
  258. void v1_in()
  259. {       
  260.                          hs++;  
  261.         v1_add+=ad_conver(v1);
  262.             if(hs>=200)
  263.             {
  264.             hs=0;
  265.             v1_data=v1_add/200;
  266.             v1_add=0;
  267.             }

  268. }
  269. ////////////////////////////////////////// //紅外碼值處理
  270.                
  271. void Ircordpro(void)//紅外碼值處理函數
  272. {
  273.   uchar i, j, k,value;
  274.   uchar cord;

  275.   k=1;
  276.   for(i=0;i<4;i++)      //處理4個字節
  277.      {
  278.       for(j=1;j<=8;j++) //處理1個字節8位
  279.          {
  280.           cord=irdata[k];
  281.           if(cord>20)////////高電平2.25MS,低電平1.125MS
  282.                   {
  283.              value|=0x80;
  284.                   }
  285.           if(j<8)
  286.             {
  287.              value>>=1;
  288.             }
  289.            k++;
  290.          }
  291.      IRcord[i]=value;
  292.      value=0;     
  293.      }
  294.      irpro_ok=1;//處理完畢標志位置1
  295. }
  296. //////////////////////////////////////////////////////////////////////
  297. void Ir_work(void)
  298. {
  299.         kehuh=IRcord[0];
  300.         kehul=IRcord[1];
  301.         keyma=IRcord[2];
  302.         keyfanma=IRcord[3];

  303.         if(keyma||keyfanma==255)
  304.         {
  305.          keydata=keyma;
  306.         }
  307. }
  308. //////////////////////////////////////////////////////////////////////////////////////////////////////
  309. void main(void)
  310. {
  311.       mcu_init();
  312.          while(1)
  313.          {
  314.            v1_in();
  315.            vbat_in();
  316.            key_in();

  317. //************************
  318.           if(irok)         //如果接收好了進行紅外處理
  319.          {  
  320.               irok=0;
  321.           Ircordpro();
  322.          }

  323.          if(irpro_ok)         //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
  324.           {
  325.               irpro_ok=0;
  326.           Ir_work();
  327.           }




  328.          if(jsok)
  329.          {
  330.           jsokadd++;
  331.           if(jsokadd>250)
  332.           {
  333.            jsokadd=0;
  334.            jsok=0;
  335.           }
  336.          }
  337.          else
  338.          {
  339.           jsokadd=0;
  340.          }
  341. //*********************
  342.            if(ON_OFF)
  343.            {
  344.               if(irok)         //如果接收好了進行紅外處理
  345.          {  
  346.               irok=0;
  347.           Ircordpro();
  348.          }

  349.          if(irpro_ok)         //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
  350.           {
  351.               irpro_ok=0;
  352.           Ir_work();
  353.           }
  354.             led_display(keydata);
  355.             led=irok;
  356.            }
  357.            else
  358.            {
  359.                 ledoff_display();
  360.             keydata=0;
  361.                 led=0;
  362.            }
  363.      }  
  364. }
復制代碼

所有程序51hei提供下載:
四位74hc595.rar (2.58 KB, 下載次數: 19)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频免费在线 | 爱综合 | 亚洲免费一区二区 | 99在线免费观看 | 久久久九九| 国产欧美一区二区三区久久人妖 | 国产999精品久久久久久 | 国产精品毛片一区二区在线看 | 第一区在线观看免费国语入口 | 成年人黄色一级毛片 | 亚洲综合色视频在线观看 | 97色综合 | 久久免费精品视频 | 精品在线一区 | 成人小视频在线观看 | 天天干.com | 中文字幕二区三区 | 九九色综合 | 亚洲视频二区 | 成人午夜免费福利视频 | 中文字字幕一区二区三区四区五区 | 欧美黄色大片在线观看 | 日韩欧美在线观看 | 日韩毛片 | 欧美日韩免费在线 | 国产精品久久久久久久久大全 | 国产一区二区三区在线视频 | 欧美一区二 | 国产成在线观看免费视频 | 欧美h视频 | 九九热精品免费 | 国产高清精品在线 | 天天玩天天干天天操 | 精品国产色 | 国产在线视频在线观看 | 欧美男男videos| 毛片入口| 中文字幕在线观看一区 | 九九久久在线看 | 在线观看成年人视频 | 成人午夜激情 |