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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1782|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

簡(jiǎn)單8數(shù)碼管顯示紅外編碼 單片機(jī)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:55129 發(fā)表于 2019-4-13 02:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
無(wú)需復(fù)雜的電路,使用8個(gè)數(shù)碼管既可顯示出紅外遙控的編碼,電路簡(jiǎn)單,代碼少,適合新手玩,不知道論壇有沒(méi)有人發(fā)過(guò),新人新帖

單片機(jī)源程序如下:
  1. /***************************************************************************
  2. 標(biāo)題:        紅外遙控解碼器數(shù)碼管顯示   使用12mhz晶振
  3. 管腳:P33紅外接收數(shù)據(jù),P0口數(shù)碼管數(shù)據(jù)口,P10數(shù)碼管千位,P11數(shù)碼管百位,P12數(shù)碼管十位,P13數(shù)碼管個(gè)位
  4. 效果:        運(yùn)行程序,按遙控器按鍵,在數(shù)碼管上顯示相應(yīng)的地址碼-控制碼(以16進(jìn)制顯示)
  5.                         分兩段,前段是地址碼,后段為控制碼,用點(diǎn)隔開(kāi),顯示兩字節(jié),忽略反碼,使用共陰數(shù)碼管

  6. ******************************************************************************/

  7. #include <reg51.h>

  8. sbit SMG_0 = P1^0;        //定義數(shù)碼管(千萬(wàn)位)
  9. sbit SMG_1 = P1^1;        //定義數(shù)碼管(百萬(wàn)位)
  10. sbit SMG_2 = P1^2;        //定義數(shù)碼管(十萬(wàn)位)
  11. sbit SMG_3 = P1^3;        //定義數(shù)碼管(萬(wàn)位)
  12. sbit SMG_4 = P1^4;        //定義數(shù)碼管(千位)
  13. sbit SMG_5 = P1^5;        //定義數(shù)碼管(百位)
  14. sbit SMG_6 = P1^6;        //定義數(shù)碼管(十位)
  15. sbit SMG_7 = P1^7;        //定義數(shù)碼管(個(gè)位)

  16. /********數(shù)據(jù)定義*************************************************************/
  17. sbit hwx=P3^3;                  //紅外接收數(shù)據(jù)引腳,
  18. code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};        //數(shù)碼管段值表 0-9 a-f
  19. unsigned char ly_disdate[8]={0,0,0,0,0,0,0,0};        //顯示緩沖
  20. unsigned char ly_lhj[4];        //保存NEC的四個(gè)字節(jié)數(shù)據(jù)
  21. unsigned char ly_ct=0;    //計(jì)數(shù)時(shí)間
  22. bit ly_flag=1;                  //成功接收標(biāo)志

  23. //函數(shù)聲明:
  24. void display();//定義顯示函數(shù),直接顯示緩沖區(qū)數(shù)值
  25. void delay(void);
  26. void delay100us(void);

  27. /***********外中斷1入口函數(shù),P33引腳,紅外線接收IC數(shù)據(jù)腳**************************/
  28. void hongwai(void) interrupt 2
  29.         {
  30.                 unsigned char i,ia;
  31. /**************開(kāi)始判斷是否為NEC波形引導(dǎo)碼的前9MS和后4.5MS******************************/
  32.                 ly_ct=0;              //計(jì)數(shù)時(shí)間清0

  33.                 while(!hwx)     //hwx紅外管腳

  34.                 delay100us();         //調(diào)用0.1MS延時(shí)計(jì)數(shù),ly_ct每調(diào)用一次加1

  35.                 if(ly_ct<80||ly_ct>100)            //NEC引導(dǎo)碼前9MS,ly_ct約等于90,給個(gè)誤差值,用80-100之間來(lái)判斷

  36.                 return;

  37.                 ly_ct=0;              //計(jì)數(shù)時(shí)間請(qǐng)0

  38.                 while(hwx)

  39.                 {
  40.                         delay100us();

  41.                         if(ly_ct>50)        //NEC引導(dǎo)碼引導(dǎo)碼的后4.5MS,ly_ct約45

  42.                         return;

  43.                 }
  44.                
  45.                 if(ly_ct<40)        //NEC引導(dǎo)碼引導(dǎo)碼的后4。5MS,ly_ct約45

  46.                 return;

  47. /***********開(kāi)始接收四個(gè)字節(jié)內(nèi)容**************************************/

  48.                 for(i=0;i<4;i++)
  49.                 {
  50.                        
  51.                         for(ia=0;ia<8;ia++)
  52.                         {

  53.                                 while(!hwx);        //低電平開(kāi)始,不處理只等待高電平接收

  54.                                 ly_ct=0;

  55.                                 while(hwx)   //高電平開(kāi)始,
  56.                                         {       
  57.                                                
  58.                                                 delay100us();

  59.                                                 if(ly_ct>20)

  60.                                                 return;

  61.                                         }

  62. //高電平結(jié)束,判斷數(shù)據(jù)1或0向變量移入

  63.                                                 ly_lhj[i]>>=1;        //數(shù)據(jù)由高位移入低位

  64.                                                 if(ly_ct>10)        //時(shí)間量TH1高于10,即高于1MS判斷為1

  65.                                                 ly_lhj[i]|=0x80;

  66.                                 }

  67.                 }

  68.                 ly_flag=1;        //接收成功

  69.                 TF1=0;

  70. }

  71. //顯示函數(shù),參數(shù)為顯示內(nèi)容,只顯示兩位數(shù)

  72.         void display()
  73.         {

  74.                 SMG_0=0;        //選擇千萬(wàn)位數(shù)碼管

  75.                 P0=table[ly_disdate[0]];        //

  76.                 delay();        //

  77.                 P0=0XFF;        //

  78.                 SMG_0=1;        //

  79.                 SMG_1=0;        //選擇百萬(wàn)位數(shù)碼管SMG_b

  80.                 P0=table[ly_disdate[1]]|0x80;        //加上小數(shù)點(diǎn)

  81.                 delay();        //延時(shí)

  82.                 P0=0XFF;        //

  83.                 SMG_1=1;        //

  84.                 SMG_2=0;        //選擇十位數(shù)碼管

  85.                 P0=table[ly_disdate[2]];        //

  86.                 delay();        //

  87.                 P0=0XFF;        //

  88.                 SMG_2=1;        //

  89.                 SMG_3=0;        //選擇個(gè)位數(shù)碼管

  90.                 P0=table[ly_disdate[3]]|0x80;        //加上小數(shù)點(diǎn);        //

  91.                 delay();        //

  92.                 P0=0XFF;        //

  93.                 SMG_3=1;        //
  94.                
  95.                 SMG_4=0;        //選擇千萬(wàn)位數(shù)碼管

  96.                 P0=table[ly_disdate[4]];        //

  97.                 delay();        //

  98.                 P0=0XFF;        //

  99.                 SMG_4=1;        //

  100.                 SMG_5=0;        //選擇百萬(wàn)位數(shù)碼管SMG_b

  101.                 P0=table[ly_disdate[5]]|0x80;        //加上小數(shù)點(diǎn)

  102.                 delay();        //延時(shí)

  103.                 P0=0XFF;        //

  104.                 SMG_5=1;        //

  105.                 SMG_6=0;        //選擇十位數(shù)碼管

  106.                 P0=table[ly_disdate[6]];        //

  107.                 delay();        //

  108.                 P0=0XFF;        //

  109.                 SMG_6=1;        //

  110.                 SMG_7=0;        //選擇個(gè)位數(shù)碼管

  111.                 P0=table[ly_disdate[7]];        //加上小數(shù)點(diǎn)

  112.                 delay();        //

  113.                 P0=0XFF;        //

  114.                 SMG_7=1;        //

  115.         }

  116. //延時(shí)子函數(shù),短暫延時(shí)

  117. void delay(void)
  118.         {

  119.                 unsigned char i=10;

  120.                 while(i--);

  121.         }

  122. void delay100us(void)
  123.         {
  124.                 unsigned char i=15;
  125.                 while(i--);
  126.                 ly_ct++;
  127.         }

  128. void main(void)
  129.         {
  130.                 EA=1;        //首先開(kāi)啟總中斷
  131.                 EX1=1; //開(kāi)啟外部中斷1,紅外接收數(shù)據(jù)引腳
  132.                 IT1=1; //設(shè)置成下降沿觸發(fā)方式
  133.                 while(1)
  134.                         {
  135.                                 if(ly_flag)
  136.                                         {                 //接收成功處理顯示緩沖,以16進(jìn)制顯示
  137.                                                 ly_flag=0;
  138.                                                 ly_disdate[0]=ly_lhj[0]/16;
  139.                                                 ly_disdate[1]=ly_lhj[0]%16;
  140.                                                 ly_disdate[2]=ly_lhj[1]/16;
  141.                                                 ly_disdate[3]=ly_lhj[1]%16;
  142.                                                 ly_disdate[4]=ly_lhj[2]/16;
  143.                                                 ly_disdate[5]=ly_lhj[2]%16;
  144.                                                 ly_disdate[6]=ly_lhj[3]/16;
  145.                                                 ly_disdate[7]=ly_lhj[3]%16;
  146.                                         }
  147.                                         display();//顯示緩沖內(nèi)容

  148.                         }

  149.         }
復(fù)制代碼

所有資料51hei提供下載:
紅外遙控解碼8數(shù)碼管顯示.zip (36.27 KB, 下載次數(shù): 30)




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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-4-13 03:13 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:254123 發(fā)表于 2019-4-13 09:55 | 只看該作者
大佬,牛逼了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品中文字幕 | 久久久91精品国产一区二区三区 | 亚洲毛片在线观看 | 欧美日韩精品在线一区 | 国产视频黄色 | 在线播放一区二区三区 | 成人高潮片免费视频欧美 | 美女三区 | 久久久91精品国产一区二区精品 | 亚洲精品一区二区在线观看 | 免费在线观看黄色av | 一区二区在线不卡 | 精品国产一区二区国模嫣然 | 亚洲品质自拍视频网站 | 四虎影视在线 | 日本理论片好看理论片 | 91色站| 天天天插 | 免费a网站 | 国产在线a视频 | 午夜精品一区二区三区免费视频 | 天天摸天天干 | 亚洲精品视频导航 | 日韩在线观看网站 | 欧美a在线 | 一级毛片成人免费看a | 国产亚洲一区二区在线观看 | 美日韩免费视频 | 日本一区二区在线视频 | 亚洲三级在线 | 一区二区在线观看免费视频 | 天天草天天 | 中文字幕高清免费日韩视频在线 | 九九热re| 亚洲精品视 | 黄在线免费观看 | 亚洲福利在线观看 | 男人亚洲天堂 | 91久久精品一区二区三区 | 99精品国产在热久久 | 成人精品一区二区三区中文字幕 |