找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9863|回复: 29
收起左侧

单片机lcd240*64万年历制作 t6963控制器

  [复制链接]
ID:1 发表于 2016-1-11 04:23 | 显示全部楼层
南天白云 发表于 2016-1-7 16:46
楼主:资料不全呀?大家如何学习

资料已经很全了,仿真,电路图,程序都有,可以直接制作了,你还缺什么?

下面是楼主的程序:
  1.                           //此程序下载至单片机中不会因失电而错乱,显示任意字符和汉字
  2. #include <reg52.h>
  3. //#include <intrins.h>
  4. #include <math.h>

  5. //#define nop()  _nop_()       
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8.        
  9. //1. FG:液晶边框引出端,应该接地
  10. //2. VSS:逻辑电源地,接电源的负极
  11. //3. VDD:逻辑电源正,接电源的正极
  12. //4. V0:LCD驱动电压输入端,可通过滑动变阻器接到电源正极上,改变电阻大小来改变液晶对比度
  13. sbit LCDWR =P3^6;//5. /WR:写数据信号,上升沿锁存       
  14. sbit LCDRD =P3^7;//6. /RD:读数据信号,上升沿锁存       
  15. sbit LCDCE =P3^5;//7. /CE:LCD选通信号,低电平有效       
  16. sbit LCDCD =P2^0;//8. C/D:命令/数据:高电平为命令,低电平为数据       
  17. //9.:暂时没用
  18. sbit LCDRST =P3^4;//10. /RST:复位信号,低电平有效
  19. #define lcd_bus        P0//11-18. DB0-DB7 :8位数据总线
  20. //19. FS:字体选择,H:6X8点,L:8X8点
  21. //20. VEE
  22. //21. LEDA:背光电源正极
  23. //22. LEDK:背光电源负极

  24. sbit DQ18B20=P1^3;//ds18b20与单片机连接口

  25. sbit acc0=ACC^0;             //移位时的第0位
  26. sbit acc7=ACC^7;             //移位时用的第7位

  27. sbit DATA1302=P1^7;   //时钟数据接口
  28. sbit RST1302=P1^5;     
  29. sbit SCLK1302=P1^6;   
  30. sbit menu=P3^0;              //菜单  
  31. sbit add=P3^1;               //加一
  32. sbit dec=P3^2;               //减一

  33. uchar second,minute,hour,day,month,year,week,count=0;     
  34. uchar ReadValue,num,time;     
  35. uint tvalue;//温度值
  36. uchar tflag;
  37.                             
  38. //----  LCD PIXEL SETTING  ------------------------------------------------------
  39. #define PIXELH 64
  40. #define PIXELW 240

  41. //-------------------------------------------------------------------------------
  42.                           
  43. unsigned char code tab1[]=//16x16的汉字或者图片
  44. {  
  45. 0x08,0x00,0x0F,0xFC,0x10,0x80,0x10,0x80,0x20,0x80,0x4F,0xF8,0x88,0x80,0x08,0x80,
  46. 0x08,0x80,0x08,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,//年",0
  47. 0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,0x07,0xF0,0x04,0x10,0x04,0x10,0x04,0x10,
  48. 0x07,0xF0,0x04,0x10,0x08,0x10,0x08,0x10,0x10,0x10,0x20,0x50,0x40,0x20,0x00,0x00,//月",1
  49. 0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
  50. 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00,//日",2
  51. 0x00,0x00,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x10,0x08,0x1F,0xF8,0x01,0x00,0x11,0x00,
  52. 0x1F,0xFC,0x21,0x00,0x21,0x00,0x4F,0xF8,0x01,0x00,0x01,0x00,0x7F,0xFE,0x00,0x00,//星",3
  53. 0x22,0x00,0x22,0x7C,0x7F,0x44,0x22,0x44,0x3E,0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,
  54. 0x22,0x44,0xFF,0x7C,0x00,0x44,0x24,0x84,0x22,0x84,0x43,0x14,0x81,0x08,0x00,0x00,//期",4
  55. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,
  56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//一",5
  57. 0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  58. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,//二",6
  59. 0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,//三",7
  61. 0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
  62. 0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,//四",8
  63. 0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
  64. 0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,//五",9
  65. 0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
  66. 0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,//六",10
  67. 0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFE,0x7F,0x00,0x01,0x00,
  68. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00,//七",11
  69. 0x00,0x00,0x00,0x40,0x04,0x60,0x06,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x20,
  70. 0x08,0x20,0x10,0x10,0x10,0x10,0x20,0x08,0x40,0x0E,0x80,0x04,0x00,0x00,0x00,0x00,//八",12
  71. 0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x7F,0xF0,0x02,0x20,0x02,0x20,0x04,0x20,
  72. 0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x24,0x10,0x24,0x20,0x26,0x40,0x3C,0x00,0x00,//九",13
  73. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
  74. 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,0x00,//十",14
  75. 0x00,0x00,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x10,0x80,0x10,0xFC,
  76. 0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0xFF,0xFE,0x00,0x00,0x00,0x00,//正",15
  77. 0x00,0x90,0x78,0x90,0x4B,0xFE,0x48,0x90,0x78,0x90,0x48,0x90,0x4B,0xFE,0x48,0x00,
  78. 0x79,0xF8,0x49,0x08,0x49,0x08,0x49,0xF8,0x49,0x08,0x49,0x08,0xA9,0xF8,0x91,0x08,//腊",16

  79. 0x02,0x00,0x03,0x00,0x02,0x04,0x3F,0xFE,0x22,0x04,0x45,0x08,0x05,0x10,0x0C,0xB8,
  80. 0x18,0xA0,0x28,0x40,0x48,0x20,0x88,0x30,0x09,0x18,0x0A,0x0E,0x1C,0x08,0x08,0x00,//农",17
  81. 0x00,0x00,0x3F,0xFE,0x20,0x00,0x20,0x80,0x20,0x80,0x2F,0xF8,0x20,0x88,0x20,0x88,
  82. 0x20,0x88,0x21,0x08,0x21,0x08,0x22,0x08,0x42,0x08,0x44,0x38,0x88,0x10,0x00,0x00,//历",18
  83. 0x08,0x20,0x04,0x30,0x02,0x40,0x3F,0xFC,0x01,0x00,0x01,0x00,0x1F,0xF8,0x01,0x00,
  84. 0x01,0x00,0x7F,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,//羊",19
  85. 0x08,0x00,0x0F,0xFC,0x10,0x80,0x10,0x80,0x20,0x80,0x4F,0xF8,0x88,0x80,0x08,0x80,
  86. 0x08,0x80,0x08,0x80,0xFF,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,//年",20

  87. 0x01,0xC0,0x02,0x20,0x02,0xE0,0x02,0x20,0x02,0xE0,0x02,0x20,0x02,0xE0,0x02,0x20,
  88. 0x02,0xE0,0x02,0x20,0x0F,0xF8,0x0F,0xF8,0x07,0xF0,0x03,0xE0,0x01,0xC0,0x00,0x00,//"温度计符号",21

  89. 0x00,0x00,0x00,0x00,0x78,0x00,0x48,0xFC,0x49,0x04,0x79,0x04,0x02,0x00,0x02,0x00,
  90. 0x02,0x00,0x02,0x00,0x02,0x04,0x01,0x04,0x01,0x08,0x00,0xF0,0x00,0x00,0x00,0x00,//"℃,22

  91. 0x00,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x05,0xC0,0x04,0x40,0x05,0xC0,0x04,0x40,
  92. 0x05,0xC0,0x04,0x40,0x05,0xC0,0x04,0x40,0x0F,0xE0,0x07,0xC0,0x03,0x80,0x01,0x00,//温度计的图片,23

  93. };

  94. unsigned char code tab2[]=//8x16的字符
  95. {
  96. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//0",0
  97. 0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00,//1",1
  98. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00,//2",2
  99. 0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//3",3
  100. 0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00,//4",4
  101. 0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00,//5",5
  102. 0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,//6",6
  103. 0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,//7",7
  104. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,//8",8
  105. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,//9",9
  106. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,//.",10
  107. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//负号,11
  108. 0x00,0x00,0x00,0x00,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,//正号,12
  109. };
  110. unsigned char code tab3[]=//24x48的手绘数字
  111. {
  112. 0x00,0x00,0x00,0x03,0xFF,0xC0,0x07,0xFF,0xE0,0x0F,0xFF,0xF0,0x1F,0xFF,0xF8,0x3E,
  113. 0x00,0x7C,0x7C,0x00,0x3E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  114. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  115. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,
  116. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  117. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  118. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,
  119. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x7C,0x00,0x3E,0x3E,0x00,
  120. 0x7C,0x1F,0xFF,0xF8,0x0F,0xFF,0xF0,0x07,0xFF,0xE0,0x03,0xFF,0xC0,0x00,0x00,0x00,//手绘0

  121. 0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x03,0xFC,0x00,0x03,
  122. 0xFC,0x00,0x03,0xFC,0x00,0x03,0xFC,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,
  123. 0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,
  124. 0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,
  125. 0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,
  126. 0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,
  127. 0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,
  128. 0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0xFF,
  129. 0x00,0x1F,0xFF,0xF8,0x1F,0xFF,0xF8,0x1F,0xFF,0xF8,0x1F,0xFF,0xF8,0x00,0x00,0x00,//手绘1

  130. 0x00,0x00,0x00,0x01,0xFE,0x00,0x07,0xFF,0xC0,0x1F,0xFF,0xF0,0x3F,0xFF,0xF8,0x3C,
  131. 0x00,0x7C,0x78,0x00,0x3E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  132. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,
  133. 0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,
  134. 0x00,0x78,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x07,
  135. 0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,
  136. 0x01,0xE0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,
  137. 0x00,0x00,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  138. 0x1E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x00,0x00,0x00,//手绘2

  139. 0x00,0x00,0x00,0x00,0xFF,0x80,0x03,0xFF,0xE0,0x0F,0xFF,0xF0,0x3F,0xFF,0xFC,0x3F,
  140. 0x00,0x3E,0x3C,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  141. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x00,0x00,0x1E,
  142. 0x00,0x00,0x1E,0x00,0x00,0x3E,0x00,0x00,0x7E,0x00,0x00,0xFC,0x00,0x01,0xF0,0x00,
  143. 0x03,0xC0,0x00,0x7F,0x80,0x00,0x7F,0x00,0x00,0x7F,0x80,0x00,0x7F,0xC0,0x00,0x03,
  144. 0xE0,0x00,0x01,0xF8,0x00,0x00,0x7C,0x00,0x00,0x3E,0x00,0x00,0x1E,0x00,0x00,0x1E,
  145. 0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,
  146. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x3C,0x00,
  147. 0x7E,0x3F,0xFF,0xFC,0x1F,0xFF,0xF8,0x07,0xFF,0xE0,0x03,0xFF,0x80,0x00,0x00,0x00,//手绘3

  148. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x07,0xC0,0x00,0x07,0xC0,0x00,
  149. 0x0F,0xC0,0x00,0x0F,0xC0,0x00,0x1F,0xC0,0x00,0x1F,0xC0,0x00,0x3F,0xC0,0x00,0x3F,
  150. 0xC0,0x00,0x7B,0xC0,0x00,0x7B,0xC0,0x00,0xF3,0xC0,0x00,0xF3,0xC0,0x01,0xE3,0xC0,
  151. 0x01,0xE3,0xC0,0x03,0xC3,0xC0,0x03,0xC3,0xC0,0x07,0x83,0xC0,0x07,0x83,0xC0,0x0F,
  152. 0x03,0xC0,0x0F,0x03,0xC0,0x1E,0x03,0xC0,0x1E,0x03,0xC0,0x3C,0x03,0xC0,0x3C,0x03,
  153. 0xC0,0x78,0x03,0xC0,0x78,0x03,0xC0,0x78,0x03,0xC0,0x78,0x03,0xC0,0x78,0x03,0xC0,
  154. 0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x00,0x03,0xC0,0x00,
  155. 0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x03,
  156. 0xC0,0x00,0xFF,0xFE,0x00,0xFF,0xFE,0x00,0xFF,0xFE,0x00,0xFF,0xFE,0x00,0x00,0x00,//手绘4

  157. 0x00,0x00,0x00,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x78,
  158. 0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,
  159. 0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,
  160. 0x78,0x00,0x00,0x78,0x3F,0xC0,0x78,0x7F,0xE0,0x7C,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,
  161. 0xC0,0x7C,0x7F,0x80,0x3E,0x7F,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,
  162. 0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,
  163. 0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x78,0x00,0x1E,0x78,
  164. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x3C,0x78,0x00,0x3C,0x78,0x00,0x78,0x7C,0x00,
  165. 0xF8,0x3F,0xFF,0xF0,0x3F,0xFF,0xE0,0x1F,0xFF,0xC0,0x0F,0xFF,0x80,0x00,0x00,0x00,//手绘5

  166. 0x00,0x00,0x00,0x01,0xFF,0xC0,0x07,0xFF,0xF0,0x0F,0xFF,0xF8,0x1F,0xFF,0xFC,0x3F,
  167. 0x81,0xFC,0x7F,0x00,0xFC,0x7E,0x00,0x7C,0x7C,0x00,0x3C,0x78,0x00,0x3C,0x78,0x00,
  168. 0x3C,0x78,0x00,0x3C,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,
  169. 0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,
  170. 0xFF,0x80,0x7B,0xFF,0xE0,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0x00,0x7C,0x7C,0x00,
  171. 0x3C,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  172. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,
  173. 0x00,0x1E,0x78,0x00,0x1E,0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x1E,0x00,0x78,0x1F,0x00,
  174. 0xF8,0x0F,0xFF,0xF0,0x07,0xFF,0xF0,0x03,0xFF,0xE0,0x01,0xFF,0xC0,0x00,0x00,0x00,//手绘6

  175. 0x00,0x00,0x00,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x78,
  176. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,
  177. 0x78,0x00,0x00,0xF0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0xC0,
  178. 0x00,0x07,0x80,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,
  179. 0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,
  180. 0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,
  181. 0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,
  182. 0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,
  183. 0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x00,0x00,//手绘7

  184. 0x00,0x00,0x00,0x03,0xFF,0xC0,0x07,0xFF,0xE0,0x0F,0xFF,0xF0,0x1F,0xFF,0xF8,0x3E,
  185. 0x00,0x7C,0x7C,0x00,0x3E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  186. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  187. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x3C,0x00,0x3C,0x1E,0x00,0x78,0x0F,
  188. 0x00,0xF0,0x07,0xFF,0xE0,0x03,0xFF,0xC0,0x03,0xFF,0xC0,0x07,0xFF,0xE0,0x0F,0x00,
  189. 0xF0,0x1E,0x00,0x78,0x3C,0x00,0x3C,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  190. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,
  191. 0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x7C,0x00,0x3E,0x3E,0x00,
  192. 0x7C,0x1F,0xFF,0xF8,0x0F,0xFF,0xF0,0x07,0xFF,0xE0,0x03,0xFF,0xC0,0x00,0x00,0x00,//手绘8

  193. 0x00,0x00,0x00,0x03,0xFF,0xC0,0x07,0xFF,0xE0,0x0F,0xFF,0xF0,0x1F,0xFF,0xF8,0x3E,
  194. 0x00,0x7C,0x7C,0x00,0x3E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,
  195. 0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,
  196. 0x78,0x00,0x1E,0x78,0x00,0x1E,0x78,0x00,0x1E,0x3C,0x00,0x3E,0x1F,0x00,0x7E,0x1F,
  197. 0x80,0xFE,0x0F,0xFF,0xFE,0x07,0xFF,0xDE,0x03,0xFF,0x9E,0x00,0xFF,0x1E,0x00,0x00,
  198. 0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,
  199. 0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x3C,0x00,0x1E,0x3C,
  200. 0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x3E,0x3E,0x00,
  201. 0x7C,0x1F,0xFF,0xF8,0x0F,0xFF,0xF0,0x07,0xFF,0xE0,0x03,0xFF,0xC0,0x00,0x00,0x00,//手绘9
  202. };
  203. uchar code tab4[]= //8x48的字符:
  204. {
  205. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E,0xFF,0xFF,0xFF,0xFF,
  206. 0xFF,0xFF,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E,0xFF,0xFF,
  207. 0xFF,0xFF,0xFF,0xFF,0x7E,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//
  208. };
  209. uchar code tab5[]= //16x16,星期用
  210. {
  211.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,
  212.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//一",0
  213.         0x00,0x00,0x00,0x10,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  214.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,//二",1
  215.         0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,
  216.         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,//三",2
  217.         0x00,0x00,0x7F,0xFC,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,0x44,0x84,
  218.         0x48,0x84,0x48,0x7C,0x50,0x04,0x60,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,0x00,0x00,//四",3
  219.         0x00,0x00,0x7F,0xF8,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x20,0x3F,0xF0,
  220.         0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x24,0xFF,0xFE,0x00,0x00,0x00,0x00,//五",4
  221.         0x04,0x00,0x03,0x00,0x01,0x80,0x01,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x04,0x80,
  222.         0x06,0x40,0x04,0x20,0x08,0x10,0x08,0x18,0x10,0x0C,0x20,0x0C,0x40,0x08,0x00,0x00,//六",5
  223.         0x00,0x00,0x1F,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
  224.         0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00,//日",6       
  225. };
  226. /*****************1ms延时函数****************/
  227. void delay(uint z)
  228. {
  229.         uint x,y;
  230.         for(x=z;x>0;x--)
  231.                 for(y=110;y>0;y--);
  232. }
  233. void delay1(uint z) //微秒延时
  234. {
  235.         for(;z>0;z--);
  236. }
  237. unsigned char rd_cmd6963(void)
  238. {                    
  239.    unsigned char addr_st;
  240.    LCDCD = 1;
  241.    LCDWR = 1;
  242.    LCDCE = 0;
  243.    lcd_bus =0xff;
  244.    addr_st = lcd_bus;
  245.    LCDRD = 0;      
  246.    LCDRD = 1;
  247.    LCDCE = 1;
  248.    return(addr_st);
  249. }
  250. /*****************检查忙状态程序****************/
  251. void chkbusy6963(void)
  252. {
  253.    unsigned char busy;
  254.    do
  255.          {
  256.                  busy =!(rd_cmd6963() & 0x03);         
  257.          }while(busy);
  258. }
  259. /*****************写数据****************/
  260. void wr_dat6963(unsigned char datax)
  261. {
  262.    chkbusy6963();
  263.    LCDCD = 0;
  264.    LCDRD = 1;
  265.    LCDCE = 0;
  266.    lcd_bus = datax;
  267.    LCDWR = 0;
  268.    LCDWR = 1;
  269.    LCDCE = 1;
  270. }
  271. /*****************写命令****************/
  272. void wr_cmd6963(unsigned char cmdx)
  273. {
  274.    chkbusy6963();
  275.    LCDCD = 1;
  276.    LCDRD = 1;
  277.    LCDCE = 0;
  278.    lcd_bus = cmdx;
  279.    LCDWR = 0;
  280.    LCDWR = 1;
  281.    LCDCE = 1;
  282. }

  283. /*****************写寄存器程序****************/
  284. void wr_reg6963(unsigned char cmd,unsigned char dat1,unsigned char dat2)
  285. {
  286.         wr_dat6963(dat1);
  287.         wr_dat6963(dat2);
  288.         wr_cmd6963(cmd);
  289. }

  290. //显示指针,图形模式graphics=1,文本模式graphics=0;X坐标x_axis,以8个像素为一个单位
  291. //Y坐标y_axis,图形模式以1个像素为单位,文本模式以8个像素为单位
  292. void lcd_cursor6963(unsigned char graphics,unsigned char x_axis,unsigned char y_axis)
  293. {
  294.    unsigned int tmp;
  295.    if(graphics)tmp = y_axis*(PIXELW/8) + x_axis + 0x800;
  296.    else  tmp = y_axis*(PIXELW/8) + x_axis;
  297.    wr_reg6963(0x24,(unsigned char)(tmp),(unsigned char)(tmp>>8));
  298.    wr_cmd6963(0xb0);
  299. }
  300. /*****************液晶屏初始化程序****************/
  301. void init6963(void)
  302. {
  303.         LCDRST =0;
  304.         delay(100);
  305.         LCDRST =1;
  306.         wr_cmd6963(0xf0);                         //bit reset
  307.         wr_reg6963(0x21,0x00,0x00);    //光标地址设置  
  308.         wr_reg6963(0x22,0x00,0x00);           //CGRAM偏置地址设置
  309.         wr_reg6963(0x24,0x00,0x00);    //显示地址设置
  310.         wr_reg6963(0x40,0x00,0x00);  //文本显示区首地址  
  311.         wr_reg6963(0x41,(unsigned char)(PIXELW/8),0x00);  //文本显示区宽度   
  312.         wr_reg6963(0x42,0x00,0x08);  //图形显示区首地址  
  313.         wr_reg6963(0x43,(unsigned char)(PIXELW/8),0x00);  //图形显示区宽度  
  314.         wr_cmd6963(0x80);               // OR mode   
  315.         wr_cmd6963(0x9c);               //文本图形开
  316.         wr_cmd6963(0xa0);               //7line指针   
  317. }
  318. /*****************全屏显示内容程序****************/
  319. void lcd_showfull(unsigned char datx)
  320. {
  321.         unsigned int i;
  322.         lcd_cursor6963(0,0,0);
  323.         for(i=0;i<((PIXELW/8)*(PIXELH/8));i++)wr_dat6963(0);
  324.         wr_cmd6963(0xb2);
  325.         lcd_cursor6963(1,0,0);
  326.         for(i=0;i<((PIXELW/8)*PIXELH);i++)wr_dat6963(datx);
  327.         wr_cmd6963(0xb2);                                   //屏刷完后需要补上这句
  328. }
  329. //显示自定义16X16字符,x_axis为X轴,以8像素为单位,y_axis为Y轴,以1像素为单位
  330. void lcd_defcharacter16x16(unsigned char x_axis,unsigned char y_axis,unsigned char ctnchar,unsigned char startchar,unsigned char code *text)
  331. {//ctnchar为要显示的总字符数,startchar为自定义内码的第几个启动显示字符(即表格中的汉字),text为自定义的字符内码
  332.    unsigned char line,ctn;
  333.    text += startchar*32;
  334.    for(ctn=0;ctnchar>0;ctnchar--,ctn+=2)
  335.      {
  336.                  for(line=0;line<16;line++)
  337.                   {
  338.                            lcd_cursor6963(1,x_axis+ctn,y_axis+line);
  339.                          wr_dat6963(*(text++));
  340.                            wr_dat6963(*(text++));
  341.                          wr_cmd6963(0xb2);                         //屏刷完后需要补上这句
  342.                   }                                                   
  343.          }          
  344. }
  345. //显示自定义8X16字符,x_axis为X轴,以8像素为单位,y_axis为Y轴,以1像素为单位
  346. void lcd_defcharacter8x16(unsigned char x_axis,unsigned char y_axis,unsigned char ctnchar,unsigned char startchar,unsigned char code *text)
  347. {//ctnchar为要显示的总字符数,startchar为自定义内码的第几个启动显示字符(即表格中的汉字),text为自定义的字符内码
  348.    unsigned char line,ctn;
  349.    text=text + startchar*16;
  350.    for(ctn=0;ctnchar>0;ctnchar--,ctn++)
  351.      {
  352.                  for(line=0;line<16;line++)
  353.                   {
  354.                            lcd_cursor6963(1,x_axis+ctn,y_axis+line);
  355.                            wr_dat6963(*(text++));
  356.                          wr_cmd6963(0xb2);                         //屏刷完后需要补上这句
  357.                   }                                                   
  358.          }          
  359. }         
  360. //显示自定义24X48字符,x_axis为X轴,以8像素为单位,y_axis为Y轴,以1像素为单位
  361. void lcd_defcharacter24x48(uchar x_axis,uchar y_axis,uchar ctnchar,uchar startchar,uchar code *text)
  362. {//ctnchar为要显示的总字符数,startchar为自定义内码的第几个启动显示字符(即表格中的汉字),text为自定义的字符内码       
  363.    uchar line,ctn;
  364.    text=text+startchar*144; //
  365.    for(ctn=0;ctnchar>0;ctnchar--,ctn=ctn+3)
  366.      {
  367.                  for(line=0;line<48;line++)
  368.                   {
  369.                            lcd_cursor6963(1,x_axis+ctn,y_axis+line);//
  370.                          wr_dat6963(*(text++));
  371.                          wr_dat6963(*(text++));
  372.                          wr_dat6963(*(text++));
  373.                          wr_cmd6963(0xb2);                         //复位自动读写模式,屏刷完后需要补上这句
  374.                   }                                                   
  375.          }          
  376. }
  377. //显示自定义8X48字符,x_axis为X轴,以8像素为单位,y_axis为Y轴,以1像素为单位
  378. void lcd_defcharacter8x48(uchar x_axis,uchar y_axis,uchar ctnchar,uchar startchar,uchar code *text)
  379. {
  380.         //ctnchar为要显示的总字符数
  381.         //startchar为自定义内码的第几个启动显示字符(即表格中的汉字)
  382.         //text为自定义的字符内码       
  383.    uchar line,ctn;
  384.   text=text+startchar*32; //
  385.    for(ctn=0;ctnchar>0;ctnchar--,ctn=ctn+2)
  386.      {
  387.                  for(line=0;line<48;line++)
  388.                   {
  389.                            lcd_cursor6963(1,x_axis+ctn,y_axis+line);//
  390.                          wr_dat6963(*(text++));
  391.                          wr_cmd6963(0xb2);                         //复位自动读写模式,屏刷完后需要补上这句
  392.                   }                                                   
  393.          }          
  394. }

  395. void Write1302(uchar dat) //1302写
  396. {
  397.           uchar i;  
  398.           SCLK1302=0;           //拉低SCLK,为脉冲上升沿写入数据做好准备
  399.           delay1(2);       //稍微等待,使硬件做好准备
  400.           for(i=0;i<8;i++)      //连续写8个二进制位数据
  401.             {
  402.                    DATA1302=dat&0x01;    //取出dat的第0位数据写入1302
  403.                    delay(2);       //稍微等待,使硬件做好准备
  404.                    SCLK1302=1;           //上升沿写入数据
  405.                    delay1(2);      //稍微等待,使硬件做好准备
  406.                    SCLK1302=0;           //重新拉低SCLK,形成脉冲                   
  407.                    dat>>=1;          //将dat的各数据位右移1位,准备写入下一个数据位
  408.            }
  409. }
  410. void WriteSet1302(uchar Cmd,uchar dat)
  411. {
  412.            RST1302=0;           //禁止数据传递
  413.            SCLK1302=0;          //确保写数居前SCLK被拉低
  414.            RST1302=1;           //启动数据传输
  415.            delay1(2);     //稍微等待,使硬件做好准备
  416.            Write1302(Cmd);  //写入命令字
  417.            Write1302(dat);  //写数据
  418.            SCLK1302=1;          //将时钟电平置于已知状态
  419.            RST1302=0;           //禁止数据传递
  420. }
  421. uchar Read1302(void)
  422. {
  423.            uchar i,dat;
  424.            delay(2);       //稍微等待,使硬件做好准备
  425.            for(i=0;i<8;i++)   //连续读8个二进制位数据
  426.            {
  427.                     dat>>=1;       //将dat的各数据位右移1位,因为先读出的是字节的最低位
  428.                     if(DATA1302==1)    //如果读出的数据是1
  429.                     dat|=0x80;    //将1取出,写在dat的最高位  
  430.                     SCLK1302=1;       //将SCLK置于高电平,为下降沿读出
  431.                     delay1(2);  //稍微等待
  432.                     SCLK1302=0;       //拉低SCLK,形成脉冲下降沿
  433.                     delay1(2);  //稍微等待
  434.             }   
  435.           return dat;        //将读出的数据返回
  436. }
  437. uchar  ReadSet1302(uchar Cmd)
  438. {
  439.           uchar dat;
  440.           RST1302=0;                 //拉低RST
  441.           SCLK1302=0;                //确保写数居前SCLK被拉低
  442.           RST1302=1;                 //启动数据传输
  443.           Write1302(Cmd);       //写入命令字
  444.           dat=Read1302();       //读出数据
  445.           SCLK1302=1;              //将时钟电平置于已知状态
  446.           RST1302=0;               //禁止数据传递
  447.           return dat;          //将读出的数据返回
  448. }
  449. void Init_DS1302(void)
  450. {  
  451.          WriteSet1302(0x8E,0x00);//根据写状态寄存器命令字,写入不保护指令
  452.          WriteSet1302(0x80,0x00);//根据写秒寄存器命令字,写入秒的初始值
  453.          WriteSet1302(0x82,0x20);//根据写分寄存器命令字,写入分的初始值
  454.          WriteSet1302(0x84,0x12);//根据写小时寄存器命令字,写入小时的初始值
  455.          WriteSet1302(0x86,0x01);//根据写日寄存器命令字,写入日的初始值
  456.          WriteSet1302(0x88,0x01);//根据写月寄存器命令字,写入月的初始值
  457.          WriteSet1302(0x8c,0x16);//根据写年寄存器命令字,写入年的初始值
  458.          WriteSet1302(0x8a,0x05);//根据写星期寄存器命令字,写入星期的初始值
  459. }
  460. void DisplaySecond(uchar x)
  461. {
  462.          uchar i,j;     
  463.          i=x/10;
  464.          j=x%10;
  465.          lcd_defcharacter24x48(14,16,1,i,tab3);//显示秒的十位
  466.          lcd_defcharacter24x48(17,16,1,j,tab3);//显示秒的个位   
  467. }
  468. void DisplayMinute(uchar x)
  469. {
  470.          uchar i,j;     
  471.          i=x/10;
  472.          j=x%10;  
  473.          lcd_defcharacter24x48(7,16,1,i,tab3);//显示分钟的十位
  474.          lcd_defcharacter24x48(10,16,1,j,tab3);//显示分钟的个位        
  475. }
  476. void DisplayHour(uchar x)
  477. {
  478.          uchar i,j;   
  479.          i=x/10;
  480.          j=x%10;  
  481.          lcd_defcharacter24x48(0,16,1,i,tab3);//显示小时的十位
  482.          lcd_defcharacter24x48(3,16,1,j,tab3);//显示小时的个位      
  483. }
  484. void DisplayDay(uchar x)
  485. {
  486.          uchar i,j;   
  487.          i=x/10;
  488.          j=x%10;     
  489.         lcd_defcharacter8x16(10,0,1,i,tab2);//显示  日的十位
  490.         lcd_defcharacter8x16(11,0,1,j,tab2);//显示   日的个位      
  491. }
  492. void DisplayMonth(uchar x)
  493. {  
  494.          uchar i,j;      
  495.          i=x/10;
  496.          j=x%10;   
  497.         lcd_defcharacter8x16(6,0,1,i,tab2);//显示  月的十位  
  498.         lcd_defcharacter8x16(7,0,1,j,tab2);//显示   月的个位  
  499. }
  500. void DisplayYear(uchar x)
  501. {
  502.          uchar i,j;   
  503.          i=x/10;
  504.          j=x%10;  
  505.         lcd_defcharacter8x16(2,0,1,i,tab2);//显示 年的十位
  506.         lcd_defcharacter8x16(3,0,1,j,tab2);//显示 年的个位
  507. }   
  508. void DisplayWeek(uchar x)
  509. {  
  510.         lcd_defcharacter16x16(19,0,1,x-1,tab5);//显示
  511. }   
  512. void  read_date(void)
  513. {
  514.      ReadValue = ReadSet1302(0x81);   
  515.      second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
  516.      ReadValue = ReadSet1302(0x83);   
  517.      minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);  
  518.      ReadValue = ReadSet1302(0x85);   
  519.      hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);  
  520.      ReadValue = ReadSet1302(0x87);   
  521.      day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);  
  522.      ReadValue = ReadSet1302(0x89);   
  523.      month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);  
  524.      ReadValue = ReadSet1302(0x8d);   
  525.      year=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);  
  526.            ReadValue=ReadSet1302(0x8b);                     //读星期
  527.      week=ReadValue&0x07;
  528.      DisplaySecond(second);            
  529.      DisplayMinute(minute);         
  530.      DisplayHour(hour);              
  531.      DisplayDay(day);                 
  532.      DisplayMonth(month);            
  533.      DisplayYear(year);            
  534.      DisplayWeek(week);   
  535. }
  536. void turn_val(char newval,uchar flag,uchar  newaddr,uchar s1num)
  537. {
  538.         newval=ReadSet1302(newaddr);                     //读取当前时间
  539.     newval=((newval&0x70)>>4)*10+(newval&0x0f);    //将bcd码转换成十进制
  540.     if(flag)                  //判断是加一还是减一
  541.     {  
  542.          newval++;
  543.          switch(s1num)
  544.           {
  545.                           case 1: if(newval>99) newval=0;
  546.                            DisplayYear(newval);      
  547.                                           break;
  548.                   case 2: if(newval>12) newval=1;
  549.                                            DisplayMonth(newval);  
  550.                                           break;
  551.                   case 3: if(newval>31) newval=1;
  552.                                 DisplayDay(newval);   
  553.                                           break;
  554.                   case 4: if(newval>6) newval=0;
  555.                                 DisplayWeek(newval);  
  556.                                           break;  
  557.                   case 5: if(newval>23) newval=0;
  558.                                 DisplayHour(newval);  
  559.                                           break;
  560.                   case 6: if(newval>59) newval=0;
  561.                                 DisplayMinute(newval);  
  562.                                           break;
  563.                   case 7: if(newval>59) newval=0;
  564.                                 DisplaySecond(newval);  
  565.                                           break;
  566.                   default:break;
  567.          }  
  568.       }   
  569.     else
  570.     {
  571.         newval--;
  572.              switch(s1num)
  573.         {
  574.                         case 1: if(newval==0) newval=99;
  575.                    DisplayYear(newval);  
  576.                                   break;
  577.                   case 2: if(newval==0) newval=12;
  578.                                    DisplayMonth(newval);  
  579.                         break;
  580.                   case 3: if(newval==0) newval=31;
  581.                                    DisplayDay(newval);  
  582.                         break;  
  583.                   case 4: if(newval<0) newval=6;
  584.                         DisplayWeek(newval);  
  585.                                   break;
  586.             case 5: if(newval<0) newval=23;
  587.                         DisplayHour(newval);  
  588.                                   break;
  589.             case 6: if(newval<0) newval=59;
  590.                         DisplayMinute(newval);  
  591.                                   break;
  592.             case 7: if(newval<0) newval=59;
  593.                         DisplaySecond(newval);
  594.                                   break;
  595.                        default:break;
  596.          }
  597.         }
  598.         WriteSet1302((newaddr-1),((newval/10)<<4)|(newval%10));  //将新数据写入寄存器            
  599. }
  600. void delay_18B20(unsigned int i)//延时1微秒
  601. {
  602.         while(i--);
  603. }
  604. void ds1820rst()/*ds1820复位*/
  605. {  
  606.           unsigned char x=0;
  607.           DQ18B20 = 1;          //DQ复位
  608.           delay_18B20(4);  //延时
  609.           DQ18B20 = 0;          //DQ拉低
  610.           delay_18B20(100); //精确延时大于480us
  611.           DQ18B20 = 1;          //拉高
  612.           delay_18B20(40);   
  613. }
  614. uchar ds1820rd()/*读数据*/  
  615. {
  616.   unsigned char i=0;
  617.   unsigned char dat = 0;
  618.   for (i=8;i>0;i--)
  619.   {   
  620.           DQ18B20 = 0; //给脉冲信号
  621.     dat>>=1;
  622.     DQ18B20 = 1; //给脉冲信号
  623.     if(DQ18B20)
  624.     dat|=0x80;
  625.     delay_18B20(10);
  626.   }
  627.   return(dat);
  628. }
  629. void ds1820wr(uchar wdata)/*写数据*/
  630. {
  631.         unsigned char i=0;
  632.     for (i=8; i>0; i--)
  633.    {
  634.             DQ18B20 = 0;
  635.      DQ18B20 = wdata&0x01;
  636.      delay_18B20(10);
  637.      DQ18B20 = 1;
  638.      wdata>>=1;
  639.    }
  640. }
  641. read_temp()/*读取温度值并转换*/
  642. {
  643.   uchar a,b;  
  644.   ds1820rst();     
  645.   ds1820wr(0xcc);//*跳过读序列号*/
  646.   ds1820wr(0x44);//*启动温度转换*/
  647.   ds1820rst();     
  648.   ds1820wr(0xcc);//*跳过读序列号*/  
  649.   ds1820wr(0xbe);//*读取温度*/  
  650.   a=ds1820rd();
  651.   b=ds1820rd();
  652.   tvalue=b;
  653.   tvalue<<=8;
  654.   tvalue=tvalue|a;
  655.   if(tvalue<0x0fff)
  656.      tflag=0;
  657.   else
  658.    {
  659.                    tvalue=~tvalue+1;
  660.                   tflag=1;
  661.    }
  662.   tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
  663. return(tvalue);
  664. }
  665. void ds1820disp()//温度值显示
  666. {
  667.          lcd_defcharacter8x16(24,0,1,(tvalue%1000/100),tab2);//显示 温度的十位
  668.          lcd_defcharacter8x16(25,0,1,(tvalue%1000%100/10),tab2);//显示 温度的个位  
  669.          lcd_defcharacter8x16(27,0,1,(tvalue%1000%100%10),tab2);//显示 温度的小数     
  670.          if(tflag==0)
  671.                  lcd_defcharacter8x16(23,0,1,12,tab2);//显示温度的+号
  672.      else
  673.                 lcd_defcharacter8x16(23,0,1,11,tab2);//显示温度显-号
  674. }         
  675. main()
  676. {
  677.         lcd_showfull(0);                                           //清屏
  678.         init6963(); //初始化
  679.         Init_DS1302();       //初始化1302
  680.         lcd_defcharacter8x16(0,0,1,2,tab2);//显示    2-固定显示
  681.         lcd_defcharacter8x16(1,0,1,0,tab2);//显示    0-固定显示  
  682.         lcd_defcharacter16x16(4,0,1,0,tab1);//显示   年-固定显示
  683.         lcd_defcharacter16x16(8,0,1,1,tab1);//显示   月-固定显示
  684.         lcd_defcharacter16x16(12,0,1,2,tab1);//显示 日-固定显示
  685.         lcd_defcharacter16x16(15,0,1,3,tab1);//显示 星-固定显示
  686.         lcd_defcharacter16x16(17,0,1,4,tab1);//显示 期-固定显示
  687.         lcd_defcharacter16x16(21,0,1,21,tab1);//显示 -固定显示温度计图片
  688.         lcd_defcharacter8x16(26,0,1,10,tab2);//显示        -固定显示小数点.
  689.         lcd_defcharacter16x16(28,0,1,22,tab1);//显示 -固定显示摄氏度图片         
  690.         lcd_defcharacter8x48(6,16,1,0,tab4);//显示-固定显示:(前两点)
  691.         lcd_defcharacter8x48(13,16,1,0,tab4);//显示-固定显示:(后两点)

  692.         lcd_defcharacter16x16(21,16,2,17,tab1);//显示农历两个字
  693.         lcd_defcharacter16x16(25,16,1,19,tab1);//显示羊字
  694.         lcd_defcharacter16x16(27,16,1,20,tab1);//显示年字
  695.                                            
  696.    while(1)
  697.      {                                                                             
  698.            read_date();
  699.            read_temp();//读取温度
  700.            ds1820disp();//显示                  
  701.          }
  702. }




复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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