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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機公交車報站Proteus仿真 缺程序 求幫助

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:298766 發(fā)表于 2020-5-26 18:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
附件proteus8.7版本的仿真圖keil4的程序文件,還可以顯示溫度,溫度代碼還在完善中

51公交車報站仿真可以顯示時間,自動手動報站顯示上行下行


lcd12864可以顯示ds1302的時間可以通過三個按鍵調(diào)試時間


單片機源程序如下:
  1. /*
  2. * 功能:51公交車報站仿真
  3. *作者:單片機愛好者
  4. *
  5. */
  6. #include "main.h"    //包含頭文件main.h
  7. #include "LCD.h"   //包含頭文件LCD.h
  8. #include "DS1302.h"   //包含頭文件DS1302.h
  9. #include "word.h"   //包含頭文件word.h
  10. #include "lunar_calendar.h" //包含頭文件lunar_calendar.h
  11. #include "buzz.h"   //包含頭文件buzz.h

  12. TIME time, tmp_time;        //時間變量
  13. ALARM alarm;    //時間變量
  14. bit Alarm_flag=0;   //時間變量
  15. bit Clock_flag=0;   //時間變量
  16. bit flag=0;     //時間變量
  17. int8 flat=0;
  18. sbit DQ=P2^6;   //DS18B20 pin 溫度傳感器引腳
  19. //*************上下行手動自動****************
  20. char code shang[]={
  21. /*--  文字:  上  --*/
  22. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
  24. 0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00
  25. };
  26.    char code xia[]={
  27. /*--  文字:  下  --*/
  28. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  29. 0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x42,0x82,0x02,0x02,0x02,0x02,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00
  31. };
  32.     char code xing[]={
  33. /*--  文字:  行  --*/
  34. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  35. 0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,
  36. 0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00
  37. };
  38.     char code shou[]={
  39. /*--  文字:  手  --*/
  40. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  41. 0x00,0x00,0x24,0x24,0x24,0x24,0x24,0xFC,0x22,0x22,0x22,0x23,0x22,0x00,0x00,0x00,
  42. 0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00
  43. };
  44.      char code zi[]={
  45. /*--  文字:  自  --*/
  46. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  47. 0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00
  49. };
  50.       char code dong[]={
  51. /*--  文字:  動  --*/
  52. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  53. 0x40,0x44,0xC4,0x44,0x44,0x44,0x40,0x10,0x10,0xFF,0x10,0x10,0x10,0xF0,0x00,0x00,
  54. 0x10,0x3C,0x13,0x10,0x14,0xB8,0x40,0x30,0x0E,0x01,0x40,0x80,0x40,0x3F,0x00,0x00
  55. };
  56. //****************************
  57. char code ming[]={
  58. /*--  文字:  名  --*/
  59. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  60. 0x00,0x20,0x20,0x10,0x08,0x14,0x67,0x84,0x44,0x24,0x14,0x0C,0x00,0x00,0x00,0x00,
  61. 0x04,0x04,0x04,0x02,0xFE,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00
  62. };
  63. char code zhan[]={
  64. /*--  文字:  站  --*/
  65. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  66. 0x00,0xC8,0x08,0x09,0x0E,0xE8,0x08,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x00,
  67. 0x10,0x30,0x17,0x10,0x0E,0x09,0x08,0xFF,0x41,0x41,0x41,0x41,0x41,0xFF,0x00,0x00
  68. };
  69. char code m[]={
  70. /*--  文字:  :  --*/
  71. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  72. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  73. 0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  74. };
  75. char code yi[]={
  76. /*--  文字:  一  --*/
  77. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  78. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  79. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  80. };
  81. char code er[]={
  82. /*--  文字:  二  --*/
  83. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  84. 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
  85. 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00
  86. };
  87. char code san[]={
  88. /*--  文字:  三  --*/
  89. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  90. 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
  91. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00
  92. };
  93. char code si[]={
  94. /*--  文字:  四  --*/
  95. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  96. 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
  97. 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00
  98. };
  99. char code wu[]={
  100. /*--  文字:  五  --*/
  101. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  102. 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
  103. 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00
  104. };
  105. char code liu[]={
  106. /*--  文字:  六  --*/
  107. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  108. 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  109. 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00
  110. };
  111. char code qi[]={
  112. /*--  文字:  七  --*/
  113. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  114. 0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
  115. 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00
  116. };
  117. char code ba[]={
  118. /*--  文字:  八  --*/
  119. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  120. 0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
  121. 0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00
  122. };
  123. char code jiu[]={
  124. /*--  文字:  九  --*/
  125. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  126. 0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
  127. 0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00
  128. };
  129. char code ssi[]={
  130. /*--  文字:  十  --*/
  131. /*--  宋體12;  此字體下對應(yīng)的點陣為:寬x高=16x16   --*/
  132. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  133. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  134. };
  135. //-----------------18B20-----------------------
  136. unsigned char L_18B20,H_18B20,zhengshu,shangwen,xiawen;  //溫度用變量
  137. unsigned int fg=0,xiaoshu_a;       //溫度用變量
  138. //-----------------18B20----------------------
  139. //-------------音樂-----------------------------
  140. /*
  141. uint8 code SONG_TONE[]=          //音樂數(shù)據(jù)
  142. {
  143.   212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
  144. };
  145. uint8 code SONG_LONG[]=//
  146. {
  147.   9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
  148. };   */
  149. uint8 code SONG_TONE[]=          //音樂數(shù)據(jù)
  150. {
  151.   212,212,0
  152. };
  153. uint8 code SONG_LONG[]=//
  154. {
  155.   9,3,0
  156. };
  157. //------------------------------------------------------------
  158. void delay(uint16 n)//延時us級
  159. {
  160. while (n--);
  161. }
  162. //************************************************************************/
  163. // 函數(shù): LCD_Delay()
  164. // 描述: 延時t ms函數(shù)
  165. // 參數(shù): t
  166. // 返回: 無
  167. // 備注: 11.0592MHZ       t=1延時時間約1ms
  168. // 版本:  2011/01/01      First version
  169. //************************************************************************/
  170. void Delay_nms(unsigned int t)
  171. {
  172. unsigned int i,j;
  173. for(i=0;i<t;i++)      //循環(huán)t次
  174. for(j=0;j<113;j++)   //循環(huán)113次 每次約3us
  175. ;
  176. }
  177. /////////////////////////////////////////////////
  178. //-----------播放音樂----------------------------
  179. void PlayMusic()
  180. {
  181.   uint16 i =0,j,k;
  182. while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
  183. {
  184.    for(j=0;j<SONG_LONG[i]*20;j++)   //讀取數(shù)據(jù)
  185.   {
  186.     BEEP = ~BEEP;     //蜂鳴器取反
  187.    for(k=0;k<SONG_TONE[i]/3;k++);  //讀取數(shù)據(jù)
  188.   }
  189.   Delay_nms(10);      //延時10ms
  190.   i++;                        //累加1
  191. }
  192. BEEP =1;        //關(guān)閉蜂鳴器
  193. }
  194. /////////////////////////////////////////////////
  195. /*------DS18B20------*/
  196. void delay_18B20(unsigned int i)
  197. {
  198. while(i--);
  199. }
  200. /*DS18B20的復(fù)位脈沖 主機通過拉低單總線至少480us以產(chǎn)生復(fù)位脈沖
  201.   然后主機釋放單總線并進(jìn)入接收模式 此時單總線電平被拉高
  202.   DS18B20檢測到上升沿后 延時15~60us,拉低總線60~240us產(chǎn)生應(yīng)答脈沖  */      
  203. void Init_DS18B20(void)
  204. {
  205.   unsigned char x=0;
  206.   DQ = 1;          //DQ復(fù)位
  207.   delay_18B20(8);  //稍做延時
  208.   DQ = 0;          //單片機將DQ拉低
  209.   delay_18B20(80); //精確延時 大于 480us
  210.   DQ = 1;          //拉高總線
  211.   delay_18B20(14); //延時
  212.   x=DQ;            //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  213.   delay_18B20(20); //延時
  214. }
  215. /*寫時隙 主機在寫1時隙向DS18B20寫入1,在寫0時隙向DS18B20寫入0
  216.   所有寫時隙至少需要60us,且在兩次寫時隙之間至少需要1us的恢復(fù)時間
  217.   兩種寫時隙均以主機拉低總線開始
  218.   產(chǎn)生寫1時隙:主機拉低總線后,必須在15us內(nèi)釋放總線,由上拉電阻拉回至高電平
  219.   產(chǎn)生寫0時隙:主機拉低總線后,必須整個時隙保持低電平 */
  220. void WriteOneChar(unsigned char dat)
  221. {
  222.   unsigned char i=0;
  223.   for (i=8; i>0; i--)//循環(huán)8次
  224.   {
  225.     DQ = 0;   //DQ輸出0
  226.    DQ = dat&0x01;
  227.      delay_18B20(5); //延時
  228.    DQ = 1;         //DQ輸出1
  229.      dat>>=1;        //右移位
  230. }
  231. }
  232.   
  233. /*所有讀時隙至少60us 且兩次獨立的讀時隙之間至少需要1us的恢復(fù)時間
  234.   每次讀時隙由主機發(fā)起,拉低總線至少1us。
  235.   若傳1,則保持總線高電平;若發(fā)送0,則拉低總線
  236.   傳0時DS18B20在該時隙結(jié)束時釋放總線,再拉回高電平狀態(tài),主機必須在讀時隙開始后的15us內(nèi)釋放總線,并保持采樣總線狀態(tài) */
  237. unsigned char ReadOneChar(void)
  238. {
  239. unsigned char i=0;
  240. unsigned char dat = 0;
  241. for (i=8;i>0;i--)
  242.   {
  243.     DQ = 0;   // 給脈沖信號
  244.     dat>>=1;      //移位
  245.     DQ = 1;   // 給脈沖信號
  246.     if(DQ)       //如果DQ=1,執(zhí)行下面的語句   
  247.     dat|=0x80;
  248.     delay_18B20(4);//延時
  249.   }
  250.   return(dat);  //返回數(shù)據(jù)
  251. }
  252.    
  253. void read_18B20(void)
  254. {
  255. Init_DS18B20();
  256. WriteOneChar(0xCC);     // 跳過讀序號列號的操作
  257. WriteOneChar(0x44);  // 啟動溫度轉(zhuǎn)換
  258. delay_18B20(100);       // this message is wery important
  259. Init_DS18B20();   //初始化DS18B20
  260. WriteOneChar(0xCC);  //跳過讀序號列號的操作
  261. WriteOneChar(0xBE);  //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  262. delay_18B20(100);  //延時
  263. L_18B20=ReadOneChar(); //讀取低八位數(shù)據(jù)
  264. H_18B20=ReadOneChar(); //讀取高八位數(shù)據(jù)
  265. zhengshu=L_18B20/16+H_18B20*16; //整數(shù)部分
  266. xiaoshu_a=(L_18B20&0x0f)*10/16; //小數(shù)第一位
  267. }
  268. //------------------DS18B20---------------------
  269. /////////////////////////////////////////////////
  270. /*
  271. * 按鍵掃描
  272. */
  273. int8 scan_key(void)
  274. {
  275. int8 val=-1;           //初始化鍵值為-1
  276. if (KeyIn1 == 0)   //判斷=0?有無按鍵按鍵
  277. {
  278.   val = 1;    //鍵值=1
  279.   while (KeyIn1 == 0); //等待按鍵釋放
  280. }
  281. else if (KeyIn2 == 0)  //判斷=0?有無按鍵按鍵
  282. {
  283.   val = 2;   //鍵值=2
  284.   while (KeyIn2 == 0);//等待按鍵釋放
  285. }
  286. else if (KeyIn3 == 0) //判斷=0?有無按鍵按鍵
  287. {
  288.   val = 3;   //鍵值=3
  289.   while (KeyIn3 == 0);//等待按鍵釋放
  290. }
  291. //if (val > 0)
  292.   //buzzer_sound();
  293. return val;    //返回鍵值
  294. }
  295. /*************
  296. *  手動/自動按鍵
  297. ***************/
  298.   int8 scan_key_1(void)
  299. {
  300. // int8 flat=0;           //初始化鍵值為-1
  301. if (KeyIna == 0)   //判斷=0?有無按鍵按鍵
  302. {
  303.   flat = 11;    //鍵值=1
  304.   while (KeyIna == 0); //等待按鍵釋放
  305. }
  306. else if (KeyInb == 0)  //判斷=0?有無按鍵按鍵
  307. {
  308.   flat ++;   //鍵值=2
  309.   
  310.   while (KeyInb == 0);//等待按鍵釋放
  311. }

  312. return flat;    //返回鍵值
  313. }
  314. /*
  315. * 主界面框架
  316. */
  317. void main_frame(void)
  318. {
  319. play32(80, 2, 10); //顯示數(shù)
  320. play32(32, 2, 10); //顯示數(shù)
  321. play8(16, 0, S_xie);//顯示斜線
  322. play8(40, 0, S_xie);//顯示斜線
  323. // play8(96, 0, RH);
  324. // play8(120, 0, S_percent);
  325. // play8(120, 6, S_du);//顯示度
  326. }
  327. /*
  328. * 主界面
  329. */
  330. void main_show(bit refresh)
  331. {
  332. //    uint8  lunar[2];
  333. if (refresh)
  334.   read_time((uint8 *)&time);// 讀時間函數(shù)// 時間              
  335. if (refresh || (time.sec != tmp_time.sec)) // 秒更新
  336. {
  337.   tmp_time.sec = time.sec;      //讀取秒數(shù)據(jù)
  338.       //play8_num(104, 6,zhengshu);      //溫度顯示
  339.   play32_num(96, 2, time.sec);   //顯示秒
  340. }
  341. if (refresh)
  342.   main_frame();//刷新界面
  343. if (refresh || (time.min != tmp_time.min)) // 分更新
  344. {
  345.   if (!refresh)
  346.    flag = 0;
  347.   tmp_time.min = time.min;//讀取分
  348.   play32_num(48, 2, time.min); //顯示分
  349. }
  350. if (refresh || (time.hour != tmp_time.hour)) // 時更新
  351. {
  352.   if ((!refresh)&&(Clock_flag))
  353.    alarm_sound();
  354.   tmp_time.hour = time.hour;     //讀取時
  355.   play32_num(0, 2, time.hour);   //顯示時
  356. }
  357. if (refresh || (time.day != tmp_time.day))  //日更新
  358. {
  359.   tmp_time.day = time.day;    //讀取日
  360.   play8_num(48, 0, time.day);    //顯示日
  361.   // 農(nóng)歷
  362.   //turn_lunar_calendar(&time, lunar);
  363.   //play_lunar_calendar(0, 6, lunar[0], lunar[1]);
  364. }
  365. if (refresh || (time.week != tmp_time.week)) // 周更新
  366. {
  367.   tmp_time.week = time.week;    //讀取周
  368.   play_week(68, 0, time.week);   //顯示周
  369. }
  370. if (refresh || (time.mon != tmp_time.mon))  // 月更新
  371. {
  372.   tmp_time.mon = time.mon;    //讀取月
  373.   play8_num(24, 0, time.mon);    //顯示月
  374.   // 農(nóng)歷
  375.   //turn_lunar_calendar(&time, lunar);    //轉(zhuǎn)換農(nóng)歷月
  376.   //play_lunar_calendar(0, 6, lunar[0], lunar[1]); //顯示農(nóng)歷月
  377. }
  378. if (refresh || (time.year != tmp_time.year)) // 年更新
  379. {
  380.   tmp_time.year = time.year;     //讀取年數(shù)據(jù)
  381.   play8_num(0, 0, time.year);     //顯示年
  382.   // 農(nóng)歷
  383. // turn_lunar_calendar(&time, lunar);    //轉(zhuǎn)換農(nóng)歷年
  384. // play_lunar_calendar(0, 6, lunar[0], lunar[1]); //顯示農(nóng)歷年
  385. }

  386. }
  387. /*
  388. * 主機界面設(shè)置
  389. */
  390. void main_set(void)
  391. {
  392. int8 key_val,state=1;     //變量
  393. play32_num(96, 2|0x80, time.sec); //顯示秒   
  394. while (1)
  395. { key_val = scan_key();//鍵盤掃描
  396.   if (key_val == 1) // 設(shè)置
  397.   {
  398.    if (state >= 7)
  399.     state = 0;
  400.    else
  401.     state++;    //位置狀態(tài)加1
  402.    set_time((uint8 *)&time); //設(shè)置時間
  403.    main_show(1);    //顯示主界面
  404.    switch (state)
  405.    { case 0: set_time((uint8 *)&time); break;//設(shè)置時間
  406.     case 1: play32_num(96, 2|0x80, time.sec); break;//顯示秒
  407.     case 2: play32_num(48, 2|0x80, time.min); break;//顯示分
  408.     case 3: play32_num(0, 2|0x80, time.hour); break;//顯示時
  409.     case 4: play_week(68, 0|0x80, time.week); break;//顯示周
  410.     case 5: play8_num(48, 0|0x80, time.day); break; //顯示日
  411.     case 6: play8_num(24, 0|0x80, time.mon); break; //顯示月
  412.     case 7: play8_num(0, 0|0x80, time.year); break; //顯示年
  413.     default: break;  //退出循環(huán)        
  414.    }
  415.   }
  416.   else if (key_val > 1)//按鍵值大于1
  417.   {
  418.    if (state == 1)//位置1設(shè)置秒
  419.    {
  420.     if (key_val == 3)//加按下?
  421.      time.sec++;//秒加1
  422.     else
  423.      time.sec--; //秒減1
  424.     if (time.sec >= 60)
  425.      time.sec = 0;
  426.     else if (time.sec < 0)
  427.      time.sec = 59;      
  428.     play32_num(96, 2|0x80, time.sec);//顯示秒
  429.    }
  430.    else if (state == 2)    //位置2設(shè)置分
  431.    {
  432.     if (key_val == 3)    //加按下?
  433.      time.min++;     //加1
  434.     else
  435.      time.min--;     //減1
  436.     if (time.min >= 60)
  437.      time.min = 0;
  438.     else if (time.min < 0)
  439.      time.min = 59;
  440.     play32_num(48, 2|0x80, time.min);//顯示分
  441.    }
  442.    else if (state == 3)    //位置3設(shè)置時
  443.    {  if (key_val == 3)    //加按下?
  444.      time.hour++;    //加1
  445.     else
  446.      time.hour--;    //減1
  447.     if (time.hour >= 24)
  448.      time.hour = 0;
  449.     else if (time.hour < 0)
  450.      time.hour = 23;
  451.     play32_num(0, 2|0x80, time.hour);//顯示時
  452.    }
  453.    else if (state == 4)    //位置4設(shè)置周
  454.    {  if (key_val == 3)   //加按下?
  455.      time.week++;    //加1
  456.     else
  457.      time.week--;    //減1
  458.     if (time.week >= 8)
  459.      time.week = 1;
  460.     else if (time.week < 1)
  461.      time.week = 7;
  462.     play_week(68, 0|0x80, time.week);//顯示周
  463.    }
  464.    else if (state == 5)//位置5設(shè)置日
  465.    {
  466.     if (key_val == 3)    //加按下?
  467.      time.day++;     //加1
  468.     else
  469.      time.day--;     //減1
  470.     if (time.day >= 32)
  471.      time.day = 1;
  472.     else if (time.day < 1)
  473.      time.day = 31;
  474.     play8_num(48, 0|0x80, time.day);//顯示日
  475.    }
  476.    else if (state == 6)    //位置6設(shè)置月
  477.    {
  478.     if (key_val == 3)    //加按下?
  479.      time.mon++;     //加1
  480.     else
  481.      time.mon--;     //減1
  482.     if (time.mon >= 13)
  483.      time.mon = 1;
  484.     else if (time.mon < 1)
  485.      time.mon = 12;
  486.     play8_num(24, 0|0x80, time.mon);//顯示月
  487.    }
  488.    else if (state == 7)    //位置7設(shè)置年
  489.    {
  490.     if (key_val == 3)    //加按下?
  491.      time.year++;    //加1
  492.     else
  493.      time.year--;    //減1
  494.     if (time.year >= 100)
  495.      time.year = 0;    //0年
  496.     else if (time.year < 0)
  497.      time.year = 99;    //99年
  498.     play8_num(0, 0|0x80, time.year);//顯示年
  499.    }
  500.    else
  501.    {
  502.     break;  //退出循環(huán)
  503.    }
  504.   }
  505.   if (state == 0)
  506.    break;  //退出循環(huán)
  507. }
  508. }
  509. main()
  510. {
  511. uint8 key_val,key_val_1;
  512. uint8 val1=1,val2=1,val3=1,val4=1,val5=1,val6=1,val7=1,val8=1,val9=1,val10=1;
  513.     //read_18B20();    //初始DS18B20
  514.     //Delay_nms(1000);//延時1S,等待18B20工作正常
  515. led1=0;    //手動
  516. led2=0;    //自動
  517. led3=0;    //上
  518. led4=0;    //下
  519.       
  520. LCD_init();           //初始化液晶
  521. clear12864();         //清屏幕
  522. main_frame();         //顯示主界面框架
  523. main_show(1);         //刷新1次
  524.     //read_18B20();        //讀溫度
  525. // play8_num(104, 6,zhengshu);   //顯示溫度
  526. while(1)
  527. {
  528.   play16(0, 6,zhan);
  529.   play16(16, 6,ming);
  530.   play16(32, 6,m);
  531.   key_val = scan_key();
  532.   key_val_1 = scan_key_1();
  533.   if(key_val_1==11){  //自動
  534.     play16(90, 6,zi);  //自動顯示
  535.   led2=1;
  536.   led1=0;   
  537.   //上行
  538.    play16(112, 6,shang);
  539.   led3=1;   led4=0;
  540.      play16(40, 6,yi);  PlayMusic();
  541.   play16(66, 6,zhan); Delay_nms(5000);    PlayMusic();
  542.   play16(40, 6,er);Delay_nms(5000);      PlayMusic();
  543.   play16(40, 6,san);Delay_nms(5000);       PlayMusic();
  544.   play16(40, 6,si);Delay_nms(5000);       PlayMusic();
  545.   play16(40, 6,wu); Delay_nms(5000);        PlayMusic();
  546.   //下行
  547.   play16(112, 6,xia);
  548.   led3=0;   led4=1;
  549.   play16(40, 6,wu); Delay_nms(5000);        PlayMusic();
  550.   play16(40, 6,si);Delay_nms(5000);         PlayMusic();
  551.   play16(40, 6,san);Delay_nms(5000);          PlayMusic();
  552.   play16(40, 6,er);Delay_nms(5000);        PlayMusic();
  553.   play16(40, 6,yi);Delay_nms(5000);        PlayMusic();
  554.   }
  555.   if(key_val_1>0&&key_val_1<11)  //
  556.   {
  557.    led1=1;
  558.    led2=0;
  559.    play16(90, 6,shou);
  560.   }
  561.   //手動按鍵
  562.      //上行
  563.   if(key_val_1>=1&&key_val_1<6)
  564.   {
  565.   play16(112, 6,shang);
  566.    led3=1;   led4=0;
  567.    }
  568.   if(key_val_1==1)
  569.   {
  570.    play16(40, 6,yi);   //
  571.   play16(66, 6,zhan);
  572.   while(val1){  PlayMusic();val1--; }
  573.      
  574.   }
  575.   if(key_val_1==2)
  576.   {
  577.    play16(40, 6,er);   
  578.    while(val2){  PlayMusic();val2--; }
  579.   }
  580.    if(key_val_1==3)
  581.   {
  582.    play16(40, 6,san);   
  583.    while(val3){  PlayMusic();val3--; }
  584.   }
  585.   if(key_val_1==4)
  586.   {
  587.    play16(40, 6,si);   
  588.    while(val4){  PlayMusic();val4--; }
  589.   }
  590.          if(key_val_1==5)
  591.   {
  592.    play16(40, 6,wu);   
  593.    while(val5){  PlayMusic();val5--; }
  594.   }
  595.   //********手動下行*************/
  596.   if(key_val_1>=6&&key_val_1<11)
  597.   {
  598.   play16(112, 6,xia);
  599.    led3=0;   led4=1;
  600.       }
  601.        if(key_val_1==6)
  602.   {
  603.    play16(40, 6,wu);   
  604.    while(val6){  PlayMusic();val6--; }
  605.   }
  606.            if(key_val_1==7)
  607.   {
  608.    play16(40, 6,si);     
  609.    while(val7){  PlayMusic();val7--; }
  610.   }
  611.            if(key_val_1==8)
  612.   {
  613.    play16(40, 6,san);     
  614.    while(val8){  PlayMusic();val8--; }
  615.   }
  616.            if(key_val_1==9)
  617.   {
  618.    play16(40, 6,er);     
  619.    while(val9){  PlayMusic();val9--; }
  620.   }
  621.            if(key_val_1==10)
  622.   {
  623.    play16(40, 6,yi);     
  624.    while(val10){  PlayMusic();val10--; }
  625.    key_val_1=0;
  626.   }
  627.   
  628.   /*****************************
  629.   *時間控制
  630.   *****************************/
  631.   if (key_val == 1)         //K1?
  632.   {
  633.    main_set();           //設(shè)置主界面
  634.   }
  635.   else if (key_val == 2)    //K2?
  636.   {
  637.    clear12864();         //清屏幕
  638. //   alarm_show();    //鬧鐘畫面
  639.    clear12864();       //清屏幕
  640.    main_show(1);    //主界面
  641.   }
  642.   else if (key_val == 3)    //K3?
  643.   {
  644.    clear12864();         //清屏幕
  645. //   alarm_show();    //鬧鐘畫面
  646.    clear12864();         //清屏幕
  647.    main_show(1);    //主界面
  648.   }
  649.   else
  650.   {
  651.    read_time((uint8 *)&time);   //讀取時間
  652.    main_show(0);      //顯示主界面
  653.    if((time.sec%2)==0){read_18B20();}  //每隔2S采集一次
  654.   }
  655.   
  656.   // 鬧鐘
  657. /*  if (Alarm_flag)//如果鬧鐘標(biāo)志有 執(zhí)行下面的
  658.   {
  659.    if ((flag == 0) && (alarm.hour == time.hour) && (alarm.min == time.min))//判斷條件是否滿足
  660.    {
  661.     flag = 1;
  662.     clear12864();     //清屏幕
  663. //    alarm_show();     //鬧鐘
  664. //       PlayMusic();      //播放音樂
  665. //    PlayMusic();      //播放音樂
  666.     clear12864();     //清屏幕  
  667.     main_show(1);     //顯示主界面
  668.    }
  669.   } */
  670. }
  671. }
復(fù)制代碼


由于我的代碼還不完善,暫不分享,大家有寫好的代碼可以上傳附件一起學(xué)習(xí)交流,我只把仿真圖分享出來,希望版主多獎勵點黑幣,以便我下載其他資料學(xué)習(xí)

Proteus仿真工程文件下載地址:
附件里面只有仿真沒有代碼.7z (50.24 KB, 下載次數(shù): 105)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:766755 發(fā)表于 2020-6-1 17:51 | 只看該作者
你好 有這個設(shè)計的流程圖 ,框圖之類的嘛 或者一整套的資料
回復(fù)

使用道具 舉報

板凳
ID:328014 發(fā)表于 2020-6-1 19:53 | 只看該作者
阿波羅車 發(fā)表于 2020-6-1 17:51
你好 有這個設(shè)計的流程圖 ,框圖之類的嘛 或者一整套的資料

只有源程序 其他都沒有
回復(fù)

使用道具 舉報

地板
ID:781468 發(fā)表于 2020-6-20 02:55 | 只看該作者
程序庫函數(shù)不全嗎
回復(fù)

使用道具 舉報

5#
ID:102963 發(fā)表于 2020-10-18 18:25 | 只看該作者
文件里面缺少程序,只有仿真文件!!!
回復(fù)

使用道具 舉報

6#
ID:259035 發(fā)表于 2020-10-18 19:29 | 只看該作者
文件里面缺少程序,只有仿真文件!!!
回復(fù)

使用道具 舉報

7#
ID:328014 發(fā)表于 2020-10-19 15:18 | 只看該作者
yechuan220 發(fā)表于 2020-10-18 19:29
文件里面缺少程序,只有仿真文件!!!

程序不完整
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩激情在线 | 日韩一区二区三区四区五区六区 | 亚洲91 | 国产精品亚洲成在人线 | 欧美一区二区在线观看 | 在线视频一区二区三区 | 91在线精品秘密一区二区 | 国产免费一区二区三区网站免费 | 91精品国产综合久久福利软件 | 欧洲成人 | 免费国产视频在线观看 | 黑人一级片视频 | 成人妇女免费播放久久久 | 天堂资源视频 | 日日夜夜操天天干 | 精品视频999 | 精品视频在线免费观看 | 国产在线网址 | 欧美久久一区 | 欧美性网| 亚洲精品在线免费播放 | 日韩免费一区二区 | 精品一区二区三区不卡 | 国产一区欧美一区 | www国产成人免费观看视频 | 日日天天 | 自拍视频精品 | 毛片黄片免费看 | 日本淫视频 | 久久久久久久久久久福利观看 | 少妇午夜一级艳片欧美精品 | 欧美高清一区 | 亚洲免费人成在线视频观看 | 亚洲高清av在线 | 欧美在线成人影院 | 日韩久久综合 | 美女福利视频 | 孰女乱色一区二区三区 | 国产午夜精品一区二区三区嫩草 | 成人影院在线视频 | 视频一区二区在线观看 |