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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2247|回復(fù): 0
收起左側(cè)

基于51單片機的電子時鐘設(shè)計

[復(fù)制鏈接]
ID:786289 發(fā)表于 2020-6-23 16:33 | 顯示全部樓層 |閱讀模式
發(fā)貼僅為黑幣,非原創(chuàng),已表明出處,如有冒犯,還望海涵
所選用器材

單片機最小系統(tǒng)選用AT89C51),排阻,四個按鈕開關(guān),8位共陰數(shù)碼管,蜂鳴器;

有protues仿真電路原理圖源代碼:


  1. #include<reg51.h>

  2. #define uChar unsigned char

  3. #define uInt unsigned int

  4. uChar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  5. uChar b[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  6. uChar second=50,minute=59,hour=12,year=18,month=07,day=21,count;

  7. sbit Key1 = P3^0; //計時停止

  8. sbit Key2 = P3^1; //調(diào)位

  9. sbit Key3 = P3^2; //加一

  10. sbit Key4 = P3^3; //切換  

  11. sbit Buzzer=P1^1;

  12. /*********************延遲函數(shù)********************/

  13. void Delay(uInt t)

  14. {

  15. while(t)

  16. {

  17. t--;

  18. }

  19. }

  20. /*********************時分秒顯示函數(shù)*******************/

  21. void Dispaly1(uChar second,uChar minute,uChar hour)

  22. {

  23. /*********************第一位數(shù)碼管*********************/

  24. P2=b[0];

  25. P0=a[hour/10];

  26. Delay(10);

  27. /*********************第二位數(shù)碼管*********************/

  28. P2=b[1];

  29. P0=a[hour%10];

  30. Delay(10);

  31. /*********************第三位數(shù)碼管*********************/

  32. P2=b[2];

  33. P0=0x40;

  34. Delay(10);

  35. /*********************第四位數(shù)碼管*********************/

  36. P2=b[3];

  37. P0=a[minute/10];

  38. Delay(10);

  39. /*********************第五位數(shù)碼管*********************/

  40. P2=b[4];

  41. P0=a[minute%10];

  42. Delay(10);

  43. /*********************第六位數(shù)碼管*********************/

  44. P2=b[5];

  45. P0=0x40;

  46. Delay(10);

  47. /*********************第七位數(shù)碼管*********************/

  48. P2=b[6];

  49. P0=a[second/10];

  50. Delay(10);

  51. /*********************第八位數(shù)碼管*********************/

  52. P2=b[7];;

  53. P0=a[second%10];

  54. Delay(10);

  55. }

  56. /*********************年月日顯示函數(shù)********************/

  57. void Dispaly2(uChar day,uChar month,uChar year)

  58. {

  59. P2=b[0];

  60. P0=a[day/10];

  61. Delay(10);

  62. P2=b[1];

  63. P0=a[day%10];

  64. Delay(10);

  65. P2=b[2];

  66. P0=0x40;

  67. Delay(10);

  68. P2=b[3];

  69. P0=a[month/10];

  70. Delay(10);

  71. P2=b[4];

  72. P0=a[month%10];

  73. Delay(10);

  74. P2=b[5];

  75. P0=0x40;

  76. Delay(10);

  77. P2=b[6];

  78. P0=a[year/10];

  79. Delay(10);

  80. P2=b[7];

  81. P0=a[year%10];

  82. Delay(10);

  83. }

  84. /*********************時鐘按鍵掃描函數(shù)*********************/

  85. void Keyscan1()

  86. {

  87. static uChar i=0,j=0;

  88. if(Key1==0)

  89. {

  90. Delay(10); //消抖

  91. if(Key1==0)

  92. while(!Key1); //等待按鍵彈

  93. i++;

  94. }

  95. /*時鐘暫停功能*/

  96. if(i%2==1)

  97. {

  98. TR0=0;/*如果是奇數(shù)次按鍵自然關(guān)閉定時器0*/

  99. }

  100. if(i%2==0)

  101. {

  102. TR0=1;/*如果是偶數(shù)次按鍵則打開定時器0*/

  103. }

  104. /*時鐘調(diào)位和數(shù)值加一功能*/

  105. if(Key2==0)

  106. {

  107. Delay(10);

  108. if(Key2==0)

  109. while(!Key2);

  110. j++;

  111. }

  112. if(j%4==1)

  113. {

  114. if(Key3==0)

  115. {

  116. Delay(10);

  117. if(Key3==0)

  118. while(!Key3);

  119. second++;

  120. if(second==60)

  121. second=0;

  122. }

  123. }

  124. if(j%4==2)

  125. {

  126. if(Key3==0)

  127. {

  128. Delay(10);

  129. if(Key3==0)

  130. while(!Key3);

  131. minute++;

  132. if(minute==60)

  133. minute=0;

  134. }

  135. }

  136. if(j%4==3)

  137. {

  138. if(Key3==0)

  139. {

  140. Delay(10);

  141. if(Key3==0)

  142. while(!Key3);

  143. hour++;

  144. if(hour==24)

  145. hour=0;

  146. }

  147. }

  148. }

  149. /*日期按鍵掃描函數(shù)*/

  150. void Keyscan2()

  151. {

  152. static uChar m=0,n=0;

  153. if(Key1==0)

  154. {

  155. Delay(10);

  156. if(Key1==0)

  157. while(!Key3);

  158. m++;

  159. }

  160. if(m%2==1)

  161. {

  162. TR0=0;/*奇數(shù)次按鍵則關(guān)閉定時器0*/

  163. }

  164. if(m%2==0)

  165. {

  166. TR0=1;/*偶數(shù)次按鍵則打開定時器0*/

  167. }

  168. if(Key2==0)

  169. {

  170. Delay(10);

  171. if(Key2==0)

  172. while(!Key2);

  173. n++;

  174. }

  175. /*日期調(diào)位和日期加一功能*/

  176. if(n%4==1)

  177. {

  178. if(Key3==0)

  179. {

  180. Delay(10);

  181. if(Key3==0)

  182. while(!Key3);

  183. day++;

  184. if(day==30)

  185. day=0;

  186. }

  187. }

  188. if(n%4==2)

  189. {

  190. if(Key3==0)

  191. {

  192. Delay(10);

  193. if(Key3==0)

  194. while(!Key3);

  195. month++;

  196. if(month==12)

  197. month=0;

  198. }

  199. }

  200. if(n%4==3)

  201. {

  202. if(Key3==0)

  203. {

  204. Delay(10);

  205. if(Key3==0)

  206. while(!Key3);

  207. year++;

  208. if(year==99)

  209. year=0;

  210. }

  211. }

  212. }

  213. /************************************************/

  214. /***************主函數(shù)***************************/

  215. /************************************************/

  216. void main()

  217. {                                               

  218. TMOD=0x01;          /*定時器以方式一工作*/

  219. TH0=(65536-10000)/256;

  220. TL0=(65536-10000)%256;/*10ms計時*/

  221. EA=1;

  222. ET0=1;/*允許定時器0中斷*/

  223. TR0=1;/*打開定時器0*/

  224. while(1)

  225. {

  226. static uChar h=0;

  227. /*時鐘和日期切換功能*/

  228. if(Key4==0)

  229. {

  230. Delay(10);

  231. if(Key4==0)

  232. while(!Key4);

  233. h++;

  234. }

  235. if(h%2==0)/*如果按鍵偶數(shù)次則顯示時鐘*/

  236. {

  237. Dispaly1(second,minute,hour);

  238. Keyscan1();

  239. }

  240. if(h%2==1)/*如果按鍵奇數(shù)次則顯示日期*/

  241. {

  242. Dispaly2(year,month,day);

  243. Keyscan2();

  244. }

  245. }

  246. }

  247. /**********************中斷函數(shù)**************************/

  248. void time0_int(void) interrupt 1

  249. {

  250. TH0=(65536-10000)/256;

  251. TL0=(65536-10000)%256;

  252. count++;

  253. if(count==100)/*10ms??ê±£???100′??ò??o?1s*/

  254. {

  255. count=0;

  256. second++;

  257. if(second==60)

  258. {

  259. second=0;

  260. minute++;

  261. if(minute==60)

  262. {

  263. minute=0;

  264. hour++;

  265. if(hour==24)

  266. {

  267. hour=0;

  268. day++;

  269. if(day==30)

  270. {

  271. day=0;

  272. month++;

  273. if(month==12)

  274. {

  275. month=0;

  276. year++;

  277. if(year==99)

  278. {

  279. year=0;

  280. }

  281. }

  282. }

  283. }

  284. }

  285. }

  286. }

  287. /*判斷整點提醒*/

  288. if(second==00&&minute==00)                                                                  

  289. Buzzer=0;

  290. else

  291. Buzzer=1;

  292. }
復(fù)制代碼

————————————————

版權(quán)聲明:本文為CSDN博主「MoreMbb」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_421 ... le/details/89765975

最后實現(xiàn)的效果:

2.png (36.36 KB, 下載次數(shù): 0)

proteus仿真結(jié)果

3.png (38.14 KB, 下載次數(shù): 0)

最終結(jié)果實現(xiàn)



數(shù)字電子鐘的設(shè)計與研究.zip

340.27 KB, 下載次數(shù): 32, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本亚洲欧美 | 免费国产一区 | 国产永久免费 | 一区二区蜜桃 | 国产日韩免费视频 | 亚洲福利一区 | 久久免费观看视频 | 久久剧场| 日本中文字幕一区 | 国产一区二区精品在线观看 | 精品不卡| 国产精品国产三级国产aⅴ中文 | 久久不卡视频 | 国产午夜精品理论片a大结局 | 欧美精品一区二区三区在线四季 | 在线观看av网站永久 | 97色免费视频 | 成人二区三区 | 狠狠草视频| 免费a网 | 日韩国产欧美一区 | 日一区二区 | 男女在线免费观看 | 色综合久 | 欧美成人精品激情在线观看 | 亚洲精品一 | 久久另类视频 | 九九99九九精彩46 | 天天综合永久 | 国产精品久久久久久妇女 | 产真a观专区 | 一级黄片一级毛片 | 亚洲成人网在线观看 | 黄色毛片在线观看 | 国产成人精品999在线观看 | 91久久国产综合久久 | 91精品免费 | 国产精品不卡一区二区三区 | 国产小视频在线 | 一级毛片免费看 | 男人天堂网av |