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

QQ登錄

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

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

單片機(jī) 整點(diǎn)報(bào)時(shí) 定時(shí)小鬧鐘程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102668 發(fā)表于 2016-1-16 05:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  功能描述:十、分可調(diào)      整點(diǎn)報(bào)時(shí)      定時(shí)小鬧鐘
1.共有4個(gè)按鍵 3個(gè)指示燈  ,其中D1亮表示正常運(yùn)行狀態(tài) 滅表示鬧鐘設(shè)置狀態(tài),D2表示按鍵有效提示(即按下任意一個(gè)按鍵 D2 都會(huì)亮一次)另外一個(gè)事供電指示燈,沒(méi)有什么大作用。
2.十、分、鬧鐘開(kāi)關(guān)、鬧鐘設(shè)置 分別接在P1.0、P1.1、P3.2、P3.3口。
按下INT1是進(jìn)入鬧鐘設(shè)置模式,顯示屏左數(shù)第二位顯示“8”,調(diào)整P1.0 P1.1設(shè)置鬧鐘時(shí)間,再按下INT1確認(rèn),同時(shí)推出鬧鐘設(shè)置模式進(jìn)入運(yùn)行狀態(tài)。
INT0是鬧鐘開(kāi)關(guān),開(kāi)啟時(shí)最左顯示“C"否則不顯示。
正常運(yùn)行下,直接按 P1.0、P1.1對(duì)時(shí)間進(jìn)行校正。
當(dāng)然,按鍵都會(huì)有閃燈,和不同聲音提示。



51單片機(jī)程序源代碼:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<stdio.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar code segtbl[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6};
  7.                      // 0  1    2   3   4    5    6   7   8   9    -        c   
  8. uchar data dis_b; //位段碼
  9. uchar data dis_r; //位偏移量
  10. uchar data dis[8];      //定義8個(gè)連續(xù)的存儲(chǔ)器

  11. uchar data c_min;
  12. uchar data c_hou;
  13. uchar data second;
  14. uchar data minite;
  15. uchar data hour;
  16. uchar data CNTA;
  17. uchar data speaker_num;   //蜂鳴次數(shù)
  18. bit beep;          //整點(diǎn)報(bào)時(shí)標(biāo)志
  19. bit run;         //運(yùn)行標(biāo)志
  20. bit flash;         //滅燈標(biāo)志
  21. bit clarm_switch;     //鬧鐘開(kāi)關(guān)標(biāo)志
  22. bit baoshi;     //報(bào)時(shí)開(kāi)關(guān)標(biāo)志
  23. sbit  speaker=P1^3;
  24. sbit minitek=P1^1;
  25. sbit hourk=P1^0;
  26. sbit enter=P1^4;
  27. sbit led1=P1^6;      //  按鍵標(biāo)識(shí)
  28. sbit led2=P1^7;      // 運(yùn)行標(biāo)志
  29. uint n,k;

  30. void delay_10us(uchar n)    //10微秒級(jí)延時(shí)
  31. { do
  32.   { _nop_();
  33.     _nop_();
  34.     _nop_();
  35.     _nop_();
  36.     _nop_();
  37.   }while(--n);
  38. }
  39. void delay_ms(uint n)     //毫秒級(jí)延時(shí)
  40. { do delay_10us(131);
  41.   while(--n);
  42. }
  43. clk_to_dis()
  44. {
  45.     dis[0]=minite%10;
  46. dis[1]=minite/10;
  47.      if(flash)dis[2]=10;
  48.         else dis[2]=11;
  49. dis[3]=hour%10;
  50. dis[4]=hour/10;
  51. dis[5]=10;
  52. dis[6]=11;
  53. }
  54. clarm_to_dis()
  55. {
  56.     dis[0]=c_min%10;
  57. dis[1]=c_min/10;
  58. if(flash)dis[2]=10;//亮燈
  59.         else dis[2]=11;    //滅燈
  60. dis[3]=c_hou%10;
  61. dis[4]=c_hou/10;
  62. dis[5]=10;
  63. dis[6]=8;
  64. }
  65. void main()
  66. {
  67. P2=0xff;
  68. P1=0XFF;
  69. P0=0xff;
  70. run=1;
  71. led1=0;
  72. flash=0x00;
  73. dis[2]=10;      //第三位顯示“-”
  74. dis_r=0;        //為偏移量初始為“0”
  75. dis_b=0x80; //選通P2.7
  76. second=0x00;
  77. minite=0x00;
  78. hour=0x00;
  79. CNTA=0x00;
  80. TMOD=0x11;
  81. TH0=19500/256;
  82. TL0=19500%256;
  83. TH1=0xfc;
  84. TL1=0x18;
  85. EA=1;    //開(kāi)中斷;
  86. TR0=1;
  87. TR1=1;
  88. ET1=1;
  89. EX0=1;
  90. EX1=1;
  91. ET0=1;

  92. while(1)
  93.   {

  94.    while(run==1)
  95.    {
  96.   while(!minitek)
  97.   {
  98.   for(n=0;n<1000;n++);
  99.   if(!minitek==0)break;    //延時(shí)防抖
  100.   minite++;
  101.   second=0x00;
  102.   led1=0;
  103.       for(n=0;n<20;n++)
  104.         {
  105.          speaker=!speaker;
  106.            delay_10us(50);             //蜂鳴器響
  107.          }
  108.    
  109.   if(minite==60)minite=0x00;
  110.   while(!minitek);  //等待鍵松開(kāi)
  111.    led1=1;    //顯示燈   
  112.   }

  113.       while(!hourk)
  114.   {
  115.   for(n=0;n<1000;n++);
  116.   if(!hourk==0)break;
  117.   hour++;
  118.   second=0x00;
  119.   led1=0;
  120.    for(n=0;n<30;n++)
  121.    {
  122.    speaker=!speaker;
  123.    delay_10us(30);             //蜂鳴器響
  124.    }

  125.   if(hour==24) hour=0x00;
  126.   while(!hourk);
  127.   led1=1;
  128.   }
  129.   
  130.   if(clarm_switch)
  131.   {
  132.   if(c_min==minite&&c_hou==hour)
  133.   
  134.    {speaker_num=60;
  135.    beep=1;
  136.    while(beep&& clarm_switch)
  137.    {
  138.    led1=!led1;
  139.    delay_ms(100);
  140.    }
  141.    led1=1;
  142.    beep=0;
  143.    }
  144.          }

  145.   while(run==0)
  146.   {
  147.      while(!minitek)
  148. {
  149. for(n=0;n<1000;n++);
  150. if(!minitek==0)break;    //延時(shí)防抖
  151. c_min++;
  152. led1=0;
  153. for(n=0;n<25;n++)
  154. {
  155. speaker=!speaker;
  156. delay_10us(40);             //蜂鳴器響
  157. }
  158. if(c_min==60)c_min=0x00;
  159. while(!minitek);        //等待鍵松開(kāi)
  160. led1=1;
  161. }

  162.   while(!hourk)
  163. {for(n=0;n<1000;n++);
  164. if(!hourk==0)break;
  165. c_hou++;
  166. led1=0;
  167. for(n=0;n<40;n++)
  168. {
  169. speaker=!speaker;
  170. delay_10us(20);             //蜂鳴器響
  171. }
  172. if(c_hou==24) c_hou=0x00;
  173. while(!hourk);
  174. led1=1;
  175. }

  176.   

  177. }
  178.     }
  179. }

  180. }
  181. timer0() interrupt 1 using 2//定時(shí)器0中斷號(hào)為1號(hào) 使用第2組寄存器
  182. {
  183. TH0=19534/256;
  184. TL0=19534%256;
  185. CNTA++;
  186. if(beep)
  187. {
  188. if(speaker_num%2)speaker=!speaker;
  189. if(!speaker_num) beep=0;

  190. }
  191. if(CNTA==20)
  192. {       if(speaker_num)speaker_num--;
  193. flash=!flash;
  194. CNTA=0;
  195.          second++;//秒加
  196.    if(second==60)
  197.    {second=0;
  198.     minite++;
  199.   if(minite==60)
  200.   {
  201.   minite=0;
  202.   hour++;
  203.   if(hour>7){speaker_num=2*hour;    //整點(diǎn)到 蜂鳴標(biāo)志  置1
  204.      beep=1;}
  205.    if(hour==24)

  206.    {
  207.    hour=0;
  208.    }
  209.   }
  210.     }
  211. }

  212. }
  213. timer1() interrupt 3 using 3
  214.   {
  215.       
  216. uchar ttt=0;                   //ttt存儲(chǔ)段碼
  217. if(run==0) clarm_to_dis();
  218. else clk_to_dis();
  219. ttt = segtbl[dis[dis_r]];        //段碼賦值

  220. P2= dis_b;                       //位碼送P2
  221. P0=ttt;                          //段碼送P0

  222. if(++dis_r==8)dis_r=0x00;
  223. dis_b=_cror_(dis_b,1);          //位碼右移
  224. TH1=0xfc;
  225.         TL1=0x18;

  226.   }

  227. int_0() interrupt 0    //鬧鐘開(kāi)關(guān)
  228. {
  229. clarm_switch=!clarm_switch;
  230. if(clarm_switch)dis[7]=12;   //開(kāi)啟顯示   C
  231. else dis[7]=11;      //關(guān)閉 不顯示   
  232.   for(k=0;k<40;k++)
  233. {speaker=!speaker;
  234. led1=!led1;
  235. delay_ms(5);
  236. }
  237. led1=1;
  238. }

  239. int_1() interrupt 2     //鬧鐘時(shí)間設(shè)置/運(yùn)行 轉(zhuǎn)換開(kāi)關(guān)
  240. {
  241. run=!run;
  242. if(run)led2=0;
  243. else led2=1;
  244. for(k=0;k<90;k++)      // 蜂鳴器響
  245. {speaker=!speaker;      //指示燈閃爍
  246. led1=!led1;
  247. delay_10us(100);
  248. }
  249. led1=1;
  250. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:223127 發(fā)表于 2017-11-1 16:11 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:246166 發(fā)表于 2017-11-8 18:34 | 只看該作者
樓主太強(qiáng)了,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

地板
ID:271702 發(fā)表于 2018-1-4 22:53 | 只看該作者
樓主有hex文件嗎
763958866@qq.com
回復(fù)

使用道具 舉報(bào)

5#
ID:272316 發(fā)表于 2018-1-6 16:38 | 只看該作者
這個(gè)怎么操作,我運(yùn)行之后不太會(huì)操作
回復(fù)

使用道具 舉報(bào)

6#
ID:146834 發(fā)表于 2018-1-6 21:06 | 只看該作者
學(xué)習(xí)來(lái)了。謝謝樓主的共享。
回復(fù)

使用道具 舉報(bào)

7#
ID:450918 發(fā)表于 2018-12-22 11:45 | 只看該作者
怎么液晶顯示沒(méi)反應(yīng)呀?
回復(fù)

使用道具 舉報(bào)

8#
ID:455664 發(fā)表于 2018-12-26 17:06 | 只看該作者
有hex文件嗎?
1823520922@qq.com
回復(fù)

使用道具 舉報(bào)

9#
ID:440558 發(fā)表于 2018-12-27 23:09 | 只看該作者

他給你發(fā)了exe文件了嗎
回復(fù)

使用道具 舉報(bào)

10#
ID:455664 發(fā)表于 2018-12-28 14:26 | 只看該作者
mxjymm 發(fā)表于 2018-12-27 23:09
他給你發(fā)了exe文件了嗎

   沒(méi)有呢
回復(fù)

使用道具 舉報(bào)

11#
ID:821033 發(fā)表于 2020-9-29 09:05 | 只看該作者
我用proteus8仿真時(shí)程序報(bào)171個(gè)錯(cuò)誤,不知為什么?
回復(fù)

使用道具 舉報(bào)

12#
ID:825230 發(fā)表于 2020-10-2 11:51 | 只看該作者
keil檢測(cè)有兩個(gè)警告
回復(fù)

使用道具 舉報(bào)

13#
ID:825230 發(fā)表于 2020-10-2 11:51 | 只看該作者
xiao123456789 發(fā)表于 2018-1-6 16:38
**** 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽 ****

用keil寫(xiě)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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