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

QQ登錄

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

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

單片機(jī)紅外遙控可調(diào)時(shí)鐘程序源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85764 發(fā)表于 2015-7-15 23:31 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
數(shù)碼管顯示部分的原理圖(開(kāi)發(fā)板中只需要截圖顯示部分即可):http://www.torrancerestoration.com/f/51hei-5.pdf

電路:紅外接收頭接在 單片機(jī)的外部中斷0口。數(shù)碼管用8位共陰極數(shù)碼管,2個(gè)573鎖存 詳見(jiàn)上面的51hei單片機(jī)開(kāi)發(fā)板的pdf圖,本人測(cè)試成了.

程序源代碼:


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. uchar smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. uchar smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  8. uchar miao,fen,shi,flag_set,key_can;
  9. uchar startflag,bitnum,irtime;
  10. uchar irreceok,irprosok,flag_s;
  11. bit flag_500ms;
  12. uchar dis_smg[6];
  13. uchar irdata[33];
  14. uchar ircode[4];
  15. uchar bdata bdat;
  16. sbit dat0=bdat^0;
  17. sbit dat1=bdat^1;
  18. sbit dat2=bdat^2;
  19. sbit dat3=bdat^3;
  20. sbit dat4=bdat^4;
  21. sbit dat5=bdat^5;
  22. sbit dat6=bdat^6;
  23. sbit dat7=bdat^7;
  24. void smg_s(uchar dat)     //用于閃爍
  25. {
  26. bdat=dat;
  27. if(dat0==1)
  28.     dis_smg[0]=0x00;
  29. if(dat1==1)
  30.     dis_smg[1]=0x00;
  31. if(dat2==1)
  32.     dis_smg[2]=0x00;
  33. if(dat3==1)
  34.     dis_smg[3]=0x00;
  35. if(dat4==1)
  36.     dis_smg[4]=0x00;
  37. if(dat5==1)
  38.     dis_smg[5]=0x00;
  39. if(dat6==1)
  40.     dis_smg[6]=0x00;
  41. if(dat7==1)
  42.     dis_smg[7]=0x00;
  43. }      
  44.       
  45. void dis_init()        //顯示初始化
  46. {
  47. dis_smg[0]=smg_du[miao%10];
  48. dis_smg[1]=smg_du[miao/10];
  49. dis_smg[2]=smg_du[fen%10]|0x80;
  50. dis_smg[3]=smg_du[fen/10];
  51. dis_smg[4]=smg_du[shi%10]|0x80;
  52. dis_smg[5]=smg_du[shi/10];
  53. }
  54. void display()
  55. {
  56. static uchar i;
  57. P0=0x00;
  58. dula=1;
  59. dula=0;
  60. P0=smg_we[5-i];
  61. wela=1;
  62. wela=0;
  63. P0=dis_smg[i];
  64. dula=1;
  65. dula=0;
  66. i++;
  67. if(i==6)
  68. i=0;
  69. }
  70. void timer0_init()        //定時(shí)器0方式1,用于時(shí)鐘定時(shí)
  71. {

  72. TH0=0;
  73. TL0=0;
  74. ET0=1;
  75. TR0=1;
  76. }   
  77.            //定時(shí)器1方式2,用于紅外時(shí)間加數(shù)
  78. void timer1_init()
  79. {
  80. TMOD=0X20|0x01;       //選擇定時(shí)器0和定時(shí)器1
  81. TH1=0;
  82. TL1=0;
  83. ET1=1;
  84. TR1=1;
  85. EA=1;
  86. }
  87.               //外部中斷0,用于確定紅外數(shù)據(jù)
  88. void int0_init()
  89. {              //下降沿觸發(fā)
  90. IT0=1;
  91. EX0=1;
  92. EA=1;
  93. }
  94. void irpros()     //紅外數(shù)據(jù)處理函數(shù)
  95. {
  96. uchar k=1,value;
  97. uchar i,j;
  98. for(j=0;j<4;j++)
  99. {
  100.   for(i=0;i<8;i++)
  101.   {
  102.    value=value>>1;   //低位在前,高位在后
  103.    if(irdata[k]>6)     //比較數(shù)據(jù),確定數(shù)據(jù)為1還是為0
  104.    {
  105.     value=value|0x80; //數(shù)據(jù)為一
  106.    }
  107.    k++;
  108.   }
  109.   ircode[j]=value;
  110. }
  111. irprosok=1;
  112. }
  113. void keyinit()     //按鍵初始化
  114. {
  115. switch(ircode[3])
  116. {
  117.   case 0xfe:key_can=1;break;   //選擇鍵
  118.   case 0xfd:key_can=2;break;   //加鍵
  119.   case 0xff:key_can=3;break;   //減鍵
  120. }
  121. ircode[3]=0;     //紅外數(shù)據(jù)最后一位
  122. }
  123. void clock_can()    //時(shí)間調(diào)整
  124. {
  125. if(key_can==1)
  126. {
  127.      key_can=0;
  128.   flag_set++;
  129.   if(flag_set>=4)
  130.   {
  131.    flag_set=0;
  132.    flag_s=0x00;
  133.   }
  134.   if(flag_set==1)
  135.      flag_s=0x30;
  136.   if(flag_set==2)
  137.      flag_s=0x0c;
  138.   if(flag_set==3)
  139.      flag_s=0x03;
  140. }
  141. if(key_can==2)
  142. {
  143.   key_can=0;
  144.   if(flag_set==1)
  145.   {
  146.    shi++;
  147.    if(shi>=24)
  148.    shi=0;
  149.   }
  150.   if(flag_set==2)
  151.   {
  152.    fen++;
  153.    if(fen>=60)
  154.    fen=0;
  155.   }
  156.   if(flag_set==3)
  157.   {
  158.    miao++;
  159.    if(miao>=60)
  160.    miao=0;
  161.   }
  162. }
  163. if(key_can==3)
  164. {
  165.   key_can=0;
  166.   if(flag_set==1)
  167.   {
  168.    if(shi==0)
  169.     shi=24;
  170.     shi--;
  171.   }
  172.   if(flag_set==2)
  173.   {
  174.    if(fen==0)
  175.     fen=60;
  176.     fen--;
  177.   }
  178.   if(flag_set==3)
  179.   {
  180.    if(miao==0)
  181.     miao=60;
  182.     miao--;
  183.   }
  184. }
  185. }   
  186. void main()
  187. {
  188. timer0_init();  
  189. timer1_init();
  190. int0_init();
  191. dis_init();
  192. while(1)
  193. {
  194.      if(flag_500ms)
  195.    dis_init();
  196.   else
  197.    smg_s(flag_s);
  198.   if(irreceok)
  199.   {
  200.    irpros();
  201.    irreceok=0;
  202.   }
  203.   if(irprosok)
  204.   {
  205.    irprosok=0;
  206.    dis_init();
  207.   }
  208.   keyinit();
  209.   clock_can();
  210.   display();
  211. }
  212. }
  213. void timer0() interrupt 1
  214. {
  215. static uchar i,j;
  216.   TH0=0x3c;
  217.   TL0=0xb0;
  218.   j++;
  219.   if(j>=10)
  220.   {
  221.    j=0;
  222.   flag_500ms=~flag_500ms;
  223.   }
  224.   i++;
  225.   if(flag_set==0)
  226.   if(i>=20)
  227.   {
  228.    i=0;
  229.   miao++;
  230.   if(miao>=60)
  231.   {
  232.    miao=0;
  233.    fen++;
  234.    if(fen>=60)
  235.    {
  236.     fen=0;
  237.     shi++;
  238.     if(shi>=24)
  239.     {
  240.      shi=0;
  241.     }
  242.    }
  243.   }
  244.   }
  245. }      
  246. void timer1() interrupt 3
  247. {
  248. irtime++;
  249. }
  250. void int0() interrupt 0
  251. {
  252. if(startflag)
  253. {
  254.   if(irtime>32)
  255.   {
  256.    bitnum=0;
  257.   }
  258.   irdata[bitnum]=irtime;
  259.   irtime=0;
  260.   bitnum++;
  261.   if(bitnum==33)
  262.   {
  263.     bitnum=0;
  264.    irreceok=1;
  265.   }
  266. }
  267. else
  268. {
  269.   startflag=1;
  270.   irtime=0;
  271. }
  272. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
luo22 + 5 很給力!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:194701 發(fā)表于 2017-5-1 16:55 | 只看該作者
能提供一下電路圖嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:140489 發(fā)表于 2017-5-2 14:20 | 只看該作者
本帖最后由 lids 于 2017-5-2 14:24 編輯

用的什么遙控器,是不是圖片這種遙控器,我把程序下載到單片機(jī),6位數(shù)碼管能顯示走時(shí),但是按遙控器沒(méi)反應(yīng)

QQ截圖20170502142309.png (93.13 KB, 下載次數(shù): 43)

QQ截圖20170502142309.png
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表