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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8423|回復: 26
收起左側(cè)

12864萬歷時鐘+18B20+鬧鐘設置的51單片機制作

  [復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次(中獎概率 50%)
ID:99600 發(fā)表于 2017-8-16 17:44 | 顯示全部樓層 |閱讀模式
好久沒玩51單片機啦,趁有空花幾天時間玩了下時鐘部分因ds1302模塊沒帶回來,所以我直接用定時計數(shù)器來跑了
顯示小圖片的函數(shù)是借鑒了其他高手的寫法;從中學習了知識,不勝感激



再附上原理圖供大家參考,有瑕疵請各位大神指點哈  謝謝

原理圖

原理圖

設置界面

設置界面

時鐘顯示界面

時鐘顯示界面

開機界面

開機界面


單片機源程序如下:
  1. /*------------------------------------------------------------------------------------------
  2.   名稱:12864萬歷時鐘
  3.   內(nèi)容:顯示年月日、24小時、星期、所在年份、實時溫度基本功能,帶1路可設置鬧鐘;亮屏20s自動熄滅
  4.   晶振:12MHZ
  5.   單片機:AT89S52
  6.   顯示屏:12864帶中文字庫
  7.   DS18B20數(shù)字溫度采集
  8.   
  9.   作者:愛好者
  10.   交流QQ群:481250892
  11.   日期:2017/8/5
  12. ////////////////////////////////////////////////////////////////////////////////////////////

  13.   按鍵功能:
  14. sbit k1=P3^0;  //單獨使用  鬧鐘響起時關(guān)閉鬧鈴、亮屏

  15. sbit k2=P3^1;  //菜單           設置功能鍵
  16. sbit k3=P3^2; //確認           確認鍵
  17. sbit k4=P3^3; //+                   加
  18. sbit k5=P3^4; //-                   減

  19. 備注:當畫面處于主頁界面:(1)只有k2按鍵有效。
  20.                                                   (2)k3、k4同時按下可快速打開或關(guān)閉鬧鐘

  21.           當畫面處于設置界面:(1)k2、k3同時按下直接返回主頁
  22. ////////////////////////////////////////////////////////////////////////////////////////////
  23. 12864引腳接線
  24. sbit RS = P2^3;
  25. sbit RW = P2^4;
  26. sbit E  = P2^5;
  27. sbit RES = P2^7;
  28. sbit PSB = P2^0;
  29. sbit LCD_led=P1^2;        //背光控制
  30. #define DataPort P0        //MCU P0<------> LCD_12864 data
  31. -------------------------------------------------------------------------------------------------*/
  32. #include <reg52.h>
  33. #include <intrins.h>
  34. #define uchar unsigned char
  35. #define uint  unsigned int

  36. sbit RS = P2^3;
  37. sbit RW = P2^4;
  38. sbit E  = P2^5;
  39. sbit RES = P2^7;
  40. sbit PSB = P2^0;
  41. sbit LCD_led=P1^2;        //背光控制

  42. sbit k1=P3^0;  //主頁面
  43. sbit k2=P3^1;  //菜單
  44. sbit k3=P3^2; //確認
  45. sbit k4=P3^3; //+
  46. sbit k5=P3^4; //-
  47. sbit deep=P1^0;  //鬧鐘響鈴輸出

  48. #define DataPort P0        //MCU P0<------> LCD_12864 data

  49. uchar num,num1=55,num2=59,num3=23,max,wan,qian,bai,shi,ge,nian=17,yue=8,ri=1;
  50. uchar n_num1,n_num2,n_num3;
  51. uchar day=1,k=0,dip=0,flag=0,clok=0,set=0,set_time=0,set_t=0;
  52. uchar t_set=0;
  53. uint tr1_time=0;

  54. //-----------------------------------------------
  55. uchar xdata lcdPosX, lcdPosY;                                                        //X,Y坐標
  56. uchar xdata halfScr, halfLineCnt, basicBlock;                        //半屏,半屏行數(shù),N*8塊
  57. //-----------------------------------------------

  58. sbit DQ=P1^1;                //18B20數(shù)據(jù)接口
  59. uchar point,n,temp,flag,aa;
  60. uchar code ditab[16]= {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //小數(shù)補償

  61. ////////////////////////////////////////////////////////////////////////

  62. //設定哪一行,從那一個位置開始到那一個位置結(jié)束使用反白   
  63.     //x=液晶屏上漢字的位置(1~8);end_x=漢字結(jié)束的地址(1~8);y=1~4行   
  64.     //clear=1:清除反白;clear=0:設置反白;   
  65.     void Set_White(uchar x,uchar y,uchar end_x,uchar clear);
  66. /*------------------------------------------------
  67. uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  68. unsigned char 是定義無符號字符變量,其值的范圍是
  69. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  70. 長度如下 T=tx2+5 uS
  71. ------------------------------------------------*/
  72. void DelayUs2x(unsigned char t)
  73. {   
  74. while(--t);
  75. }
  76. /*------------------------------------------------
  77. mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
  78. unsigned char 是定義無符號字符變量,其值的范圍是
  79. 0~255 這里使用晶振12M,精確延時請使用匯編
  80. ------------------------------------------------*/
  81. void delay(uint t)
  82. {
  83.         uint i,j;
  84.         for(i=t;i>0;i--)
  85.         for(j=112;j>0;j--);
  86. }
  87. void delays(uint t) //微妙延時
  88. {
  89. for(;t>0;t--);
  90. }
  91. /*---------------------------------------------------------------------------------------------------------------------------------*/
  92. /*---------------------------------------------------------------------------------------------------------------------------------*/
  93. unsigned char code sum[11][64]={       

  94. {// 圖片數(shù)字0
  95. 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  96. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x40,0x02,0x00,0x00,
  97. 0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  98. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
  99. {// 圖片數(shù)字1
  100. 0x00,0x00,0x00,0x20,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
  101. 0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x20,
  102. 0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,
  103. 0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00},
  104. {// 圖片數(shù)字2
  105. 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  106. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
  107. 0x5F,0xF8,0x60,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
  108. 0x70,0x00,0x70,0x00,0x70,0x00,0x6F,0xF8,0x5F,0xFC,0x3F,0xFE,0x00,0x00,0x00,0x00},       
  109. {// 圖片數(shù)字3
  110. 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  111. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x1F,0xFA,0x3F,0xFC,
  112. 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  113. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
  114. {// 圖片數(shù)字4
  115. 0x00,0x00,0x40,0x02,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  116. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
  117. 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  118. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00},       
  119. {// 圖片數(shù)字5
  120. 0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
  121. 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
  122. 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  123. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x0F,0xF6,0x1F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
  124. {// 圖片數(shù)字6
  125. 0x00,0x00,0x3F,0xFC,0x5F,0xF8,0x6F,0xF0,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
  126. 0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x5F,0xF8,0x3F,0xFC,
  127. 0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  128. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
  129. {// 圖片數(shù)字7
  130. 0x00,0x00,0x3F,0xFC,0x1F,0xFA,0x0F,0xF6,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  131. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,
  132. 0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  133. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},
  134. {// 圖片數(shù)字8
  135. 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  136. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
  137. 0x5F,0xFA,0x60,0x06,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  138. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x6F,0xF6,0x5F,0xFA,0x3F,0xFC,0x00,0x00,0x00,0x00},       
  139. {// 圖片數(shù)字9
  140. 0x00,0x00,0x3F,0xFC,0x5F,0xFA,0x6F,0xF6,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,
  141. 0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x60,0x06,0x5F,0xFA,0x3F,0xFC,
  142. 0x1F,0xFA,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,
  143. 0x00,0x0E,0x00,0x0E,0x00,0x0E,0x1F,0xF6,0x3F,0xFA,0x7F,0xFC,0x00,0x00,0x00,0x00},       
  144. {// 圖片":"        10
  145. //6X6方點
  146. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,
  147. 0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  148. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,
  149. 0x07,0xE0,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
  150. };

  151. //16x16圖標-----------------------------------------------------------------//
  152. //PCtoLCD2002取模:順向,逐行式/
  153. unsigned char code bmp1616[5][32]={
  154. //"℃"          tt=0
  155. {0x00,0x00,0x30,0x00,0x48,0x00,0x49,0xC0,0x33,0xE8,0x06,0x38,0x0C,0x18,0x0C,0x08,
  156. 0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x08,0x03,0x10,0x01,0xE0,0x00,0x00},     

  157. //溫度計圖標
  158. {0x00,0x00,0x01,0x80,0x02,0x40,0x02,0x40,0x02,0xC0,0x02,0x40,0x02,0xC0,0x02,0x40,
  159. 0x02,0xC0,0x02,0x40,0x03,0xC0,0x07,0xE0,0x0F,0xF0,0x0F,0xF0,0x07,0xE0,0x03,0xC0},

  160. //鬧鐘圖標
  161. {
  162. 0x00,0x00,0x38,0x1C,0x60,0x06,0x43,0xC2,0x4C,0x32,0x11,0x08,0x11,0x08,0x21,0x04,
  163. 0x21,0xF4,0x20,0x04,0x10,0x08,0x10,0x08,0x0C,0x30,0x13,0xC8,0x20,0x04,0x00,0x00},

  164. //無任何圖片顯示
  165. {
  166. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  167. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},


  168. //。顯示
  169. {
  170. 0x00,0x00,0x00,0x00,0x07,0xE0,0x08,0x10,0x10,0x08,0x20,0x04,0x20,0x04,0x21,0x84,
  171. 0x21,0x84,0x20,0x04,0x20,0x04,0x10,0x08,0x08,0x10,0x07,0xE0,0x00,0x00,0x00,0x00,}
  172. };
  173. /*********************************************************/

  174. /*---------------------------------------------------------------------------------------------------------------------------------*/
  175. /*---------------------------------------------------------------------------------------------------------------------------------*/

  176. /*------------------------------------------------
  177.                     檢測忙位
  178. ------------------------------------------------*/
  179. void Check_Busy()
  180. {  
  181.     RS=0;
  182.     RW=1;
  183.     E=1;
  184.     DataPort=0xff;
  185.     while((DataPort&0x80)==0x80);//忙則等待
  186.     E=0;
  187. }
  188. /*------------------------------------------------
  189.                    寫命令
  190. ------------------------------------------------*/
  191. void Write_Cmd(unsigned char Cmd)
  192. {
  193.         Check_Busy();
  194.         RS=0;
  195.         RW=0;
  196.         E=1;
  197.         DataPort=Cmd;
  198.         DelayUs2x(5);
  199.         E=0;
  200.         DelayUs2x(5);
  201. }
  202. /*------------------------------------------------
  203.                     寫數(shù)據(jù)
  204. ------------------------------------------------*/
  205. void Write_Data(unsigned char Data)
  206. {
  207.         Check_Busy();
  208.         RS=1;
  209.         RW=0;
  210.         E=1;
  211.         DataPort=Data;
  212.         DelayUs2x(5);
  213.         E=0;
  214.         DelayUs2x(5);
  215. }
  216. /*------------------------------------------------
  217.                    液晶屏初始化
  218. ------------------------------------------------*/
  219. void Init_ST7920()
  220. {  
  221.          PSB = 1; //并口方式
  222.          delay(1);            //延時
  223.          Write_Cmd(0x30); //基本指令, 擴充指令為34H
  224.          delay(10);
  225.          RES=0;                 //復位
  226.          delay(1);            //延時
  227.          RES=1;   
  228.          Write_Cmd(0x0c); //顯示開, 關(guān)光標
  229.          delay(10);
  230.          Write_Cmd(0x01); //清屏
  231.          delay(10);
  232. }
  233.             
  234. /*------------------------------------------------
  235.                    顯示字符串
  236. x:橫坐標值,范圍0~8
  237. y:縱坐標值,范圍1~4
  238. ------------------------------------------------*/
  239. void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
  240. {
  241. switch(y)
  242.      {
  243.           case 1: Write_Cmd(0x80+x);break;
  244.           case 2: Write_Cmd(0x90+x);break;
  245.           case 3: Write_Cmd(0x88+x);break;
  246.           case 4: Write_Cmd(0x98+x);break;
  247.       default:break;
  248.          }
  249. while(*s>0)
  250.    {
  251.       Write_Data(*s);
  252.       s++;
  253.       DelayUs2x(50);
  254.    }
  255. }

  256. /*------------------------------------------------
  257.                       清屏
  258. ------------------------------------------------*/
  259. void ClrScreen()
  260. {
  261.    Write_Cmd(0x01);
  262.    delay(15);
  263. }
  264.           
  265. ///*------------------------------------------------
  266. //                   顯示圖片
  267. //------------------------------------------------*/
  268. //void LCD_PutGraphic(unsigned char code *img)
  269. //{
  270. // int i,j;
  271. ////顯示上半屏內(nèi)容設置
  272. //   for(i=0;i<32;i++)            
  273. //    {
  274. //      Write_Cmd(0x80 + i); //SET  垂直地址 VERTICAL ADD
  275. //      Write_Cmd(0x80);     //SET  水平地址 HORIZONTAL ADD
  276. //      for(j=0;j<16;j++)
  277. //       {
  278. //         Write_Data(*img);
  279. //         img++;
  280. //       }
  281. //    }
  282. ////顯示下半屏內(nèi)容設置
  283. //   for(i=0;i<32;i++)            
  284. //    {
  285. //      Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
  286. //      Write_Cmd(0x88);     //SET 水平地址 HORIZONTAL ADD
  287. //      for(j=0;j<16;j++)
  288. //       {
  289. //         Write_Data(*img);
  290. //         img++;
  291. //       }
  292. //    }  
  293. //           
  294. //}

  295. /*------------------------------------------------
  296.                    白屏
  297. ------------------------------------------------*/
  298. void LCD_cluck(void)
  299. {
  300.         int i,j;
  301. //顯示上半屏內(nèi)容設置
  302.    for(i=0;i<32;i++)            
  303.     {
  304.       Write_Cmd(0x80 + i); //SET  垂直地址 VERTICAL ADD
  305.       Write_Cmd(0x80);     //SET  水平地址 HORIZONTAL ADD
  306.       for(j=0;j<16;j++)
  307.        {
  308.          Write_Data(0x00);
  309.          //img++;
  310.        }
  311.     }
  312. //顯示下半屏內(nèi)容設置
  313.    for(i=0;i<32;i++)            
  314.     {
  315.       Write_Cmd(0x80 + i); //SET 垂直地址 VERTICAL ADD
  316.       Write_Cmd(0x88);     //SET 水平地址 HORIZONTAL ADD
  317.       for(j=0;j<16;j++)
  318.        {
  319.          Write_Data(0x00);
  320.        }
  321.     }  
  322.            
  323. }


  324. /*------------------------------------------------
  325.                  設置到繪圖模式
  326. ------------------------------------------------*/
  327. void SetGraphicMode()
  328. {
  329.    Write_Cmd(0x36);       //選擇8bit數(shù)據(jù)流 圖形模式
  330.    DelayUs2x(20);

  331. }

  332. void SetNormalMode()
  333. {
  334.    Write_Cmd(0x30);       //選擇8bit數(shù)據(jù)流 圖形模式
  335.    DelayUs2x(20);

  336. }
  337. void huatu(unsigned char x,unsigned char code *img)
  338. {
  339.         unsigned char i,j;
  340.         SetGraphicMode();
  341.         for(i=0;i<32;i++)
  342.         {
  343.                 if(i<16)
  344.                 {
  345.                         Write_Cmd(0x80+16+i);
  346.                         Write_Cmd(0x80+x);
  347.                 }
  348.                 if(i>=16)
  349.                 {
  350.                         Write_Cmd(0x80+i-16);
  351.                         Write_Cmd(0x88+x);       
  352.                 }
  353.                 for(j=0;j<2;j++)
  354.                 {
  355.                         Write_Data(*img);
  356.                 img++;       
  357.                 }       
  358.         }
  359.         SetNormalMode();       
  360. }
  361. /*使用繪圖的方法讓一個16*16的漢字符反白----------------------------------------------*/
  362. //形式參數(shù):uchar x,uchar y,uchar wide,uchar bkcor
  363. //行參說明:坐標水平位置,坐標垂直位置,反白行數(shù),要反白還是清除(1:反白,0:清除)   
  364. void write1616GDRAM(uchar x,uchar y,uchar sign,uchar *bmp)       
  365. {                  //x-列,y-行,sign-反白選擇(1不反白,0反白),bmp-圖畫的選擇
  366.         uchar i,j,basex;
  367.         Write_Cmd(0x36);      //擴展指令,繪圖模式命令,開顯示也可以繪.(關(guān)圖片顯示0x34)
  368.         if(y==1||y==2)          //第一第二行
  369.         {
  370.                 basex=0x80;           //上半屏
  371.                 y=(y-1)*16;          //垂直位址從0X80開始.
  372.         }
  373.         if(y==3||y==4)        //第三第四行
  374.         {
  375.                 basex=0x88;         //下半屏
  376.                 y=(y-3)*16;         //垂直位址都是從0X80開始的,不管上下半屏。
  377.         }
  378.         for(i=0;i<16;i++)        //
  379.         {                                                                                                                       
  380.                 Write_Cmd(0x80+y+i);  //寫入垂直位址。
  381.                 Write_Cmd(basex+x-1); //再寫入水平位址(上半屏第一字為0X80,……第七字為0X87)
  382.                                                            //下半屏第一字為0X88,……第七字為0X8F;
  383.                 for(j=0;j<2;j++)   //再寫入兩個8位元的數(shù)據(jù),AC會自動增一,接著寫數(shù)據(jù)
  384.                 {
  385.                         if(sign==1)  
  386.                                 Write_Data(~(*bmp++));
  387.                         else  
  388.                                 Write_Data(*bmp++);
  389.                 }
  390.         }       
  391.         Write_Cmd(0x36);  //寫完數(shù)據(jù),開圖片顯示     
  392. }
  393. /**************************************************************************************
  394. //函數(shù)功能:顯示16X16圖形,適用于st7920型液晶
  395. //形式參數(shù):uchar x,uchar y,uchar *bmp
  396. //行參說明:橫坐標X列,縱坐標Y行,sign=1反白、=0不反,tt是要顯示的圖形bmp1616中的第幾個
  397. //************************************************************************************/
  398. void set1616pic(uchar x,uchar y,uchar sign,uchar tt)
  399. {                                //x-列,y-行,sign-反白選擇(1不反白,0反白),tt-圖畫的選擇
  400.         uchar (*pp)[32];         //定義指針
  401.         pp=bmp1616;          //二維數(shù)組首地址給指針,故指針指向下一個數(shù)組地址應為加64
  402.         write1616GDRAM(x,y,sign,pp[tt]); //寫入小時的十位          
  403. }

  404. /******************************************************************************/
  405. //十二生肖顯示
  406. /******************************************************************************/
  407. void lcmshengxiao()
  408. {
  409.   uchar y=0;
  410.   y=(2000+nian-1900)%12;
  411. switch(y)
  412. {
  413.   case 0:         LCD_PutString(0, 4,"子鼠");
  414.           break;
  415.   case 1:         LCD_PutString(0, 4,"丑牛");
  416.           break;
  417.   case 2:         LCD_PutString(0, 4,"寅虎");
  418.           break;
  419.   case 3:          LCD_PutString(0, 4,"卯兔");
  420.           break;
  421.   case 4:          LCD_PutString(0, 4,"辰龍");
  422.           break;
  423.   case 5:         LCD_PutString(0, 4,"巳蛇");
  424.           break;
  425.   case 6:         LCD_PutString(0, 4,"午馬");
  426.           break;
  427.   case 7:         LCD_PutString(0, 4,"未羊");
  428.           break;
  429.   case 8:          LCD_PutString(0, 4,"申猴");
  430.           break;
  431.   case 9:          LCD_PutString(0, 4,"酉雞");
  432.           break;
  433.   case 10:  LCD_PutString(0, 4,"戌狗");
  434.           break;
  435.   case 11:         LCD_PutString(0, 4,"亥豬");
  436.           break;
  437. }
  438. }

  439. /*------------------------------------------------
  440.                     定時器初始化子程序
  441. ------------------------------------------------*/
  442. void Init_Timer0(void)
  443. {
  444.         TMOD=0x11;
  445.         TH0=(65536-50000)/256;
  446.         TL0=(65536-50000)%256;
  447.         TH1=(65536-50000)/256;
  448.         TL1=(65536-50000)%256;
  449.         EA=1;
  450.         ET0=1;
  451.         TR0=1;         //定時器開關(guān)打開
  452.         ET1=1;
  453.         TR1=1;         //定時器開關(guān)打開
  454. }



  455. /*------------------------------------------------
  456.                  調(diào)時
  457. ------------------------------------------------*/
  458. void set1_TIME(void)                                        //時間設置
  459. {
  460.         LCD_PutString(0,1,"設置: ");        //設置時、分、日期
  461.            Write_Cmd(0x90+2);
  462.         Write_Data(0x30+num3/10);
  463.         Write_Data(0x30+num3%10);
  464.         Write_Data(0x3a);
  465.         Write_Data(0x30+num2/10);
  466.         Write_Data(0x30+num2%10);
  467.         Write_Data(0x3a);
  468.         Write_Data(0x30+num1/10);
  469.         Write_Data(0x30+num1%10);
  470.                                                  //日期
  471.         Write_Cmd(0x98+1);
  472.         Write_Data(0x32);
  473.         Write_Data(0x30);
  474.         Write_Data(0x30+nian/10);
  475.         Write_Data(0x30+nian%10);
  476.         LCD_PutString(3,5,"年");
  477.         Write_Data(0x30+yue/10);
  478.         Write_Data(0x30+yue%10);
  479.         LCD_PutString(5,5,"月");
  480.         Write_Data(0x30+ri/10);
  481.         Write_Data(0x30+ri%10);
  482.         LCD_PutString(7,5,"日");
  483.         LCD_PutString(5,1,"sun: ");                  //星期
  484.         Write_Cmd(0x80+7);
  485.         Write_Data(0x30+day);
  486.                                  
  487.         if(t_set==0)        {Write_Cmd(0x88+2);        Write_Data(0x1e);Write_Cmd(0x90+7);        Write_Data(0x20);}
  488.         if(t_set==1)        {Write_Cmd(0x88+4);        Write_Data(0x1e);Write_Cmd(0x88+2);        Write_Data(0x20);}
  489.         if(t_set==2)        {Write_Cmd(0x88+5);        Write_Data(0x1e);Write_Cmd(0x88+4);        Write_Data(0x20);}                                       
  490.         if(t_set==3)        {Write_Cmd(0x88+2);        Write_Data(0x1f);Write_Cmd(0x88+5);        Write_Data(0x20);}
  491.         if(t_set==4)        {Write_Cmd(0x88+4);        Write_Data(0x1f);Write_Cmd(0x88+2);        Write_Data(0x20);}
  492.         if(t_set==5)        {Write_Cmd(0x88+6);        Write_Data(0x1f);Write_Cmd(0x88+4);        Write_Data(0x20);}                                       
  493.         if(t_set==6)        {Write_Cmd(0x90+7);        Write_Data(0x1e);Write_Cmd(0x88+6);        Write_Data(0x20);}                                         
  494.                                                  
  495. }
  496. /*------------------------------------------------
  497.                  鬧鐘
  498. -------------------------------------------------*/
  499. void set3_clok(void)
  500. {
  501.         LCD_PutString(0,1,"鬧鐘設置: ");        //設置時、分、日期
  502.            Write_Cmd(0x90+2);
  503.         Write_Data(0x30+n_num3/10);
  504.         Write_Data(0x30+n_num3%10);
  505.         Write_Data(0x3a);
  506.         Write_Data(0x30+n_num2/10);
  507.         Write_Data(0x30+n_num2%10);
  508.         Write_Data(0x3a);
  509.         Write_Data(0x30+n_num1/10);
  510.         Write_Data(0x30+n_num1%10);
  511.         LCD_PutString(0,4,"狀態(tài) : ");        //
  512.         if(clok==0)         LCD_PutString(3,4,"關(guān)閉");
  513.     if(clok==1)         LCD_PutString(3,4,"開啟");
  514.         if(t_set==0)        {Write_Cmd(0x88+2);        Write_Data(0x1e);Write_Cmd(0x98+5);        Write_Data(0x20);}
  515.         if(t_set==1)        {Write_Cmd(0x88+4);        Write_Data(0x1e);Write_Cmd(0x88+2);        Write_Data(0x20);}
  516.         if(t_set==2)        {Write_Cmd(0x88+5);        Write_Data(0x1e);Write_Cmd(0x88+4);        Write_Data(0x20);}                                       
  517.         if(t_set==3)        {Write_Cmd(0x98+5);        Write_Data(0x11);Write_Cmd(0x88+5);        Write_Data(0x20);}
  518.                                                          
  519.                                                
  520. }

  521. /*--------------------------------------------------------------------------------------------------------------------------------
  522.                  18B20溫度
  523. --------------------------------------------------------------------------------------------------------------------------------*/
  524. void ow_reset(void) //18B20復位
  525. {
  526.   uint i;               
  527.   DQ=0;
  528.   i=103;
  529.   while(i>0)i--;
  530.   DQ=1;
  531.   i=4;
  532.   while(i>0)i--;
  533. }
  534. /* 等待應答脈沖 */
  535. void Rx_Wait(void)
  536. {
  537.         uint i;       
  538.         while(DQ);       
  539.         while(~DQ);                        // 檢測到應答脈沖
  540.         i = 4;
  541.         while (i>0)i--;
  542. }
  543. void write_byte(uchar val) //寫字節(jié)
  544. {
  545.         uchar i;
  546.         for(i=8;i>0;i--)
  547.         {
  548.                 DQ=1;_nop_();_nop_();
  549.                 DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
  550.                 DQ=val&0x01;
  551.                 delays(6);
  552.                 val>>=1;
  553.         }
  554.         DQ=1;
  555.         delays(1);
  556. }
  557. //讀字節(jié)
  558. uchar read_byte(void)
  559. {
  560.         uchar i;
  561.         uchar value=0;
  562.         for(i=8;i>0;i--)
  563.         {
  564.                 DQ=1;_nop_();_nop_();
  565.                 value >>=1;
  566.                 DQ=0;
  567.                 _nop_();_nop_();_nop_();_nop_();
  568.                 DQ=1;
  569.                 _nop_();_nop_();_nop_();_nop_();
  570.                 if(DQ) value|=0x80;
  571.                 delays(6);
  572.         }
  573.         DQ=1;
  574.         return(value);
  575. }
  576. //18B20初始化
  577. void tmpchange(void)  
  578. {
  579.   ow_reset();     //復位      
  580.   Rx_Wait();     //等待應答信號   
  581.   write_byte(0xcc); //跳過序列號
  582.   write_byte(0x44);  //發(fā)轉(zhuǎn)換命令
  583. }
  584. //讀溫度函數(shù)
  585. void read_temp()
  586. {
  587.         uchar temp_l,temp_h;//定義高低字節(jié)
  588.         ow_reset();
  589.         Rx_Wait();        //等待應答信號
  590.         write_byte(0xcc); //跳過序列號
  591.         write_byte(0xbe); //讀取暫存器內(nèi)容
  592.         temp_l=read_byte(); //低字節(jié)在前
  593.         temp_h=read_byte(); //高字節(jié)在后
  594.         if(temp_h>127) //溫度小于0度時取補
  595.         {
  596.                 temp_h=(~temp_h);
  597.                 temp_l=(~temp_l)+1; //取反加一,將補碼變成原碼
  598.                 n=1;
  599.         }
  600.         else n=0;
  601.         temp=((temp_l&0xf0)>>4)|((temp_h&0x0f)<<4);
  602.         point=temp_l&0x0f;  
  603. }
  604. //讀出溫度數(shù)據(jù)進行分離,在顯示屏上顯示
  605. void dis_temp()
  606. {

  607.         if(n==0)//溫度大于0度
  608.         {
  609.                 Write_Cmd(0x98+5);
  610.         //        Write_Data(0x30+temp/10);
  611.                 Write_Data(0x30+(temp%100)/10);
  612.                 Write_Data(0x30+temp%10);
  613.                 Write_Data(0x2e);
  614.                 Write_Data(0x30+ditab[point]);
  615.         }
  616.         //溫度小于0度
  617.         if(n==1)
  618.         {
  619.                   Write_Cmd(0x98+5);
  620.                   Write_Data('-');
  621.                   Write_Data(0x30+(temp%100)/10);
  622.                   Write_Data(0x30+temp%10);

  623.         }
  624. }
  625. /*--------------------------------------------------------------------------------------------------------------------------------
  626.                  12864液晶屏顯示
  627. --------------------------------------------------------------------------------------------------------------------------------*/

  628. void display()
  629. {         
  630.         if(dip==0)                        //模式0顯示-主界面
  631.         {
  632.                  huatu(0,sum[max=num3/10]);                                //時
  633.                  huatu(1,sum[wan=num3%10]);
  634.                  huatu(2,sum[10]);
  635.                  huatu(3,sum[qian=num2/10]);                        //分
  636.                  huatu(4,sum[bai=num2%10]);
  637.                  huatu(5,sum[10]);
  638.                  huatu(6,sum[shi=num1/10]);                                //秒
  639.                  huatu(7,sum[ge=num1%10]);
  640.                  LCD_PutString(6,1,"周");                                         //星期
  641.                  if(day==1)          LCD_PutString(7,1,"一");
  642.                  if(day==2)          LCD_PutString(7,1,"二");
  643.                  if(day==3)          LCD_PutString(7,1,"三");
  644.                  if(day==4)          LCD_PutString(7,1,"四");
  645.                  if(day==5)          LCD_PutString(7,1,"五");
  646.                  if(day==6)          LCD_PutString(7,1,"六");
  647.                  if(day==7)          LCD_PutString(7,1,"日");
  648.                  lcmshengxiao();                                  //顯示所在年分的生肖
  649.                

  650. tmpchange();//轉(zhuǎn)換初始化
  651. read_temp();//讀出溫度
  652. dis_temp();//顯示溫度
  653.                    //日期
  654.                 Write_Cmd(0x80);
  655.                 Write_Data(0x32);
  656.                 Write_Data(0x30);
  657.                 Write_Data(0x30+nian/10);
  658.                 Write_Data(0x30+nian%10);
  659.                 Write_Data('-');
  660.                 Write_Data(0x30+yue/10);
  661.                 Write_Data(0x30+yue%10);
  662.                  Write_Data('-');
  663.                 Write_Data(0x30+ri/10);
  664.                 Write_Data(0x30+ri%10);
  665.                 set1616pic(8,4,0,0);        //溫度符號
  666.                 set1616pic(5,4,0,1);         //溫度圖標

  667.                  if(clok==0)                          //鬧鐘關(guān)閉標志
  668.                  {       
  669.                          set1616pic(4,4,0,3);
  670.                          deep=1;                          //鬧鐘輸出關(guān)閉
  671.                  }
  672.                  if(clok==1)                          //鬧鐘開啟標志
  673.                  {
  674.                          set1616pic(4,4,0,2);
  675.                         if((n_num3==num3)&&(n_num2==num2)&&(n_num1==num1))          //鬧鐘時間到達,開啟鬧鐘
  676.                         {
  677.                                 deep=0;
  678.                         }
  679.                         if((n_num3!=num3)||(n_num2!=num2))           //鬧鐘時間過期,關(guān)閉鬧鐘
  680.                         {
  681.                                 deep=1;
  682.                         }
  683.                  }
  684.         }
  685.         if(dip==1)                        //模式1顯示        --菜單
  686.         {
  687.                
  688.         if(flag==0)
  689.         {
  690.                 TR0=0;
  691.                 Init_ST7920();                //液晶屏初始化
  692.                 SetGraphicMode();   //設置成繪圖模式
  693.                 LCD_cluck();            //液晶屏顯示為白屏,進行清屏
  694.                 delay(500);
  695.                 SetNormalMode();        //設置成文字模式
  696.                 flag=1;
  697.         }

  698.                 //顯示菜單
  699.                 LCD_PutString(1,1,"1.時間設置");        //設置時、分、日期
  700.                 LCD_PutString(1,2,"2.鬧鐘設置");        //鬧鐘時間設置
  701.                 LCD_PutString(1,3,"3.鬧鐘開關(guān)");        //鬧鐘 開、關(guān)
  702.                 if(clok==0)         LCD_PutString(7,3,"×");
  703.                 if(clok==1)         LCD_PutString(7,3,"√");
  704.                 LCD_PutString(0,4,"確認        取消");        //鬧鐘 開、關(guān)
  705.                 if(set==0)       
  706.                 {
  707.                         LCD_PutString(0,1,"☆");
  708.                         LCD_PutString(0,2,"  ");
  709.                         LCD_PutString(0,3,"  ");
  710.                 }       
  711.                 if(set==1)       
  712.                 {
  713.                         LCD_PutString(0,1,"  ");
  714.                         LCD_PutString(0,2,"☆");
  715.                         LCD_PutString(0,3,"  ");
  716.                 }
  717.                 if(set==2)       
  718.                 {
  719.                         LCD_PutString(0,1,"  ");
  720.                         LCD_PutString(0,2,"  ");
  721.                         LCD_PutString(0,3,"☆");
  722.                 }
  723.         }
  724.         if(dip==4)                  ////模式4顯示,時間設置界面
  725.         {
  726.         if(set_time==0)
  727.         {
  728.                 set_time=1;
  729.     Init_ST7920();                //液晶屏初始化
  730.         SetGraphicMode();   //設置成繪圖模式
  731.         LCD_cluck();            //液晶屏顯示為白屏,進行清屏
  732.         delay(500);
  733.          SetNormalMode();        //設置成文字模式
  734.        
  735.         }
  736.                 set1_TIME();
  737.         }
  738.         if(dip==5)                         ////模式5顯示,鬧鐘設置界面
  739.         {
  740.         if(set_time==0)
  741.         {
  742.                 set_time=1;
  743.     Init_ST7920();                //液晶屏初始化
  744.         SetGraphicMode();   //設置成繪圖模式
  745.         LCD_cluck();            //液晶屏顯示為白屏,進行清屏
  746.         delay(500);
  747.          SetNormalMode();        //設置成文字模式
  748.        
  749.         }
  750.                 set3_clok();
  751.         }
  752. }

  753. /*-------------------------------------------------------------------------------------
  754.                     按鍵識別
  755. -------------------------------------------------------------------------------------*/
  756. void key1()
  757. {
  758. ///////////////////////////////////////////////////////////////////////
  759.         if(((k2==0)&&(k3==0))&&(dip!=0))                        //返回主頁面
  760.         {
  761.                 delay(5);
  762.                 if(((k2==0)&&(k3==0))&&(dip!=0))
  763.                 {
  764.                         tr1_time=0;
  765.                         TR1=1;
  766.                         while(!k2||!k3);
  767.         dip=0,flag=0,set=0,set_time=0,set_t=0,TR0=1,t_set=0;;
  768.         Init_ST7920();                //液晶屏初始化
  769.         SetGraphicMode();   //設置成繪圖模式
  770.         LCD_cluck();            //液晶屏顯示為白屏,進行清屏
  771.         delay(500);
  772.                 }
  773.         }
  774. //////////////////////////////////////////////////////////////////
  775.         if((k2==0)&&(dip==0))                                           //菜單鍵
  776.         {
  777.                 delay(5);
  778.                 if((k2==0)&&(dip==0))
  779.                 {
  780.                         while(!k2);
  781.                         tr1_time=0;
  782.                         TR1=1;
  783.                         dip=1;
  784. //                        if(dip==2)
  785. //                        {
  786. //                                dip=0;
  787. //                                set=0;
  788. //                Init_ST7920();                //液晶屏初始化
  789. //                SetGraphicMode();   //設置成繪圖模式
  790. //                LCD_cluck();            //液晶屏顯示為白屏,進行清屏
  791. //                delay(500);
  792. //                        TR0=1;
  793. //                        flag=0;       
  794. //                        }
  795.                 }
  796.         }
  797. /////////////////////////菜單設置界面/////////////////////////////////////////
  798. if(dip==1)
  799. {
  800.         if(k4==0)                //菜單往下
  801.         {
  802.                 delay(5);
  803.                 if(k4==0)
  804.                 {
  805.                         while(!k4);
  806.                         set++;
  807.                         if(set==3)
  808.                         {
  809.                                 set=0;
  810.                         }
  811.                 }
  812.         }

  813.         if(k5==0)                //菜單往上
  814.         {
  815.                 delay(5);
  816.                 if(k5==0)
  817.                 {
  818.                         while(!k5);
  819.                         set--;
  820.                         if(set==-1)
  821.                         {
  822.                                 set=2;
  823.                         }
  824.                 }
  825.         }
  826. /////////////////////////////////////////////////////////////////
  827.         if((k3==0)&&(set==2))  //選擇鬧鐘開、關(guān)
  828.         {
  829.                 delay(5);
  830.                 if((k3==0)&&(set==2))
  831.                 {
  832.                         while(!k3);
  833.                         clok++;
  834.                         if(clok==3)        clok=0;
  835.                 }
  836.         }
  837. /////////////////////////////////////////////////////////////////
  838.         if((k3==0)&&(set==0))  //選擇時間設置
  839.         {
  840.                 delay(5);
  841.                 if((k3==0)&&(set==0))
  842.                 {
  843.                         while(!k3);
  844.                         dip=4;
  845.                 }

  846.         }               
  847. }       
  848.         if(dip==4)                   //時間設置界面
  849.         {
  850.                 if(k3==0)                //往下
  851.                 {
  852.                         delay(5);
  853.                         if(k3==0)
  854.                         {
  855.                                 while(!k3);
  856.                                 t_set++;
  857.                                 if(t_set==7)
  858.                                 {
  859.                                         t_set=0;
  860.                                 }
  861.                         }
  862.                 }
  863.                 if(k4==0)                          //加
  864.                 {
  865.                         delay(5);
  866.                         if(k4==0)
  867.                         {
  868.                                 while(!k4);
  869.                                 if(t_set==0)        num3++;        if(num3==24)        num3=0;
  870.                                 if(t_set==1)        num2++;        if(num2==60)        num2=0;
  871.                                 if(t_set==2)        num1++;        if(num1==60)        num1=0;
  872.                                 if(t_set==3)        nian++;        if(nian==100)        nian=0;
  873.                                 if(t_set==4)        yue++;        if(yue==13)        yue=1;
  874.                                 if(t_set==5)        ri++;
  875.                                         if((ri==32)&&((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12)))        ri=1;
  876.                                         if((ri==31)&&((yue==4)||(yue==6)||(yue==9)||(yue==11)))        ri=1;
  877.                                         if((ri==29)&&((yue==2)&&(nian%4!=0)))        ri=1;
  878.                                         if((ri==30)&&((yue==2)&&(nian%4==0)))        ri=1;
  879.                                 if(t_set==6)        day++;        if(day==8)        day=1;
  880.                         }
  881.                 }
  882.                 if(k5==0)                        //減
  883.                 {
  884.                         delay(5);
  885.                         if(k5==0)
  886.                         {
  887.                                 while(!k5);
  888.                                 if(t_set==0)        num3--;        if(num3==-1)        num3=23;
  889.                                 if(t_set==1)        num2--;        if(num2==-1)        num2=59;
  890.                                 if(t_set==2)        num1--;        if(num1==-1)        num1=59;
  891.                                 if(t_set==3)        nian--;        if(nian==-1)        nian=99;
  892.                                 if(t_set==4)        yue--;        if(yue==0)        yue=12;
  893.                                 if(t_set==5)        ri--;        if(ri==0)        ri=31;
  894.                                         if((ri==-1)&&((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12)))        ri=31;
  895.                                         if((ri==-1)&&((yue==4)||(yue==6)||(yue==9)||(yue==11)))        ri=30;
  896.                                         if((ri==-1)&&((yue==2)&&(nian%4!=0)))        ri=28;
  897.                                         if((ri==-1)&&((yue==2)&&(nian%4==0)))        ri=29;
  898.                                 if(t_set==6)        day--;        if(day==0)        day=7;
  899.                         }
  900.                 }
  901.         }
  902.        
  903. ////////////////////////、、、、、、、、、///////////////////////////////////////////
  904.         if((k3==0)&&((set==1)&&(dip==1)))  //鬧鐘設置界面
  905.         {
  906.                 delay(5);
  907.                 if((k3==0)&&((set==1)&&(dip==1)))
  908.                 {
  909.                         while(!k3);
  910.                         dip=5;
  911.                 }
  912.         }

  913.         if(dip==5)                  //鬧鐘設置界面
  914.         {
  915.                 if(k3==0)                //往下
  916.                 {
  917.                         delay(5);
  918.                         if(k3==0)
  919.                         {
  920.                                 while(!k3);
  921.                                 t_set++;
  922.                                 if(t_set==4)
  923.                                 {
  924.                                         t_set=0;
  925.                                 }
  926.                         }
  927.                 }

  928.                 if(k4==0)                          //加
  929.                 {
  930.                         delay(5);
  931.                         if(k4==0)
  932.                         {
  933.                                 while(!k4);
  934.                                 if(t_set==0)        n_num3++;        if(n_num3==24)        n_num3=0;
  935.                                 if(t_set==1)        n_num2++;        if(n_num2==60)        n_num2=0;
  936.                                 if(t_set==2)        n_num1++;        if(n_num1==60)        n_num1=0;
  937.                                 if(t_set==3)        clok++;        if(clok==2) clok=0; if(clok==0)         LCD_PutString(3,4,"關(guān)");
  938.                                                                                                                         if(clok==1)         LCD_PutString(3,4,"開");
  939.                                
  940.                         }
  941.                 }
  942.                 if(k5==0)                        //減
  943.                 {
  944.                         delay(5);
  945.                         if(k5==0)
  946.                         {
  947.                                 while(!k5);
  948.                                 if(t_set==0)        n_num3--;        if(n_num3==-1)        n_num3=23;
  949.                                 if(t_set==1)        n_num2--;        if(n_num2==-1)        n_num2=59;
  950.                                 if(t_set==2)        n_num1--;        if(n_num1==-1)        n_num1=59;
  951.                                 if(t_set==3)        clok--;        if(clok==-1) clok=1;        if(clok==0)         LCD_PutString(3,4,"關(guān)");
  952.                                                                                                                                 if(clok==1)         LCD_PutString(3,4,"開");
  953.                                
  954.                         }
  955.                 }
  956.         }
  957. ///////////////////////////////////////////////////////////////////////////////////
  958.         if((k1==0)||(k2==0)||(k3==0)||(k4==0)||(k5==0))                          //任何按鍵按下,LCD顯示屏亮20s
  959.         {
  960.                 tr1_time=0;
  961.                 TR1=1;
  962.         }

  963. ///////////////////////////////////////////////////////////////////////////////////
  964. if((dip==0)&&((k4==0)&&(k3==0)))                   //鬧鐘開啟、關(guān)閉快捷鍵
  965. {
  966.         delay(5);
  967.         if((dip==0)&&((k4==0)&&(k3==0)))
  968.         {
  969.                 while(!k4||!k3);
  970.                 clok++;
  971.                 if(clok==3)        clok=0;
  972.         }
  973.        
  974. }
  975. ///////////////////////////////////////////////////////////////////////////////////
  976. if((deep==0)&&((dip==0)&&((k1==0)||(k3==0)||(k4==0)||(k5==0))))          //鬧鐘響起時,按下任何鍵可關(guān)閉鬧鈴
  977. {
  978.           deep=1;
  979. }
  980. }
  981. /*----------------------------------------------------------------------------
  982.                  主程序
  983. -----------------------------------------------------------------------------*/
  984. void main()
  985. {
  986. deep=1;
  987.    
  988.         Init_ST7920();                //液晶屏初始化
  989.         LCD_PutString(2,1,"Welcome");
  990.         LCD_PutString(2,2,"歡迎使用");
  991.         LCD_PutString(1,3," <聯(lián)創(chuàng)電子> ");
  992. ……………………

  993. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png
所有資料51hei提供下載:
12864萬歷時鐘.rar (444.77 KB, 下載次數(shù): 149)

評分

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

查看全部評分

回復

使用道具 舉報

ID:202463 發(fā)表于 2017-9-11 14:16 | 顯示全部樓層
謝謝樓主分享,值得學習.......
回復

使用道具 舉報

ID:152583 發(fā)表于 2017-9-12 10:05 | 顯示全部樓層
不錯不錯
回復

使用道具 舉報

ID:270854 發(fā)表于 2018-1-26 15:10 | 顯示全部樓層
不錯不錯
回復

使用道具 舉報

ID:279823 發(fā)表于 2018-1-26 20:18 | 顯示全部樓層
正好要做一個鬧鐘交作業(yè)
回復

使用道具 舉報

ID:145935 發(fā)表于 2018-1-27 16:56 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:360050 發(fā)表于 2018-7-7 01:59 | 顯示全部樓層
可以啊
回復

使用道具 舉報

ID:210978 發(fā)表于 2018-7-7 17:53 | 顯示全部樓層
謝謝樓主分享,值得學習.......
回復

使用道具 舉報

ID:253189 發(fā)表于 2018-7-7 23:17 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:253189 發(fā)表于 2018-7-7 23:18 | 顯示全部樓層
謝謝樓主分享,值得學習.......
回復

使用道具 舉報

ID:7503 發(fā)表于 2018-7-8 15:52 | 顯示全部樓層
學習學習,謝謝樓主分享
回復

使用道具 舉報

ID:351442 發(fā)表于 2018-7-10 22:16 | 顯示全部樓層
值得學習。。。。!
回復

使用道具 舉報

ID:351442 發(fā)表于 2018-7-13 23:23 | 顯示全部樓層
好東西,學習了
回復

使用道具 舉報

ID:116400 發(fā)表于 2018-7-14 11:02 | 顯示全部樓層
感謝樓主,不錯的資料
回復

使用道具 舉報

ID:296030 發(fā)表于 2018-7-16 09:30 | 顯示全部樓層
感謝樓主 我這里出了個錯誤 應該怎么改動那


linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?CLRSCREEN?萬繽時_?
Program Size: data=51.0 xdata=5 code=5330
creating hex file from "萬歷時鐘"...
"萬歷時鐘" - 0 Error(s), 1 Warning(s).
回復

使用道具 舉報

ID:370986 發(fā)表于 2018-7-16 10:11 | 顯示全部樓層
謝謝樓主分享!
回復

使用道具 舉報

ID:512205 發(fā)表于 2019-4-29 08:18 | 顯示全部樓層
謝謝樓主分享,好好學習一下
回復

使用道具 舉報

ID:512205 發(fā)表于 2019-4-29 08:20 | 顯示全部樓層
感覺真心不錯
回復

使用道具 舉報

ID:480440 發(fā)表于 2019-4-29 15:25 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:523982 發(fā)表于 2019-4-29 15:50 | 顯示全部樓層
很好的資料,最近剛好有想法做這個。
回復

使用道具 舉報

ID:509148 發(fā)表于 2019-4-29 22:52 | 顯示全部樓層
值得學習,很全面的材料
回復

使用道具 舉報

ID:521608 發(fā)表于 2019-5-17 17:27 | 顯示全部樓層
這個接線怎么接?
回復

使用道具 舉報

ID:728400 發(fā)表于 2020-4-28 12:32 | 顯示全部樓層

值得學習,很全面的材料
回復

使用道具 舉報

ID:231831 發(fā)表于 2020-4-30 15:10 | 顯示全部樓層
難道那個1換晶振用絞線電容的源碼用的就是你的。!
回復

使用道具 舉報

ID:740389 發(fā)表于 2020-5-1 19:46 | 顯示全部樓層
謝謝分享  學習一下。!
回復

使用道具 舉報

ID:744622 發(fā)表于 2020-5-5 16:36 | 顯示全部樓層
謝謝分享,學習一下。
回復

使用道具 舉報

ID:1147627 發(fā)表于 2025-4-10 14:36 | 顯示全部樓層
謝謝樓主分享,值得學習.......
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美a级成人淫片免费看 | 久久精品99 | av黄色在线 | 国产一级视频在线播放 | 日本小电影网站 | 亚洲一区二区三区视频 | 最新免费av网站 | 欧美精品一二三 | 美女视频黄色片 | 98成人网 | 久久国产一区二区 | 91精品在线看 | 国产精品国产a级 | 日韩精品一区在线观看 | 韩日一区 | av中文字幕在线 | 亚洲婷婷六月天 | 日韩在线免费视频 | 天天干天天爽 | 国产成人久久精品一区二区三区 | av在线视| 国产伦精品一区二区 | 欧美国产日韩一区 | 久久久久亚洲视频 | 精品欧美一区二区在线观看 | 亚洲九九色 | 国产一级淫片免费视频 | 亚洲国产欧美一区 | 成人不卡一区二区 | 久久亚洲国产 | 亚洲永久精品国产 | 日韩成人免费视频 | 欧美一级特黄aaa大片在线观看 | 国产欧美精品一区二区三区 | 99热精品国产 | www.亚洲| 国产四区| 久久免费精品视频 | 五月天激情电影 | 中文字幕一区二区三区四区 | 欧美午夜精品久久久久久浪潮 |