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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的數(shù)字電子鐘C程序設(shè)計 仿真圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:104835 發(fā)表于 2016-2-4 03:40 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式

  1. /***************************lns主程序snl***************************/
  2. #include <absacc.h> //包含頭文件
  3. #include <reg52.h> //包含頭文件
  4. /***************************數(shù)據(jù)類型定義***************************/
  5. #define uchar unsigned char //數(shù)據(jù)類型定義
  6. /*************************定義變量并初始化*************************/
  7. uchar n=31; //定義月份天數(shù)變量并初始化
  8. uchar ms=0; //定義毫秒變量并初始化
  9. uchar h1=0,m1=0,s1=0; //定義計時時、分、秒變量并初始化
  10. uchar h2=0,m2=1,s2=1; //定義定時時、分、秒變量并初始化
  11. uchar year=7,month=9,day=8; //定義年、月、日變量并初始化
  12. uchar wday=6; //定義星期變量并初始化
  13. uchar *h=&h1,*m=&m1,*s=&s1; //定義顯視位變量并初始化
  14. uchar *p; //定義調(diào)節(jié)指針
  15. uchar k1=0,k2=0,k3=0,k4=0,k5=0; //定義控制變量并初始化
  16. uchar counter=0; //定義鈴聲節(jié)拍變量并初始化
  17. uchar count=0; //定義鈴聲音符變量并初始化
  18. sbit sound=P1^0; //定義鈴聲輸出位
  19. uchar a[8]={1,2,3,4,5,6,7}; //定義顯視輸出位數(shù)組并初始化
  20. uchar code tt[12]={
  21. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  22. 0x7d,0x07,0x7f,0x6f,0x40,0x00
  23. }; //數(shù)碼管顯視代碼
  24. uchar code array[]={
  25. 0x18, 0x30, 0x1C, 0x10, 0x20, 0x40, 0x1C, 0x10,
  26. 0x18, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x18, 0x40,
  27. 0x1C, 0x20, 0x20, 0x20, 0x1C, 0x20, 0x18, 0x20,
  28. 0x20, 0x80, 0xFF, 0x00, 0x20, 0x30, 0x1C, 0x10,
  29. 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20,
  30. 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20,
  31. 0x20, 0x20, 0x30, 0x80, 0xFF, 0x00, 0x20, 0x20,
  32. 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
  33. 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x20,
  34. 0x1C, 0x10, 0x18, 0x10, 0x20, 0x20, 0x26, 0x20,
  35. 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40, 0x20, 0x30,
  36. 0x1C, 0x10, 0x18, 0x20, 0x15, 0x20, 0x1C, 0x20,
  37. 0x20, 0x20, 0x26, 0x40, 0x20, 0x20, 0x2B, 0x20,
  38. 0x26, 0x20, 0x20, 0x20, 0x30, 0x80, 0x20, 0x30,
  39. 0x1C, 0x10, 0x20, 0x10, 0x1C, 0x10, 0x20, 0x20,
  40. 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20, 0x2B, 0x40,
  41. 0x20, 0x15, 0x1F, 0x05, 0x20, 0x10, 0x1C, 0x10,
  42. 0x20, 0x20, 0x26, 0x20, 0x2B, 0x20, 0x30, 0x20,
  43. 0x2B, 0x40, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x20,
  44. 0x15, 0x20, 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40,
  45. 0x20, 0x20, 0x2B, 0x20, 0x26, 0x20, 0x20, 0x20,
  46. 0x30, 0x30, 0x20, 0x30, 0x1C, 0x10, 0x18, 0x40,
  47. 0x1C, 0x20, 0x20, 0x20, 0x26, 0x40, 0x13, 0x60,
  48. 0x18, 0x20, 0x15, 0x40, 0x13, 0x40, 0x18, 0x80,
  49. 0x00, 0x00
  50. }; //array[i]=0x00 代表歌曲演唱完畢
  51. //array[i]=0xff 代表是休止符
  52. /*******************************************************************
  53. * 函數(shù)名稱:leap()
  54. * 功 能:計算二月份天數(shù)
  55. * 入口參數(shù):year
  56. * 出口參數(shù):無
  57. *******************************************************************/
  58. uchar leap(uchar year) //判斷是否閏年并返回二月份的天數(shù)
  59. { //閏年返回29,平年返回28
  60. year+=2000;
  61. if(year%4==0)
  62. {if(year%100==0)
  63. {if(year%400==0)
  64. return 29;
  65. else return 28;
  66. }
  67. else return 29;
  68. }
  69. else return 28;
  70. }
  71. /*******************************************************************
  72. * 函數(shù)名稱:mon()
  73. * 功 能:計算并返回每個月的天數(shù)
  74. * 入口參數(shù):month
  75. * 出口參數(shù):無
  76. *******************************************************************/
  77. uchar mon(uchar month) //計算并返回每個月的天數(shù)
  78. {
  79. switch(month)
  80. {
  81. case 1:
  82. case 3:
  83. case 5:
  84. case 7:
  85. case 8:
  86. case 10:
  87. case 12:return 31;break; //1,3,5,7,8,10,12月每月31天
  88. case 4:
  89. case 6:
  90. case 9:
  91. case 11:return 30;break; //4,6,9,11月每月30天
  92. case 2: return leap(year);break;//返回二月份的天數(shù)
  93. default:break;
  94. }
  95. }
  96. /*******************************************************************
  97. * 函數(shù)名稱:music()
  98. * 功 能:音樂節(jié)拍控制
  99. * 入口參數(shù):無
  100. * 出口參數(shù):無
  101. *******************************************************************/
  102. void music(void) //鈴聲音樂
  103. {
  104. counter++; //節(jié)拍次數(shù)計數(shù)
  105. if(counter>=array[count+1]) //節(jié)拍次數(shù)判斷
  106. {
  107. count+=2; //音符變換
  108. counter=0; //清0節(jié)拍數(shù)
  109. if(count>=192) //判斷是否唱完一曲
  110. count=0; //返回第一個音符
  111. }
  112. }
  113. /*******************************************************************
  114. * 函數(shù)名稱:timer1()
  115. * 功 能:音樂頻率設(shè)置
  116. * 入口參數(shù):無
  117. * 出口參數(shù):無
  118. *******************************************************************/
  119. void timer1(void)interrupt 1 using 1 //音調(diào)設(shè)置
  120. {
  121. sound=~sound; //鈴聲輸出
  122. TH0=(0xffff-30*array[count])>>8; //音頻設(shè)置
  123. TL0=(0xffff-30*array[count])&0xff;
  124. }
  125. /*******************************************************************
  126. * 函數(shù)名稱:timer3()
  127. * 功 能:中斷計時
  128. * 入口參數(shù):無
  129. * 出口參數(shù):無
  130. *******************************************************************/
  131. void timer3(void) interrupt 3 using 3 //計時中斷
  132. {
  133. TH1=0xd8; //計數(shù)器初值重載
  134. TL1=0xef; //定義單位節(jié)拍的延時大小為10ms

  135. if(k5)music(); //調(diào)用鬧鈴音樂lns
  136. else TR0=0; //達(dá)到所設(shè)鬧鈴時間長度關(guān)鈴聲

  137. if(++ms==100) //計時一秒鐘
  138. {ms=0;
  139. if(++s1==60) //計時一分鐘
  140. {s1=0;
  141. if(++m1==60) //計時一小時
  142. {m1=0;
  143. if(++h1==24) //計時一天
  144. {h1=0;

  145. n=mon(month); //取每月的天數(shù)

  146. if(++day>n) //計時一個月
  147. {day=1;
  148. if(++month>12) //計時一年
  149. {month=1;
  150. year++;
  151. }
  152. }
  153. if(++wday>6) //星期計數(shù)
  154. wday=0;
  155. }
  156. }
  157. k5--; //鬧鈴時間長度倒記時
  158. if(h1==h2&&m1==m2) //判斷是否到定時時刻
  159. {
  160. TR0=1; //開鈴聲中斷l(xiāng)ns
  161. k5=s2; //設(shè)置鬧鈴時間長度
  162. }

  163. }
  164. }

  165. }
  166. /*******************************************************************
  167. * 函數(shù)名稱:d3()
  168. * 功 能:數(shù)碼管輸出顯示
  169. * 入口參數(shù):無
  170. * 出口參數(shù):無
  171. *******************************************************************/
  172. void d3(void) //顯示輸出
  173. {
  174. uchar sel=0x80,i ; //定義sel為位選通變量并初使化
  175. if(k2) //判斷是否處于調(diào)時狀態(tài)
  176. {
  177. if(k2==4)a[0]=a[1]=a[4]=a[6]=a[7]=10; //星期顯示設(shè)置
  178. if(k1&&(k3--==0)) k3=255; //設(shè)置位調(diào)節(jié)閃爍初值
  179. }
  180. for(i=0;i<=8;i++) //循環(huán)顯示八個數(shù)碼管
  181. {
  182. P2=0xff; //清屏
  183. P0=tt[a[i]]; //輸出顯示數(shù)值
  184. if(k1&&(k3>200)) //判斷是否閃爍
  185. if (k1==1&&(i==6||i==7))P2=0xff; //時位閃爍
  186. else if(k1==2&&(i==3||i==4))P2=0xff; //分位閃爍
  187. else if(k1==3&&(i==0||i==1))P2=0xff; //秒位閃爍
  188. else P2=~sel; //非閃爍狀態(tài)
  189. else P2=~sel; //非閃爍狀態(tài)
  190. sel=sel>>1; //顯示位移位
  191. }
  192. }
  193. /*******************************************************************
  194. * 函數(shù)名稱:d2()
  195. * 功 能:循環(huán)調(diào)用
  196. * 入口參數(shù):無
  197. * 出口參數(shù):無
  198. *******************************************************************/
  199. void d2(void)
  200. {
  201. while(1)
  202. {
  203. a[0]=*s%10; //給顯示數(shù)組賦值
  204. a[1]=*s/10;
  205. a[2]=10;
  206. a[3]=*m%10;
  207. a[4]=*m/10;
  208. a[5]=10;
  209. a[6]=*h%10;
  210. a[7]=*h/10;

  211. d3(); //調(diào)用顯示輸出函數(shù)
  212. }
  213. }
  214. /*******************************************************************
  215. * 函數(shù)名稱:d1()
  216. * 功 能:中斷設(shè)置
  217. * 入口參數(shù):無
  218. * 出口參數(shù):無
  219. *******************************************************************/
  220. void d1(void)
  221. {
  222. TMOD=0x11;
  223. TH1=0xff; TH0=0xff;
  224. TL1=0xff; TL0=0xff;
  225. IE=0x8f;
  226. TR1=1;
  227. IT0=1; IT1=1;
  228. IP=0x02;
  229. }
  230. /*******************************************************************
  231. * 函數(shù)名稱:main()
  232. * 功 能:程序入口,調(diào)用功能子函數(shù)
  233. * 入口參數(shù):無
  234. * 出口參數(shù):無
  235. *******************************************************************/
  236. void main(void) {
  237. d1(); //調(diào)用中斷位設(shè)置函數(shù)
  238. d2();
  239. }
  240. /*******************************************************************
  241. * 函數(shù)名稱:d5()
  242. * 功 能:切換顯示菜單
  243. * 入口參數(shù):無
  244. * 出口參數(shù):無
  245. *******************************************************************/
  246. void d5(void) //顯示菜單調(diào)節(jié)函數(shù)
  247. {
  248. switch(k2)
  249. {
  250. case 1:{h=&h1; m=&m1; s=&s1; }break; //菜單1:顯示時鐘時間
  251. case 2:{h=&h2; m=&m2; s=&s2; }break; //菜單2:顯示定時時刻
  252. case 3:{h=&year;m=&month;s=&day; }break; //菜單3:顯示日歷年月日
  253. case 4:{h=&wday;m=&wday; s=&wday;}break; //菜單4:顯示星期0--6
  254. default:{k2=0;h=&h1;m=&m1;s=&s1; }break; //復(fù)位顯示
  255. }
  256. }
  257. /*******************************************************************
  258. * 函數(shù)名稱:d7()
  259. * 功 能:調(diào)節(jié)限制,防止數(shù)值調(diào)節(jié)超出值域
  260. * 入口參數(shù):無
  261. * 出口參數(shù):無
  262. *******************************************************************/
  263. void d7(void) //調(diào)節(jié)限制函數(shù)
  264. {
  265. if(k2==1||k2==2) //計時與定時限制
  266. if (k1==1&&*p>=24) *p=0; //小時限制
  267. else if(*p>=60) *p=0; //分、秒限制
  268. if(k2==3) //日歷限制
  269. if (k1==1&&*p>=100)*p=0; //年限制
  270. else if(k1==2&&*p>12) *p=1; //月限制
  271. else if(k1==3&&*p>n) *p=1; //日限制
  272. if(k2==4)
  273. if (k1==2&&*p>6) *p=0; //星期限制

  274. }
  275. /*******************************************************************
  276. * 函數(shù)名稱:timer0()
  277. * 功 能:菜單切換及位加數(shù)調(diào)節(jié)
  278. * 入口參數(shù):無
  279. * 出口參數(shù):無
  280. *******************************************************************/
  281. /**外部中斷1調(diào)節(jié)函數(shù)**/
  282. void timer0(void)interrupt 0 using 0 //外部中斷0調(diào)節(jié)
  283. {
  284. if(k1) //判斷是位調(diào)節(jié)還是菜單調(diào)節(jié)
  285. {
  286. (*p)++; //位加數(shù)調(diào)節(jié)
  287. d7(); //調(diào)用調(diào)節(jié)限制函數(shù)
  288. }
  289. else
  290. {
  291. k2++; //菜單加數(shù)調(diào)節(jié)
  292. d5(); //調(diào)用調(diào)節(jié)菜單
  293. }
  294. }
  295. /*******************************************************************
  296. * 函數(shù)名稱:timer2()
  297. * 功 能:調(diào)節(jié)位選擇及關(guān)鈴聲
  298. * 入口參數(shù):無
  299. * 出口參數(shù):無
  300. *******************************************************************/
  301. void timer2(void)interrupt 2 using 2 //外部中斷1調(diào)節(jié)
  302. {
  303. TR0=0;k5=0; //手動關(guān)鈴聲
  304. if(k2) //斷是否處于調(diào)節(jié)狀態(tài)
  305. {
  306. if (k2==4){k1++;} //期調(diào)節(jié)位選擇
  307. if (++k1==1) p=h; //選擇時位
  308. else if(k1==2) p=m; //選擇分位
  309. else if(k1==3) p=s; //選擇秒位
  310. else k1=0; //復(fù)位
  311. }
  312. }
  313. /***************************lns主程序snl***************************/
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

5#
ID:347549 發(fā)表于 2018-6-9 19:34 | 只看該作者
哈哈,學(xué)習(xí)一下、謝謝老大
回復(fù)

使用道具 舉報

地板
ID:324066 發(fā)表于 2018-5-7 12:23 | 只看該作者
為什么我的不可以運行成功結(jié)果?是不是程序中缺少主函數(shù)的緣故?
可以給一下源代碼和仿真文件給我嗎?謝謝。。!
回復(fù)

使用道具 舉報

板凳
ID:99056 發(fā)表于 2017-12-27 11:05 | 只看該作者
學(xué)習(xí)學(xué)習(xí)了

回復(fù)

使用道具 舉報

沙發(fā)
ID:236006 發(fā)表于 2017-12-20 14:36 | 只看該作者
6想下載仿真
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲女人天堂成人av在线 | 久久久国产一区 | 国产一区二区在线播放 | 欧美区在线 | 一区二区蜜桃 | 亚洲精品中文字幕在线 | 国产99久久久国产精品 | 久久亚洲精品久久国产一区二区 | 一区二区视频在线观看 | 亚洲精品日韩精品 | 最新国产精品 | 韩日一区二区 | 国产精久久久久久 | 久久精品中文 | 欧美精品在线播放 | 91在线最新 | 国产精品国产自产拍高清 | 夜夜骚视频 | 亚洲精选久久 | 欧美日韩久久精品 | 91偷拍精品一区二区三区 | 亚洲激情在线观看 | 黄色av网站在线观看 | 夜夜操天天操 | 欧美日韩看片 | 69福利影院 | 天堂免费看片 | 日本欧美在线 | 久久久久久毛片免费观看 | 日本久久网站 | 国产日韩精品一区 | 精品久久久久久亚洲综合网 | 久久久www成人免费精品 | 在线成人免费视频 | 国产精品国产三级国产播12软件 | 成人日韩av | 玖玖视频 | 国产成人精品一区二区 | 国产一区二 | 国内精品久久久久 | 久久日本 |