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

QQ登錄

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

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

單片機(jī)紅外線(xiàn)多功能電子鐘程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:405166 發(fā)表于 2020-5-22 10:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
設(shè)計(jì)實(shí)際實(shí)現(xiàn)功能
(1) 進(jìn)行實(shí)時(shí)時(shí)鐘顯示功能(達(dá)到正點(diǎn)時(shí),自動(dòng)報(bào)時(shí))
(2) 時(shí)間校準(zhǔn)功能 液晶能夠顯示年月日星期時(shí)分秒(以上位數(shù)據(jù)均可調(diào)),最后一部分顯示電自1707班級(jí)名
(3) 設(shè)置鬧鐘功能,能夠?qū)?shí)時(shí)時(shí)鐘進(jìn)行設(shè)置鬧鐘(且能夠選擇到點(diǎn)提醒功能)
   當(dāng)選擇提醒功能0時(shí),鬧鐘到點(diǎn)進(jìn)行響鈴
   當(dāng)選擇提醒功能1時(shí),鬧鐘到點(diǎn)進(jìn)行驅(qū)動(dòng)風(fēng)扇
   當(dāng)選擇提醒功能2時(shí),鬧鐘到點(diǎn)播放鈴聲黑人抬棺
(4) 能夠作為AD測(cè)電壓模塊,將所測(cè)電壓實(shí)時(shí)顯示到LCD1602上面
(5) 當(dāng)按下功能轉(zhuǎn)換5時(shí),LCD1602會(huì)顯示出所設(shè)置鬧鐘的時(shí)間以及外界的溫度,持續(xù)顯示5秒鐘,最終將顯示實(shí)時(shí)時(shí)鐘


單片機(jī)源程序如下:
  1. /*
  2. 本系統(tǒng)共分為以下幾個(gè)模塊:
  3. LCD1602顯示模塊
  4. DS1302實(shí)時(shí)模塊
  5. 紅外發(fā)射遙控模塊
  6. XPT2046AD測(cè)電壓模塊
  7. DS18B20溫度傳感器模塊

  8. 源程序說(shuō)明
  9. ds18b02.c和ds18b02.h文件為DS1302實(shí)時(shí)時(shí)鐘模塊的配置庫(kù)文件
  10. lcd.c和lcd.h為lcd1602液晶顯示模塊的配置文件
  11. realtime.c和realtime.h為實(shí)時(shí)時(shí)鐘模塊的配置文件
  12. redkey.c和redkey.h為紅外發(fā)射模塊的配置文件
  13. xpt2046.c和xpt2046.h為AD測(cè)量模塊的配置文件
  14. timer.c和timer.h為定時(shí)器的配置文件
  15. redkeyhandle.c和redkeyhandle.h為紅外發(fā)射按鍵的處理函數(shù)文件
  16. lcd_time.c和lcd_time.h為液晶顯示的處理函數(shù)文件
  17. heirentaiguan.che和heirentaiguan.h為黑人抬棺鈴聲


  18. 實(shí)現(xiàn)功能
  19. 1 進(jìn)行實(shí)時(shí)時(shí)鐘顯示功能(達(dá)到正點(diǎn)時(shí),自動(dòng)報(bào)時(shí))

  20. 2 時(shí)間校準(zhǔn)功能 液晶能夠顯示年月日星期時(shí)分秒(以上位數(shù)據(jù)均可調(diào)),最后一部分顯示電自1707班級(jí)名

  21. 3 設(shè)置鬧鐘功能,能夠?qū)?shí)時(shí)時(shí)鐘進(jìn)行設(shè)置鬧鐘(且能夠選擇到點(diǎn)提醒功能)
  22.    當(dāng)選擇提醒功能0時(shí),鬧鐘到點(diǎn)進(jìn)行響鈴
  23.    當(dāng)選擇提醒功能1時(shí),鬧鐘到點(diǎn)進(jìn)行驅(qū)動(dòng)風(fēng)扇
  24.    當(dāng)選擇提醒功能2時(shí),鬧鐘到播放音樂(lè)

  25. 4 能夠作為AD測(cè)電壓模塊,將所測(cè)電壓實(shí)時(shí)顯示到LCD上面

  26. 5 當(dāng)按下功能轉(zhuǎn)換5時(shí),LCD會(huì)顯示出所設(shè)置鬧鐘的時(shí)間以及外界的溫度,持續(xù)顯示5秒鐘,最終將顯示實(shí)時(shí)時(shí)鐘


  27. */


  28. #include "reg52.h"                       
  29. #include "lcd.h"
  30. #include "realtime.h"
  31. #include "timer.h"
  32. #include "lcd_time.h"
  33. #include "redkey.h"
  34. #include "redkeyhandle.h"
  35. #include "heirentaiguan.h"

  36. typedef unsigned int u16;         
  37. typedef unsigned char u8;
  38. sbit beep = P1^5;                 //無(wú)源蜂鳴器
  39. sbit moto = P1^2;                 //直流電機(jī)
  40. sfr WDT_CONTER = 0xE1;         //看門(mén)狗
  41. bit flag1000ms = 0;                 //1s標(biāo)記位
  42. bit flag1ms = 0;                 //1ms標(biāo)記位
  43. struct sTime bufTime;          //重置緩存時(shí)間區(qū)
  44. u8 psec = 0xAA;
  45. u8 logo[]="1707";
  46. u8 time[8];       
  47. u8 str[20];                 //lcd顯示功能數(shù)組
  48. u8 mode=1;                                 //模式選擇,模式1為實(shí)時(shí)時(shí)鐘
  49. u8 watchclockmode = 0;         //鬧鐘模式
  50. u8 ds18b20flag5s=0;                 //溫度顯示5s模式
  51. unsigned int zhengdianflag = 0;        //正點(diǎn)標(biāo)記位
  52. unsigned char ircode[4];                //紅外發(fā)射接收碼
  53. bit irflag = 0;                                        //紅外發(fā)射標(biāo)記位
  54. bit openwatchclock = 0;                        //開(kāi)啟鬧鐘時(shí)鐘
  55. bit naozhong = 0;                                //鬧鐘標(biāo)記位
  56. bit dianji =0;                                        //電機(jī)標(biāo)記位
  57. bit zhengdian = 0;                                //正點(diǎn)標(biāo)記位
  58. bit heiren = 0;                                        //黑人抬棺標(biāo)記位

  59. void main(void)
  60. {
  61.    
  62.         lcd_init();                           //lcd1602初始化
  63.         Timer1Init();                        //定時(shí)器1初始化
  64.     Timer2Init();                        //定時(shí)器2初始化
  65.         InitDS1302();                         //ds1302初始化
  66.         pic_write();                         //寫(xiě)入自定義字符
  67.         Initredkey();                         //紅外發(fā)射初始化
  68.         rstclockinit();                         //鬧鐘重置初始化
  69.         moto = 0;                                 //電機(jī)初始化
  70.         WDT_CONTER = 0x36;                 //開(kāi)啟看門(mén)狗
  71.         while(1)
  72.   {
  73.     WDT_CONTER |= 0x10;                 //喂狗
  74.          if(flag1000ms)                        //1s刷新
  75.         {
  76.            flag1000ms = 0;
  77.            if(mode==1){
  78.            lcd_displaytime();  //實(shí)時(shí)時(shí)鐘
  79.           }
  80.            if(mode==2)
  81.           { lcd_displayrstclock();        //設(shè)置實(shí)時(shí)時(shí)鐘
  82.             mode = 20;
  83.           }
  84.            if(mode==3)
  85.           {
  86.             lcd_displaywatchclock();         //設(shè)置鬧鐘
  87.                 mode=30;
  88.           }
  89.            if(mode==4)
  90.           {
  91.             lcd_displayxpt2046();                //AD測(cè)電壓模式
  92.           }
  93.            if(mode==5)
  94.           {
  95.             EA = 0;
  96.             lcd_display18b20();                   //顯示周?chē)臏囟纫约霸O(shè)置的鬧鐘時(shí)間
  97.                 mode=50;
  98.                
  99.           }
  100.            if(mode==50)                                        //顯示溫度以及設(shè)置的鬧鐘時(shí)間5s之后回到實(shí)時(shí)時(shí)鐘界面
  101.           {
  102.         ds18b20flag5s++;
  103.                 if(ds18b20flag5s>=3){
  104.                   mode=1;
  105.                   ds18b20flag5s=0;
  106.                 }            
  107.           }
  108.         }
  109.     redkeyIRQ();                        //紅外線(xiàn)掃描
  110.     if(zhengdian==1){                  //正點(diǎn)提示(如果正點(diǎn)了,zhengdian被置1)
  111.           if(flag1ms)
  112.           {
  113.             flag1ms=0;
  114.                 beep=~beep;
  115.                 zhengdianflag--;       //響鈴的時(shí)間,在lcd.time.c里面被設(shè)置為了一個(gè)常數(shù)
  116.                 if(zhengdianflag<=0){  //時(shí)間到了,將標(biāo)志置零
  117.                 zhengdian = 0;
  118.                 }
  119.           }

  120.         }
  121.         //提示功能區(qū)(如果被設(shè)置了,那么相應(yīng)的標(biāo)記位被置1)
  122.         if(naozhong==1){           //鬧鐘響鈴提示
  123.            if(flag1ms)
  124.            {
  125.              flag1ms=0;
  126.                  beep=~beep;       //蜂鳴器響
  127.            }
  128.         }
  129.         if(dianji==1){                   //電機(jī)轉(zhuǎn)動(dòng)提示
  130.            if(flag1ms)
  131.            {
  132.                  flag1ms=0;
  133.                  moto=~moto;       //驅(qū)動(dòng)電機(jī)IO口翻轉(zhuǎn),此時(shí)假如外接了直流電機(jī),即可啟動(dòng)
  134.            }       
  135.         }
  136.         if(heiren==1){                         //黑人抬棺鈴聲
  137.        
  138.          BuzzDriver();          //鈴聲驅(qū)動(dòng)函數(shù)
  139.          TR2 = 0;               //定時(shí)器2停止,為了確保鈴聲的品質(zhì),此時(shí)時(shí)鐘顯示刷新會(huì)停止
  140.         }
  141.           
  142.   }       
  143.                            
  144. }
復(fù)制代碼

程序51hei提供下載:
紅外線(xiàn)多功能電子鐘.zip (131.79 KB, 下載次數(shù): 34)


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

使用道具 舉報(bào)

沙發(fā)
ID:328014 發(fā)表于 2020-5-22 14:43 | 只看該作者
好東東 有原理圖嗎?
回復(fù)

使用道具 舉報(bào)

板凳
ID:432653 發(fā)表于 2020-5-23 11:42 | 只看該作者
紅外線(xiàn)是啥東西?
回復(fù)

使用道具 舉報(bào)

地板
ID:405166 發(fā)表于 2020-6-5 11:16 | 只看該作者
單片機(jī)是普中科技最便宜的那種51單片機(jī)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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