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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

2路紅外遙控定時時鐘程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72519 發(fā)表于 2015-1-21 22:06 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
是用51hei單片機(jī)開發(fā)板 電路圖詳見:http://www.zg4o1577.cn/f/51hei-5.pdf  的數(shù)碼管部分, 用2個74hc573 鎖存,p0口作為數(shù)據(jù)口 ,p3.6和p3.7分別是段和位的鎖存端口.

  1. #include<reg52.h> //52單片機(jī)頭文件
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit dula=P3^6; //數(shù)碼管段位選
  5. sbit wale=P3^7;
  6. sbit menu=P2^4;//功能選擇鍵
  7. sbit jia=P2^5;// 加鍵
  8. sbit jian=P2^6;//減鍵
  9. sbit led=P1^0; //LED燈
  10. uchar hour,minute,sec;//時 分 妙
  11. uchar irtime;//紅外時間
  12. uchar startflag;//檢測到紅外標(biāo)志位
  13. uchar a,t,cnt;//
  14. uchar hour1,minute1,o;// 2路定時變量
  15. uchar hour2,minute2,s;
  16. uint ta,ta1;//2路定時時長
  17. uchar irdata[33];//紅外時間數(shù)組
  18. uchar bitnum;//第幾位
  19. uchar irreceok;//紅外接收完標(biāo)志
  20. uchar irprosok; //紅外處理完標(biāo)志
  21. uchar ircode[4];//存有4個字節(jié)紅外數(shù)組
  22. uchar disp[8]; //數(shù)碼管顯示數(shù)組
  23. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 顯示段碼值0~9
  24. void delay(uint sm)//延時函數(shù)
  25. {
  26. uint i,j;
  27. for(i=sm;i>0;i--)
  28.   for(j=170;j>0;j--);
  29. }
  30. void init()//定時器初始化,T0 T1 T2
  31. {
  32. TMOD=0x12;
  33. RCAP2H=(65536-1000)/256;
  34. RCAP2L=(65536-1000)%256;
  35. ET2=1;
  36. TR2=1;
  37. TH0=0x00;
  38. TL0=0x00;
  39. TH1=(65536-50000)/256;
  40. TL1=(65536-50000)%256;
  41. EA=1;
  42. TR0=1;
  43. ET0=1;
  44. TR1=1;
  45. ET1=1;
  46. }
  47. void int0int(void)//外部中斷0初始化
  48. {
  49. IT0=1;
  50. EX0=1;
  51. EA=1;
  52. }
  53. void key()//按鍵檢測
  54. {
  55. if(menu==0)
  56. {
  57. delay(10);
  58. if(menu==0)
  59. {
  60.    TR1=0;
  61.   a++;
  62.   if(a==3)
  63.   {
  64.   TR1=1;
  65.   a=0;
  66.   }
  67.   while(!menu);
  68.     }
  69. }
  70. if(a==1)
  71. {
  72. if(jia==0)
  73. {
  74. delay(10);
  75. if(jia==0)
  76. {
  77.   hour++;
  78.   if(hour==24)
  79.   hour=0;
  80.   while(!jia);
  81.     }
  82. }
  83. if(jian==0)
  84. {
  85. delay(10);
  86. if(jian==0)
  87. {
  88.   hour--;
  89.   if(hour==-1)
  90.   hour=23;
  91.   while(!jian);
  92.     }
  93. }
  94. }
  95. if(a==2)
  96. {
  97. if(jia==0)
  98. {
  99. delay(10);
  100. if(jia==0)
  101. {
  102.   minute++;
  103.   if(minute==60)
  104.   minute=0;
  105.   while(!jia);
  106.     }
  107. }
  108. if(jian==0)
  109. {
  110. delay(10);
  111. if(jian==0)
  112. {
  113.   minute--;
  114.   if(minute==-1)
  115.   minute=59;
  116.   while(!jian);
  117.     }
  118. }
  119. }

  120. }
  121. void dispose()//時間處理
  122. {
  123. if(t==20)
  124. {
  125. t=0;
  126. sec++;
  127. }
  128. if(sec==60)
  129. {
  130. sec=0;
  131. minute++;
  132. }
  133. if(minute==60)
  134. {
  135. minute=0;
  136. hour++;
  137. }
  138. if(hour==24)
  139. hour=0;

  140. }
  141. void hongwai()//紅外按鍵檢測
  142. {
  143.   if(ircode[3]==0xf8)//0xf8 0xf6 0xea接收到的遙控按鍵碼
  144. {
  145.    TR1=0;
  146.   a++;
  147.   delay(10);
  148.   if(a==9)
  149.   {
  150.   TR1=1;
  151.   a=0;
  152.   }
  153.   
  154.     }

  155. if(a==1)
  156. {
  157. if(ircode[3]==0xf6)
  158. {
  159.   hour++;
  160.    delay(50);
  161.   if(hour==24)
  162.   hour=0;

  163.     }
  164. if(ircode[3]==0xea)
  165. {
  166.   hour--;
  167.    delay(50);
  168.   if(hour==-1)
  169.   hour=23;
  170.   
  171.     }
  172. }
  173. if(a==2)
  174. {
  175. if(ircode[3]==0xf6)
  176. {
  177.   minute++;
  178.    delay(50);
  179.   if(minute==60)
  180.   minute=0;
  181.   
  182.     }
  183. if(ircode[3]==0xea)
  184. {
  185.   minute--;
  186.    delay(50);
  187.   if(minute==-1)
  188.   minute=59;
  189.   
  190.     }
  191. }
  192. if(a==3)
  193. {
  194. if(ircode[3]==0xf6)
  195. {
  196.   hour1++;
  197.    delay(50);
  198.   if(hour1==24)
  199.   hour1=0;

  200.     }
  201. if(ircode[3]==0xea)
  202. {
  203.   hour1--;
  204.    delay(50);
  205.   if(hour1==-1)
  206.   hour1=23;
  207.   
  208.     }
  209. }
  210. if(a==4)
  211. {
  212. if(ircode[3]==0xf6)
  213. {
  214.   minute1++;
  215.    delay(50);
  216.   if( minute1==60)
  217.    minute1=0;
  218.     }
  219. if(ircode[3]==0xea)
  220. {
  221.    minute1--;
  222.    delay(50);
  223.   if( minute1==-1)
  224.    minute1=59;

  225.     }
  226. }
  227. if(a==5)
  228. {
  229. if(ircode[3]==0xf6)
  230. {
  231.   ta++;
  232.    delay(50);
  233.   if(ta==555)
  234.   ta=0;

  235.     }
  236. if(ircode[3]==0xea)
  237. {
  238.   ta--;
  239.    delay(50);
  240.   if(ta==-1)
  241.   ta=554;

  242.     }
  243. }
  244. if(a==6)
  245. {
  246. if(ircode[3]==0xf6)
  247. {
  248.   hour2++;
  249.    delay(50);
  250.   if(hour2==24)
  251.   hour2=0;

  252.     }
  253. if(ircode[3]==0xea)
  254. {
  255.   hour2--;
  256.    delay(50);
  257.   if(hour2==-1)
  258.   hour2=23;
  259.   
  260.     }
  261. }
  262. if(a==7)
  263. {
  264. if(ircode[3]==0xf6)
  265. {
  266.   minute2++;
  267.    delay(50);
  268.   if( minute2==60)
  269.    minute2=0;

  270.     }
  271. if(ircode[3]==0xea)
  272. {
  273.    minute2--;
  274.    delay(50);
  275.   if( minute2==-1)
  276.    minute2=59;

  277.     }
  278. }
  279. if(a==8)
  280. {
  281. if(ircode[3]==0xf6)
  282. {
  283.   ta1++;
  284.    delay(50);
  285.   if(ta1==555)
  286.   ta1=0;

  287.     }
  288. if(ircode[3]==0xea)
  289. {
  290.   ta1--;
  291.    delay(50);
  292.   if(ta1==-1)
  293.   ta1=554;
  294.   
  295.     }
  296. }

  297. ircode[3]=0;
  298. }
  299. void irwork(void)// 把16進(jìn)制變成十進(jìn)制
  300. {
  301. disp[0]=ircode[0]/16;
  302. disp[1]=ircode[0]%16;
  303. disp[2]=ircode[1]/16;
  304. disp[3]=ircode[1]%16;
  305. disp[4]=ircode[2]/16;
  306. disp[5]=ircode[2]%16;
  307. disp[6]=ircode[3]/16;
  308. disp[7]=ircode[3]%16;
  309. }
  310. void laozhong()//定時處理函數(shù)
  311. {
  312. if((hour1==hour)&&(minute1==minute))
  313. {
  314. o=1;
  315. }
  316. if(o==1)
  317. {
  318.   led=0;
  319.   while(!ta);
  320.   o=0;
  321.   led=1;
  322. }  
  323. if((sec==60)&&(o==1))
  324. {
  325. ta--;
  326. if(ta==0)
  327. ta=0;
  328. }
  329. if((hour2==hour)&&(minute2==minute))
  330. {
  331. s=1;
  332. }
  333. if(s==1)
  334. {
  335.   led=0;
  336.   while(!ta1);
  337.   s=0;
  338.   led=1;
  339. }
  340. if((sec==60)&&(s==1))
  341. {
  342. ta1--;
  343. if(ta1==0)
  344. ta1=0;
  345. }  
  346. }
  347. void irpros(void)//紅外接收處理函數(shù)
  348. {
  349. uchar k,i,j;
  350. uchar value;
  351. k=1;
  352. for(j=0;j<4;j++)
  353. {
  354. for(i=0;i<8;i++)
  355. {
  356. value=value>>1;
  357. if(irdata[k]>6)
  358. {
  359.   value=value|0x80;
  360. }
  361. k++;
  362. }
  363. ircode[j]=value;
  364. }
  365. irprosok=1;
  366. }
  367. void main()
  368. {
  369. init();
  370. int0int();
  371. hour1=0;minute1=1;ta=1;hour2=0;minute2=3;ta1=1;
  372. while(1)
  373. {
  374. laozhong();
  375. hongwai();
  376. if(irreceok)
  377. {
  378. irpros();
  379. irreceok=0;
  380. }
  381. if(irprosok)
  382. {
  383. irprosok=0;
  384. irwork();

  385. }
  386. key();
  387.   dispose();
  388. }
  389. }
  390. void time2() interrupt 5//定時器2用來顯示
  391. {
  392. //TH1=(65536-1000)/256;
  393. //TL1=(65536-1000)%256;
  394. TF2=0;
  395. if((a==0)||(a==1)||(a==2))
  396. {
  397. if(++cnt>7)cnt=0;
  398. switch(cnt)
  399. {   
  400. case 0:dula=1;/*P0=table[disp[0]];*/P0=table[hour/10];dula=0;P0=0xff;wale=1;P0=0xfe;wale=0;break;
  401. case 1:dula=1;/*P0=table[disp[1]];*/P0=table[hour%10];dula=0;P0=0xff;wale=1;P0=0xfd;wale=0;break;
  402. case 2:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xfb;wale=0;break;
  403. case 3:dula=1;/*P0=table[disp[3]];*/P0=table[minute/10];dula=0;P0=0xff;wale=1;P0=0xf7;wale=0;break;
  404. case 4:dula=1;/*P0=table[disp[4]];*/P0=table[minute%10];dula=0;P0=0xff;wale=1;P0=0xef;wale=0;break;
  405. case 5:dula=1;/*P0=table[disp[5]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xdf;wale=0;break;
  406. case 6:dula=1;/*P0=table[disp[6]];*/P0=table[sec/10];dula=0;P0=0xff;wale=1;P0=0xbf;wale=0;break;
  407. case 7:dula=1;/*P0=table[disp[7]];*/P0=table[sec%10];dula=0;P0=0xff;wale=1;P0=0x7f;wale=0;break;
  408.    }
  409. }
  410. if((a==3)||(a==4))
  411. {
  412. if(++cnt>6)cnt=0;
  413. switch(cnt)
  414. {   
  415. case 0:dula=1;/*P0=table[disp[0]];*/P0=table[hour1/10];dula=0;P0=0xff;wale=1;P0=0xfe;wale=0;break;
  416. case 1:dula=1;/*P0=table[disp[1]];*/P0=table[hour1%10];dula=0;P0=0xff;wale=1;P0=0xfd;wale=0;break;
  417. case 2:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xfb;wale=0;break;
  418. case 3:dula=1;/*P0=table[disp[3]];*/P0=table[minute1/10];dula=0;P0=0xff;wale=1;P0=0xf7;wale=0;break;
  419. case 4:dula=1;/*P0=table[disp[4]];*/P0=table[minute1%10];dula=0;P0=0xff;wale=1;P0=0xef;wale=0;break;
  420. case 5:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xdf;wale=0;break;
  421. case 6:dula=1;/*P0=table[disp[6]];*/P0=0x06;dula=0;P0=0xff;wale=1;P0=0xbf;wale=0;break;
  422. }
  423. }
  424. if(a==5)
  425. {
  426. if(++cnt>5)cnt=0;
  427. switch(cnt)
  428. {   
  429. case 0:dula=1;/*P0=table[disp[0]];*/P0=table[ta/1000];dula=0;P0=0xff;wale=1;P0=0xfe;wale=0;break;
  430. case 1:dula=1;/*P0=table[disp[1]];*/P0=table[(ta/100)%10];dula=0;P0=0xff;wale=1;P0=0xfd;wale=0;break;
  431. case 2:dula=1;/*P0=table[disp[2]];*/P0=table[(ta%100)/10];dula=0;P0=0xff;wale=1;P0=0xfb;wale=0;break;
  432. case 3:dula=1;/*P0=table[disp[3]];*/P0=table[ta%10];dula=0;P0=0xff;wale=1;P0=0xf7;wale=0;break;
  433. case 4:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xef;wale=0;break;
  434. case 5:dula=1;/*P0=table[disp[2]];*/P0=0x06;dula=0;P0=0xff;wale=1;P0=0xdf;wale=0;break;
  435. }
  436. }
  437. if((a==6)||(a==7))
  438. {
  439. if(++cnt>6)cnt=0;
  440. switch(cnt)
  441. {   
  442. case 0:dula=1;/*P0=table[disp[0]];*/P0=table[hour2/10];dula=0;P0=0xff;wale=1;P0=0xfe;wale=0;break;
  443. case 1:dula=1;/*P0=table[disp[1]];*/P0=table[hour2%10];dula=0;P0=0xff;wale=1;P0=0xfd;wale=0;break;
  444. case 2:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xfb;wale=0;break;
  445. case 3:dula=1;/*P0=table[disp[3]];*/P0=table[minute2/10];dula=0;P0=0xff;wale=1;P0=0xf7;wale=0;break;
  446. case 4:dula=1;/*P0=table[disp[4]];*/P0=table[minute2%10];dula=0;P0=0xff;wale=1;P0=0xef;wale=0;break;
  447. case 5:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xdf;wale=0;break;
  448. case 6:dula=1;/*P0=table[disp[6]];*/P0=0x5b;dula=0;P0=0xff;wale=1;P0=0xbf;wale=0;break;
  449. }
  450. }
  451. if(a==8)
  452. {
  453. if(++cnt>5)cnt=0;
  454. switch(cnt)
  455. {   
  456. case 0:dula=1;/*P0=table[disp[0]];*/P0=table[ta1/1000];dula=0;P0=0xff;wale=1;P0=0xfe;wale=0;break;
  457. case 1:dula=1;/*P0=table[disp[1]];*/P0=table[(ta1/100)%10];dula=0;P0=0xff;wale=1;P0=0xfd;wale=0;break;
  458. case 2:dula=1;/*P0=table[disp[2]];*/P0=table[(ta1%100)/10];dula=0;P0=0xff;wale=1;P0=0xfb;wale=0;break;
  459. case 3:dula=1;/*P0=table[disp[3]];*/P0=table[ta1%10];dula=0;P0=0xff;wale=1;P0=0xf7;wale=0;break;
  460. case 4:dula=1;/*P0=table[disp[2]];*/P0=0x40;dula=0;P0=0xff;wale=1;P0=0xef;wale=0;break;
  461. case 5:dula=1;/*P0=table[disp[2]];*/P0=0x5b;dula=0;P0=0xff;wale=1;P0=0xdf;wale=0;break;
  462. }
  463. }
  464. }
  465. void time1() interrupt 3// 定時器1用來當(dāng)時鐘
  466. {
  467. TH1=(65536-50000)/256;
  468. TL1=(65536-50000)%256;
  469. t++;
  470. }
  471. void time0() interrupt 1//定時器0用來當(dāng)紅外
  472. {
  473. irtime++;

  474. }
  475. void init0 () interrupt 0//外部中斷檢測紅外
  476. {
  477.   if(startflag)
  478.   {
  479.   if(irtime>32)
  480.   {
  481. bitnum=0;
  482.   }
  483.   irdata[bitnum]=irtime;
  484.   irtime=0;
  485.   bitnum++;
  486.   if(bitnum==33)
  487.   {
  488.    bitnum=0;
  489.   irreceok=1;
  490.   }
  491.   }
  492.   else
  493.   {
  494.    startflag=1;
  495.    irtime=0;
  496.   
  497.   }

  498. }
復(fù)制代碼


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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人免费在线观看 | 久久久久久影院 | 成人亚洲一区 | 国产午夜精品一区二区三区四区 | 在线视频日韩 | 亚洲国产精品99久久久久久久久 | 国产成人99久久亚洲综合精品 | 亚洲一区在线日韩在线深爱 | 国产精品高潮呻吟久久av野狼 | 99精品99| 久久亚洲天堂 | 国产乱码精品一区二区三区五月婷 | 亚洲人成在线播放 | 97精品视频在线观看 | 国产a级毛片| 视频一区在线观看 | 国产欧美一区二区在线观看 | 日本三级视频 | 九九热这里只有精品6 | 亚洲国产成人精品女人久久久 | 成人在线观看免费 | 91人人澡人人爽 | 91在线精品秘密一区二区 | 国产精品免费一区二区三区四区 | 欧美男人天堂 | 亚洲欧美日韩精品久久亚洲区 | 欧美亚洲国产一区 | 一级在线视频 | 中文字幕国产视频 | 999久久久久久久久6666 | 国产超碰人人爽人人做人人爱 | 精品视频www| 成人在线电影网站 | 天天看天天干 | 欧美日韩理论 | 日韩在线不卡 | 久久精品手机视频 | 中文字幕av一区 | 国产一二三区免费视频 | 国产蜜臀 | 欧美激情综合网 |