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

標題: 單片機 整點報時 定時小鬧鐘程序 [打印本頁]

作者: 51hei社區    時間: 2016-1-16 05:56
標題: 單片機 整點報時 定時小鬧鐘程序
  功能描述:十、分可調      整點報時      定時小鬧鐘
1.共有4個按鍵 3個指示燈  ,其中D1亮表示正常運行狀態 滅表示鬧鐘設置狀態,D2表示按鍵有效提示(即按下任意一個按鍵 D2 都會亮一次)另外一個事供電指示燈,沒有什么大作用。
2.十、分、鬧鐘開關、鬧鐘設置 分別接在P1.0、P1.1、P3.2、P3.3口。
按下INT1是進入鬧鐘設置模式,顯示屏左數第二位顯示“8”,調整P1.0 P1.1設置鬧鐘時間,再按下INT1確認,同時推出鬧鐘設置模式進入運行狀態。
INT0是鬧鐘開關,開啟時最左顯示“C"否則不顯示。
正常運行下,直接按 P1.0、P1.1對時間進行校正。
當然,按鍵都會有閃燈,和不同聲音提示。



51單片機程序源代碼:
  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個連續的存儲器

  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;   //蜂鳴次數
  18. bit beep;          //整點報時標志
  19. bit run;         //運行標志
  20. bit flash;         //滅燈標志
  21. bit clarm_switch;     //鬧鐘開關標志
  22. bit baoshi;     //報時開關標志
  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;      //  按鍵標識
  28. sbit led2=P1^7;      // 運行標志
  29. uint n,k;

  30. void delay_10us(uchar n)    //10微秒級延時
  31. { do
  32.   { _nop_();
  33.     _nop_();
  34.     _nop_();
  35.     _nop_();
  36.     _nop_();
  37.   }while(--n);
  38. }
  39. void delay_ms(uint n)     //毫秒級延時
  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;    //開中斷;
  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;    //延時防抖
  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);  //等待鍵松開
  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;    //延時防抖
  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);        //等待鍵松開
  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//定時器0中斷號為1號 使用第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;    //整點到 蜂鳴標志  置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存儲段碼
  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    //鬧鐘開關
  228. {
  229. clarm_switch=!clarm_switch;
  230. if(clarm_switch)dis[7]=12;   //開啟顯示   C
  231. else dis[7]=11;      //關閉 不顯示   
  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     //鬧鐘時間設置/運行 轉換開關
  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. }
復制代碼



作者: 51busy    時間: 2017-11-1 16:11
好資料,51黑有你更精彩!!!
作者: xwnc    時間: 2017-11-8 18:34
樓主太強了,學習學習
作者: y124967    時間: 2018-1-4 22:53
樓主有hex文件嗎
763958866@qq.com
作者: xiao123456789    時間: 2018-1-6 16:38
這個怎么操作,我運行之后不太會操作
作者: 急不可待    時間: 2018-1-6 21:06
學習來了。謝謝樓主的共享。
作者: HHYYY    時間: 2018-12-22 11:45
怎么液晶顯示沒反應呀?
作者: 獵人筆記啊    時間: 2018-12-26 17:06
有hex文件嗎?
1823520922@qq.com
作者: mxjymm    時間: 2018-12-27 23:09
獵人筆記啊 發表于 2018-12-26 17:06
有hex文件嗎?

他給你發了exe文件了嗎

作者: 獵人筆記啊    時間: 2018-12-28 14:26
mxjymm 發表于 2018-12-27 23:09
他給你發了exe文件了嗎

   沒有呢
作者: 雨傘    時間: 2020-9-29 09:05
我用proteus8仿真時程序報171個錯誤,不知為什么?

作者: 第四面墻    時間: 2020-10-2 11:51
keil檢測有兩個警告
作者: 第四面墻    時間: 2020-10-2 11:51
xiao123456789 發表于 2018-1-6 16:38
**** 作者被禁止或刪除 內容自動屏蔽 ****

用keil寫




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 人人干人人爱 | 亚洲激情在线视频 | 亚洲一区二区欧美 | 色哟哟一区二区 | 精品欧美在线 | 亚洲欧美一区二区三区四区 | 国产亚洲一区二区三区 | 久久久亚洲精品视频 | 美女久久久 | 中文字幕丰满人伦在线 | 国产成人综合视频 | 日韩高清在线观看 | 久久精品人人 | 中文字幕av网站 | 国产在线中文字幕 | 国产精品福利在线观看 | 黄视频免费在线观看 | 欧美在线视频一区二区 | 一区二区精品 | 免费看毛片网站 | 欧美毛片基地 | 国产三级做爰高清在线 | 欧美日韩国产在线播放 | 丰满女人裸体淫交 | 亚洲欧美日韩一区 | 中文字幕一区二区在线播放 | www一级片 | 久久综合在线 | 久久中文字幕视频 | 日韩黄色在线视频 | 国产激情在线视频 | 久久综合在线 | 人人草人人干 | 少妇一级片 | 国产精品美女久久 | 日本免费高清 | 亚洲免费在线视频 | 色综合久| 免费看大片a | 91一区二区 | 国产伦精品一区二区免费 |