找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7753|回复: 25
收起左侧

12864万历时钟+18B20+闹钟设置的51单片机制作

  [复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次(中奖概率 50%)
ID:99600 发表于 2017-8-16 17:44 | 显示全部楼层 |阅读模式
好久没玩51单片机啦,趁有空花几天时间玩了下时钟部分因ds1302模块没带回来,所以我直接用定时计数器来跑了
显示小图片的函数是借鉴了其他高手的写法;从中学习了知识,不胜感激



再附上原理图供大家参考,有瑕疵请各位大神指点哈  谢谢

原理图

原理图

设置界面

设置界面

时钟显示界面

时钟显示界面

开机界面

开机界面


单片机源程序如下:
  1. /*------------------------------------------------------------------------------------------
  2.   名称:12864万历时钟
  3.   内容:显示年月日、24小时、星期、所在年份、实时温度基本功能,带1路可设置闹钟;亮屏20s自动熄灭
  4.   晶振:12MHZ
  5.   单片机:AT89S52
  6.   显示屏:12864带中文字库
  7.   DS18B20数字温度采集
  8.   
  9.   作者:爱好者
  10.   交流QQ群:481250892
  11.   日期:2017/8/5
  12. ////////////////////////////////////////////////////////////////////////////////////////////

  13.   按键功能:
  14. sbit k1=P3^0;  //单独使用  闹钟响起时关闭闹铃、亮屏

  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同时按下可快速打开或关闭闹钟

  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;                        //半屏,半屏行数,N*8块
  57. //-----------------------------------------------

  58. sbit DQ=P1^1;                //18B20数据接口
  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}; //小数补偿

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

  62. //设定哪一行,从那一个位置开始到那一个位置结束使用反白   
  63.     //x=液晶屏上汉字的位置(1~8);end_x=汉字结束的地址(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延时函数,含有输入参数 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延时函数,含有输入参数 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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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. {// 图片数字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.                     写数据
  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); //显示开, 关光标
  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. ////显示上半屏内容设置
  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. ////显示下半屏内容设置
  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. //显示上半屏内容设置
  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. //显示下半屏内容设置
  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数据流 图形模式
  330.    DelayUs2x(20);

  331. }

  332. void SetNormalMode()
  333. {
  334.    Write_Cmd(0x30);       //选择8bit数据流 图形模式
  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. //形式参数:uchar x,uchar y,uchar wide,uchar bkcor
  363. //行参说明:坐标水平位置,坐标垂直位置,反白行数,要反白还是清除(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);      //扩展指令,绘图模式命令,开显示也可以绘.(关图片显示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位元的数据,AC会自动增一,接着写数据
  384.                 {
  385.                         if(sign==1)  
  386.                                 Write_Data(~(*bmp++));
  387.                         else  
  388.                                 Write_Data(*bmp++);
  389.                 }
  390.         }       
  391.         Write_Cmd(0x36);  //写完数据,开图片显示     
  392. }
  393. /**************************************************************************************
  394. //函数功能:显示16X16图形,适用于st7920型液晶
  395. //形式参数: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;          //二维数组首地址给指针,故指针指向下一个数组地址应为加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;         //定时器开关打开
  452.         ET1=1;
  453.         TR1=1;         //定时器开关打开
  454. }



  455. /*------------------------------------------------
  456.                  调时
  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,"状态 : ");        //
  512.         if(clok==0)         LCD_PutString(3,4,"关闭");
  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) //写字节
  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. //读字节
  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);  //发转换命令
  583. }
  584. //读温度函数
  585. void read_temp()
  586. {
  587.         uchar temp_l,temp_h;//定义高低字节
  588.         ow_reset();
  589.         Rx_Wait();        //等待应答信号
  590.         write_byte(0xcc); //跳过序列号
  591.         write_byte(0xbe); //读取暂存器内容
  592.         temp_l=read_byte(); //低字节在前
  593.         temp_h=read_byte(); //高字节在后
  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. //读出温度数据进行分离,在显示屏上显示
  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();//转换初始化
  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)                          //闹钟关闭标志
  668.                  {       
  669.                          set1616pic(4,4,0,3);
  670.                          deep=1;                          //闹钟输出关闭
  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))           //闹钟时间过期,关闭闹钟
  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.闹钟开关");        //闹钟 开、关
  702.                 if(clok==0)         LCD_PutString(7,3,"×");
  703.                 if(clok==1)         LCD_PutString(7,3,"√");
  704.                 LCD_PutString(0,4,"确认        取消");        //闹钟 开、关
  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))  //选择闹钟开、关
  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,"关");
  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,"关");
  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)))                   //闹钟开启、关闭快捷键
  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))))          //闹钟响起时,按下任何键可关闭闹铃
  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," <联创电子> ");
  992. ……………………

  993. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
所有资料51hei提供下载:
12864万历时钟.rar (444.77 KB, 下载次数: 149)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:202463 发表于 2017-9-11 14:16 | 显示全部楼层
谢谢楼主分享,值得学习.......
回复

使用道具 举报

ID:152583 发表于 2017-9-12 10:05 | 显示全部楼层
不错不错
回复

使用道具 举报

ID:270854 发表于 2018-1-26 15:10 | 显示全部楼层
不错不错
回复

使用道具 举报

ID:279823 发表于 2018-1-26 20:18 | 显示全部楼层
正好要做一个闹钟交作业
回复

使用道具 举报

ID:145935 发表于 2018-1-27 16:56 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:360050 发表于 2018-7-7 01:59 | 显示全部楼层
可以啊
回复

使用道具 举报

ID:210978 发表于 2018-7-7 17:53 | 显示全部楼层
谢谢楼主分享,值得学习.......
回复

使用道具 举报

ID:253189 发表于 2018-7-7 23:17 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:253189 发表于 2018-7-7 23:18 | 显示全部楼层
谢谢楼主分享,值得学习.......
回复

使用道具 举报

ID:7503 发表于 2018-7-8 15:52 | 显示全部楼层
学习学习,谢谢楼主分享
回复

使用道具 举报

ID:351442 发表于 2018-7-10 22:16 | 显示全部楼层
值得学习!!!!!!
回复

使用道具 举报

ID:351442 发表于 2018-7-13 23:23 | 显示全部楼层
好东西,学习了
回复

使用道具 举报

ID:116400 发表于 2018-7-14 11:02 | 显示全部楼层
感谢楼主,不错的资料
回复

使用道具 举报

ID:296030 发表于 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 发表于 2018-7-16 10:11 | 显示全部楼层
谢谢楼主分享!
回复

使用道具 举报

ID:512205 发表于 2019-4-29 08:18 | 显示全部楼层
谢谢楼主分享,好好学习一下
回复

使用道具 举报

ID:512205 发表于 2019-4-29 08:20 | 显示全部楼层
感觉真心不错
回复

使用道具 举报

ID:480440 发表于 2019-4-29 15:25 | 显示全部楼层
感谢楼主
回复

使用道具 举报

ID:523982 发表于 2019-4-29 15:50 | 显示全部楼层
很好的资料,最近刚好有想法做这个。
回复

使用道具 举报

ID:509148 发表于 2019-4-29 22:52 | 显示全部楼层
值得学习,很全面的材料
回复

使用道具 举报

ID:521608 发表于 2019-5-17 17:27 | 显示全部楼层
这个接线怎么接?
回复

使用道具 举报

ID:728400 发表于 2020-4-28 12:32 | 显示全部楼层

值得学习,很全面的材料
回复

使用道具 举报

ID:231831 发表于 2020-4-30 15:10 | 显示全部楼层
难道那个1换晶振用绞线电容的源码用的就是你的!!!
回复

使用道具 举报

ID:740389 发表于 2020-5-1 19:46 | 显示全部楼层
谢谢分享  学习一下!!!
回复

使用道具 举报

ID:744622 发表于 2020-5-5 16:36 | 显示全部楼层
谢谢分享,学习一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表