找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3|回复: 0
打印 上一主题 下一主题
收起左侧

DS1302读不了数据的问题

[复制链接]
跳转到指定楼层
楼主




我用STC8H8KU64 LQFN64单片机和12232液晶,想写个时钟,在调试的过程中DS1302的数据怎么都读不出来,时钟显示总-5-5-5,不知是什么原因,求助各高手帮指一下


  1. /*============================================================
  2.   FVN-12232C-03  122×32 SED1520 + DS1302时钟 + 开机屏自测+LOGO【中】
  3.   MCU: STC8H8K64U 24MHz
  4.   LCD接线:
  5.     DB0~DB7  -> P2.0~P2.7
  6.     A0(D/I)  -> P4.1
  7.     R/W      -> P3.7
  8.     E1       -> P3.5
  9.     E2       -> P3.6
  10.     RES      -> P5.1
  11.   DS1302接线:
  12.     SCLK  -> P1.5
  13.     IO    -> P1.6
  14.     CE    -> P1.7
  15. ============================================================*/
  16. #include <stc8h.h>
  17. #include <intrins.h>
  18. //#include "LCD_ks0108ZK.h"  //屏字库 适合ks0108控制器的12864屏/19264屏
  19. #define uchar unsigned char
  20. #define uint  unsigned int
  21. //Disp_8x16(uchar code *cn);
  22. /*-------- LCD引脚定义 --------*/
  23. sbit LCD_RES = P5^1;
  24. sbit LCD_E1  = P3^5;
  25. sbit LCD_E2  = P3^6;
  26. sbit LCD_RW  = P3^7;
  27. sbit LCD_A0  = P4^1;
  28. #define LCD_DATA P2


  29. /*-------- DS1302引脚定义 --------*/
  30. sbit DS_SCLK = P1^4;
  31. sbit DS_IO   = P1^5;
  32. sbit DS_CE   = P1^6;


  33. /*-------- 全局时间变量 --------*/
  34. uchar sec,min,hour,day,month,week,year;


  35. /*字模数据表,宽度x高度=8x16----------------------------------------------*/
  36. uchar code ZM_8x16[][16]={
  37. /*自建8*16字体*/
  38. 0x00,0x78,0x04,0x04,0x04,0x04,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"0",0*/


  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"1",1*/


  40. 0x00,0x00,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x00,0x00,/*"2",2*/


  41. 0x00,0x00,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"3",3*/


  42. 0x00,0x78,0x80,0x80,0x80,0x80,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"4",4*/


  43. 0x00,0x78,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"5",5*/


  44. 0x00,0x78,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/


  45. 0x00,0x00,0x04,0x04,0x04,0x04,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"7",7*/


  46. 0x00,0x78,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"8",8*/


  47. 0x00,0x78,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"9",9*/


  48. 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",10*/  


  49. 0x00,0xC0,0x20,0x10,0x08,0x10,0x20,0xC0,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x07,0x03,/*"湿度图标",11*/


  50. 0x00,0x00,0x18,0xD8,0x30,0xCC,0xC0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,/*"湿度%",12*/


  51. 0x00,0x00,0xFC,0xAA,0x02,0xFC,0x00,0x00,0x0C,0x1E,0x3F,0x3E,0x3E,0x3F,0x1E,0x0C,/*"温度图表",13*/


  52. 0x00,0x08,0x00,0xF8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,/*"温度C",14*/


  53. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空白",15*/


  54. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"_",16*/
  55. };


  56. /*字模数据表,宽度x高度=8x16----------------------------------------------*/
  57. uchar code ZM1_8x16[][16]={
  58. /*宋体加粗*/
  59. 0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x0F,0x1F,0x30,0x20,0x30,0x1F,0x0F,/*"0",0*/


  60. 0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,/*"1",1*/


  61. 0x00,0x70,0x78,0x08,0x08,0x08,0xF8,0xF0,0x00,0x30,0x38,0x2C,0x26,0x23,0x31,0x30,/*"2",2*/


  62. 0x00,0x30,0x38,0x08,0x08,0x88,0xF8,0x70,0x00,0x18,0x38,0x21,0x21,0x23,0x3E,0x1C,/*"3",3*/


  63. 0x00,0x00,0x80,0xC0,0x70,0xF8,0xF8,0x00,0x00,0x06,0x07,0x25,0x24,0x3F,0x3F,0x24,/*"4",4*/


  64. 0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x19,0x39,0x20,0x20,0x31,0x1F,0x0E,/*"5",5*/


  65. 0x00,0xE0,0xF0,0x98,0x88,0x98,0x90,0x00,0x00,0x0F,0x1F,0x31,0x20,0x20,0x3F,0x1F,/*"6",6*/


  66. 0x00,0x18,0x18,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x3E,0x3F,0x01,0x00,0x00,/*"7",7*/


  67. 0x00,0x70,0xF8,0x88,0x08,0x88,0xF8,0x70,0x00,0x1C,0x3E,0x23,0x21,0x23,0x3E,0x1C,/*"8",8*/


  68. 0x00,0xF0,0xF8,0x08,0x08,0x18,0xF0,0xE0,0x00,0x01,0x13,0x32,0x22,0x33,0x1F,0x0F,/*"9",9*/


  69. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"-",10*/        


  70. 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,/*":",11*/


  71. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空白",12*/
  72. };


  73. /*字模数据表,宽度x高度=16x16----------------------------------------------*/
  74. uchar code ZM_16x16[][32]={        
  75. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  76. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空白",0*/        
  77.         
  78. /*宋体*/        
  79. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
  80. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",1*/


  81. 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
  82. 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"二",2*/


  83. 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
  84. 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"三",3*/


  85. 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
  86. 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*"四",4*/


  87. 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
  88. 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*"五",5*/


  89. 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
  90. 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,/*"六",6*/


  91. 0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
  92. 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,/*"七",7*/


  93. 0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
  94. 0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,/*"八",8*/


  95. 0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
  96. 0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,/*"九",9*/


  97. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  98. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"十",10*/


  99. 0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00,
  100. 0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,/*"冬",11*/


  101. 0x00,0xFE,0x22,0x22,0xFE,0x40,0x48,0x48,0x7F,0x48,0x48,0x48,0x7F,0x48,0x48,0x00,
  102. 0x80,0x7F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,/*"腊",12*/


  103. 0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,
  104. 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"正",13*/


  105. 0x08,0x08,0x89,0xEA,0x18,0x88,0x00,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
  106. 0x02,0x01,0x00,0xFF,0x01,0x86,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,/*"初",14*/


  107. 0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x00,
  108. 0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"廿",15*/


  109. 0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
  110. 0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,/*"月",16*/


  111. 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
  112. 0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"日",17*/


  113. 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,
  114. 0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,/*"星",18*/


  115. 0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
  116. 0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,/*"期",19*/
  117. };


  118. /**************** 开机LOGO:全屏大字【中】 32*122 左右屏各61列 ****************/
  119. code uchar logo_left[4][61] = {
  120. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  121. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  122. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  123. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  124. };
  125. code uchar logo_right[4][61] = {
  126. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  127. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  128. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  129. {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  130. };


  131. /*-------- 延时函数 --------*/
  132. void Delay_us(uint us)
  133. {
  134.     while(us--)
  135.     {
  136.         _nop_(); _nop_(); _nop_(); _nop_();
  137.         _nop_(); _nop_(); _nop_(); _nop_();
  138.     }
  139. }


  140. void Delay_ms(uint ms)
  141. {
  142.     uint i,j;
  143.     for(i=ms;i>0;i--)
  144.         for(j=1000;j>0;j--);
  145. }


  146. /*============================================================
  147.   SED1520 底层: 写命令
  148. ============================================================*/
  149. void SED1520_WriteCmd(uchar cs, uchar cmd)
  150. {
  151.     LCD_A0 = 0;
  152.         LCD_RW = 0;
  153.     if(cs == 0) LCD_E1 = 1; else LCD_E2 = 1;
  154.     LCD_DATA = cmd;
  155.         Delay_us(20);
  156.     if(cs == 0) LCD_E1 = 0; else LCD_E2 = 0;
  157.         Delay_us(20);
  158. }


  159. /*============================================================
  160.   SED1520 底层: 写数据
  161. ============================================================*/
  162. void SED1520_WriteData(uchar cs, uchar dat)
  163. {
  164.     LCD_A0 = 1;
  165.         LCD_RW = 0;
  166.     if(cs == 0) LCD_E1 = 1; else LCD_E2 = 1;
  167.     LCD_DATA = dat;
  168.         Delay_us(20);
  169.     if(cs == 0) LCD_E1 = 0; else LCD_E2 = 0;
  170.         Delay_us(20);
  171. }


  172. /*============================================================
  173.   屏自测:全开(0xFF) → 延时 → 全灭(0x00)
  174. ============================================================*/
  175. //void LCD_TestScreen(uchar code *cn)
  176.         void LCD_TestScreen()
  177. {
  178.    uchar page, col;
  179.         // uchar i,j;
  180.     //===== 屏全开测试,全部点亮黑点 =====
  181.    /* for(page = 0; page < 2; page++)
  182.     {
  183.         SED1520_WriteCmd(0, 0xB8 + page);
  184.        SED1520_WriteCmd(0, 0x00);
  185.                         //  SED1520_WriteCmd(0, 0x10);         //列高4位=0
  186.         for(col = 0; col < 8; col++)
  187.                              {
  188.                               Delay_ms(100);
  189.           //  SED1520_WriteData(0, 0x02);
  190.                                                  SED1520_WriteData(0, cn[0]);
  191.                            //全屏黑停留0.5秒
  192.             }
  193.      //  SED1520_WriteCmd(1, 0xB8 + page);//0左边  1右边
  194.        // SED1520_WriteCmd(1, 0x00);
  195.      //  for(col = 0; col < 1; col++)
  196.                                         //        {
  197.            //  SED1520_WriteData(1, 0xFF);
  198.                             //  Delay_ms(10);  //全屏黑停留0.5秒
  199.                                         //                }
  200.     }
  201.    Delay_ms(500); */ //全屏黑停留0.5秒


  202.     //===== 屏全灭测试,全部清掉黑点 =====
  203.   /* for(page = 0; page < 4; page++)
  204.     {
  205.         SED1520_WriteCmd(0, 0xB8 + page);
  206.         SED1520_WriteCmd(0, 0x00);
  207.         for(col = 0; col < 61; col++)
  208.             SED1520_WriteData(0, 0x00);


  209.         SED1520_WriteCmd(1, 0xB8 + page);
  210.         SED1520_WriteCmd(1, 0x00);
  211.         for(col = 0; col < 61; col++)
  212.             SED1520_WriteData(1, 0x00);
  213.     }
  214.     Delay_ms(500);  */
  215.                    for(page = 0; page < 2; page++)
  216.    {
  217.        SED1520_WriteCmd(0, 0xB8 +page);//片地址
  218.         SED1520_WriteCmd(0, 0x10);//列地址
  219.         for(col = 0; col < 61; col++)
  220.                             {
  221.             SED1520_WriteData(0, 0xFF);
  222.                                Delay_ms(10);  //全屏黑停留0.5秒
  223.            }
  224.      //   SED1520_WriteCmd(1, 0xB8 + page);
  225.       //  SED1520_WriteCmd(1, 0x00);
  226.      //   for(col = 0; col < 61; col++)
  227.       //      SED1520_WriteData(1, 0xFF);
  228.                 //         Delay_ms(1000);  //全屏黑停留0.5秒
  229.     }
  230.    // Delay_ms(500);  //全屏黑停留0.5秒
  231. }
  232. /***********************************************************************
  233. 函数功能:指定位置显示8*16的字符               
  234. 12864屏 colcol列0~15,page行0~3   fb带表反白显示,fb=非0是反白显示,fb=0正常显示
  235. 19264屏 colcol列0~23,page行0~3   fb带表反白显示,fb=非0是反白显示,fb=0正常显示
  236. ************************************************************************/


  237.   /*  uchar i,j;
  238.     for(i=0;i<2;i++)   //i=0上半8行;i=1下半8行
  239.     {
  240.         SED1520_WriteCmd(0, 0xB8 + i); //设置硬件页
  241.         SED1520_WriteCmd(0, 0x10);     //列高4位
  242.         SED1520_WriteCmd(0, 0x00);    //列低4位,起始列=0
  243.         for(j=0;j<8;j++)
  244.         {
  245.             SED1520_WriteData(0, cn[2]);
  246.         }
  247.     }
  248. }
  249. /*============================================================
  250.   显示开机LOGO 大字【中】
  251. ============================================================*/
  252. void LCD_ShowLogo(void)
  253. {
  254.     uchar page,col;
  255.     for(page=0;page<4;page++)
  256.     {
  257.         //左半屏 cs=0 E1
  258.         SED1520_WriteCmd(0,0xB8+page);
  259.         SED1520_WriteCmd(0,0x00);
  260.         for(col=0;col<61;col++)
  261.         {
  262.             SED1520_WriteData(0,logo_left[page ][col]);
  263.         }
  264.         //右半屏 cs=1 E2
  265.         SED1520_WriteCmd(1,0xB8+page);
  266.         SED1520_WriteCmd(1,0x00);
  267.         for(col=0;col<61;col++)
  268.         {
  269.             SED1520_WriteData(1,logo_right[page ][col]);
  270.         }
  271.     }
  272. }


  273. /*============================================================
  274.   LCD初始化
  275. ============================================================*/
  276. void LCD_Init(void)
  277. {
  278.     /* P2 数据总线推挽输出 */
  279.     P2M0 = 0xFF; P2M1 = 0x00;


  280.     /* P3.5 E1, P3.6 E2, P3.7 RW 推挽 */
  281.     P3M0 |= (1<<5)|(1<<6)|(1<<7);
  282.     P3M1 &= ~((1<<5)|(1<<6)|(1<<7));


  283.     /* P4.1 A0 推挽 */
  284.     P4M0 |= (1<<1);
  285.     P4M1 &= ~(1<<1);


  286.     /* P5.1 RES 推挽 */
  287.     P5M0 |= (1<<1);
  288.     P5M1 &= ~(1<<1);


  289.     // DS1302 P1口
  290.     P1M0 |= (1<<5)|(1<<7);
  291.     P1M1 &= ~((1<<5)|(1<<7));
  292.     DS_SCLK = 0;
  293.     DS_CE = 0;
  294.     DS_IO = 0;


  295.     LCD_E1 = 0;
  296.     LCD_E2 = 0;
  297.     LCD_RW = 0;
  298.     LCD_A0 = 0;


  299.     //硬件复位 SED1520
  300.     LCD_RES = 0;
  301.     Delay_ms(30);
  302.     LCD_RES = 1;
  303.     Delay_ms(80);


  304.     SED1520_WriteCmd(0, 0xAF);  //开显示左屏
  305.     Delay_ms(10);
  306.     SED1520_WriteCmd(1, 0xAF);  //开显示右屏
  307.     Delay_ms(10);
  308. }


  309. /*============================================================
  310.   全屏清除
  311. ============================================================*/
  312. void LCD_Clear(void)
  313. {
  314.     uchar page, col;
  315.     for(page = 0; page < 4; page++)
  316.     {
  317.         SED1520_WriteCmd(0, 0xB8 + page);
  318.         SED1520_WriteCmd(0, 0x00);
  319.         for(col = 0; col < 61; col++)
  320.             SED1520_WriteData(0, 0x00);


  321.         SED1520_WriteCmd(1, 0xB8 + page);
  322.         SED1520_WriteCmd(1, 0x00);
  323.         for(col = 0; col < 61; col++)
  324.             SED1520_WriteData(1, 0x00);
  325.     }
  326. }


  327. /************************ DS1302 驱动 ************************/
  328. void DS1302_IO_Set(bit dir)
  329. {
  330.     if(dir)
  331.     {
  332.         P1M0 &= ~(1<<5);
  333.         P1M1 |= (1<<5);
  334.     }
  335.     else
  336.     {
  337.         P1M0 |= (1<<5);
  338.         P1M1 &= ~(1<<5);
  339.     }
  340. }


  341. void DS1302_WriteByte(uchar dat)
  342. {
  343.     uchar i;
  344.     DS1302_IO_Set(0);
  345.     for(i=0;i<8;i++)
  346.     {
  347.                           DS_SCLK = 0;
  348.                         Delay_us(5);
  349.         DS_IO = dat & 0x01;
  350.                                 Delay_us(5);
  351.                           dat >>= 1;
  352.                                 Delay_us(5);
  353.         DS_SCLK = 1;
  354.                                 Delay_us(5);
  355.       
  356.       
  357.     }
  358. }


  359. uchar DS1302_ReadByte(void)
  360. {
  361.     uchar i,dat=0;
  362.     DS1302_IO_Set(1);
  363.     for(i=0;i<8;i++)
  364.     {
  365.         dat >>= 1;
  366.                                 //Delay_us(5);
  367.         DS_SCLK = 0;
  368.                                 Delay_us(5);
  369.                           DS_SCLK = 1;
  370.                           Delay_us(5);
  371.         if(DS_IO)
  372.                                         //        
  373.                                         dat |= 0x80;
  374.                                 //        Delay_us(5);
  375.         DS_SCLK = 0;
  376.                                         Delay_us(5);
  377.     }
  378.     return dat;
  379. }


  380. void DS1302_Write(uchar addr, uchar dat)
  381. {
  382.     DS_CE = 0;
  383.           _nop_();
  384.           DS_SCLK = 0;
  385.           _nop_();
  386.           DS_CE = 1;
  387.           _nop_();
  388.     DS1302_WriteByte(addr);
  389.                 Delay_us(20);
  390.     DS1302_WriteByte(dat);
  391.                 Delay_us(5);
  392.     DS_CE = 0;
  393. }


  394. uchar DS1302_Read(uchar addr)
  395. {
  396.     uchar dat;
  397.     DS_CE = 0;
  398.           _nop_();
  399.           DS_SCLK = 0;
  400.           _nop_();
  401.           DS_CE = 1;
  402.           _nop_();
  403.     DS1302_WriteByte(addr);
  404.                 Delay_us(5);
  405.     dat = DS1302_ReadByte();
  406.                 Delay_us(5);
  407.     DS_CE = 0;
  408.                 Delay_us(5);
  409.     return dat;
  410. }


  411. uchar BCD2DEC(uchar bcd)
  412. {
  413.     return ((bcd>>4)*10)+(bcd&0x0F);
  414. }
  415. uchar DEC2BCD(uchar dec)
  416. {
  417.     return ((dec/10)<<4)|(dec%10);
  418. }


  419. void DS1302_ReadTime(void)
  420. {
  421.    sec  = BCD2DEC(DS1302_Read(0x81));
  422.          // sec  = BCD2DEC(00100101);
  423.                 Delay_us(5);
  424.     min  = BCD2DEC(DS1302_Read(0x83));
  425.          // min  = BCD2DEC(00000101);
  426.                 Delay_us(5);
  427.     hour = BCD2DEC(DS1302_Read(0x85));
  428.                 Delay_us(5);
  429.     day  = BCD2DEC(DS1302_Read(0x87));
  430.                 Delay_us(5);
  431.     month= BCD2DEC(DS1302_Read(0x89));
  432.                 Delay_us(5);
  433.     week = BCD2DEC(DS1302_Read(0x8B));
  434.                 Delay_us(5);
  435.     year = BCD2DEC(DS1302_Read(0x8D));
  436. }


  437. void DS1302_SetTime(uchar y,uchar m,uchar d,uchar w,uchar h,uchar mi,uchar s)
  438. {
  439.     DS1302_Write(0x8E,0x00);
  440.                 Delay_us(5);
  441.     DS1302_Write(0x80,DEC2BCD(s));
  442.                 Delay_us(5);
  443.     DS1302_Write(0x82,DEC2BCD(mi));
  444.                 Delay_us(5);
  445.     DS1302_Write(0x84,DEC2BCD(h));
  446.                 Delay_us(5);
  447.     DS1302_Write(0x86,DEC2BCD(d));
  448.                 Delay_us(5);
  449.     DS1302_Write(0x88,DEC2BCD(m));
  450.                 Delay_us(5);
  451.     DS1302_Write(0x8A,DEC2BCD(w));
  452.                 Delay_us(5);
  453.     DS1302_Write(0x8C,DEC2BCD(y));
  454.                 Delay_us(5);
  455.     DS1302_Write(0x8E,0x80);
  456. }


  457. /************************ 8*16纵向字库 ************************/
  458. code uchar F8X16[][16] = {
  459. //0
  460. {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
  461. //1
  462. {0x00,0x00,0x00,0x00,0x84,0x42,0xFE,0x7F,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00},
  463. //2
  464. {0x00,0x00,0x74,0x1D,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x0C,0x18,0x00,0x00},
  465. //3
  466. {0x00,0x00,0x44,0x10,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
  467. //4
  468. {0x00,0x00,0x1F,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0xFE,0x7F,0x10,0x08,0x00,0x00},
  469. //5
  470. {0x00,0x00,0x44,0x10,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7E,0x1F,0x00,0x00},
  471. //6
  472. {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x78,0x1C,0x00,0x00},
  473. //7
  474. {0x00,0x00,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7E,0x1F,0x00,0x00},
  475. //8
  476. {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
  477. //9
  478. {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x86,0x43,0x7C,0x1E,0x00,0x00},
  479. //10:空格
  480. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  481. //11:冒号 :
  482. {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},
  483. //12:减号 -
  484. {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
  485. //13:周
  486. {0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00},
  487. };


  488. void LCD_PutChar(uchar page,uchar x,uchar ch_idx)
  489. {
  490.     uchar i,cs,col;
  491.     if(x < 61)
  492.     {
  493.         cs = 0;
  494.         col = x;
  495.     }
  496.     else
  497.     {
  498.         cs = 1;
  499.         col = x - 61;
  500.     }
  501.     SED1520_WriteCmd(cs, 0xB8 + page);
  502.     SED1520_WriteCmd(cs, 0x00 + col);
  503.     for(i=0;i<8;i++)
  504.     {
  505.         SED1520_WriteData(cs, F8X16[ch_idx][ i]);
  506.     }
  507.     SED1520_WriteCmd(cs, 0xB8 + page + 1);
  508.     SED1520_WriteCmd(cs, 0x00 + col);
  509.     for(i=0;i<8;i++)
  510.     {
  511.         SED1520_WriteData(cs, F8X16[ch_idx][i+8]);
  512.     }
  513. }
  514. //void Disp_8x16(uchar x, uchar y, uchar code *cn)
  515.         //void Disp_8x16(uchar z,uchar x,uchar y,uchar code *cn)//z页 x左右选择 Y列地址   
  516.                         void Disp_8x16(uchar z,uchar x,uchar y,uchar code *cn)//z页 x左右选择 Y列地址   
  517. //        void Disp_8x16()
  518. {
  519.            uchar page1, col1;
  520.                    for(page1 = 0; page1 < 2; page1++)
  521.    {
  522.        SED1520_WriteCmd(x, 0xB8 +page1+z);//片地址
  523.         SED1520_WriteCmd(x, 0x00+y);//列地址
  524.         for(col1 = 0; col1 < 8; col1++)
  525.                             {
  526.             SED1520_WriteData(x,cn[page1*8+col1]);
  527.                                Delay_ms(1);  //全屏黑停留0.5秒
  528.          
  529.                                                  }
  530.                                          }
  531.           }
  532.         void Disp_16x16(uchar z,uchar x,uchar y,uchar code *cn)//
  533. //        void Disp_8x16()
  534. {
  535.            uchar page1, col1;
  536.                    for(page1 = 0; page1 < 2; page1++)
  537.    {
  538.        SED1520_WriteCmd(x, 0xB8 +page1+z);//片地址
  539.         SED1520_WriteCmd(x, 0x00+y);//列地址
  540.         for(col1 = 0; col1 < 16; col1++)
  541.                             {
  542.             SED1520_WriteData(x,cn[page1*16+col1]);
  543.                                Delay_ms(1);  //全屏黑停留0.5秒
  544.          
  545.                                                  }
  546.                                          }
  547.           }


  548. void LCD_ShowNum(uchar page,uchar x,uchar num)
  549. {
  550.     uchar hi,lo;
  551.     hi = num / 10;
  552.     lo = num % 10;
  553.     LCD_PutChar(page, x, hi);
  554.     LCD_PutChar(page, x+8, lo);
  555. }


  556. /************************ 主函数 ************************/
  557. void main(void)
  558. {
  559.     LCD_Init();
  560.          P1M0 = 0Xff;
  561.        P1M1=0X00;
  562. //   Delay_ms(100);
  563.   //  LCD_TestScreen();   //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
  564.    //
  565.         LCD_Clear();
  566.    // LCD_ShowLogo();     //开机显示【中】LOGO
  567.    // Delay_ms(2000);     //LOGO停留2秒
  568. //   LCD_Clear();


  569.     DS1302_SetTime(26,10,06,2,12,00,00);
  570.         //Disp_8x16(ZM_8x16[2]);
  571.         //        LCD_TestScreen();


  572.     Delay_ms(500);
  573.   
  574.    
  575.                 //         LCD_TestScreen(ZM_8x16[4]);   //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
  576.                         // LCD_TestScreen();   //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
  577.         DS1302_ReadTime();
  578. //        sec=53;
  579.         //hour=12;
  580. //        min=30;
  581.         // DS1302_ReadTime(void);


  582.       //  第一行page0~1:YY-MM-DD 周X
  583.      //   LCD_ShowNum(0,0,year);
  584.      //   LCD_PutChar(0,16,12); // '-'
  585.      //   LCD_ShowNum(0,24,month);
  586.      //   LCD_PutChar(0,40,12); // '-'
  587.      //   LCD_ShowNum(0,48,day);
  588.      //   LCD_PutChar(0,64,10); //空格
  589.      //   LCD_PutChar(0,72,13); //周
  590.      //   LCD_ShowNum(0,80,week);


  591.        // 第二行page2~3:HH:MM:SS
  592.       //  LCD_ShowNum(2,0,hour);
  593.      //   LCD_PutChar(2,16,11); // :
  594.      //  LCD_ShowNum(2,24,min);
  595.      //   LCD_PutChar(2,40,11); // :
  596.      //   LCD_ShowNum(2,48,sec);
  597.                                  
  598.                 //        Disp_8x16(ZM_8x16[2]);
  599.                          LCD_Clear();
  600.                                          Delay_ms(1000);
  601.                         Disp_8x16(0,0,0,ZM_8x16[2]);//页/ 左右/列地址
  602.                         Disp_8x16(0,0,8,ZM_8x16[0]);
  603.                                 Disp_8x16(0,0,16,ZM_8x16[2]);
  604.                                         Disp_8x16(0,0,24,ZM_8x16[6]);
  605.                                  
  606.                                                 Disp_8x16(0,0,32,ZM_8x16[10]);
  607.                                                         Disp_8x16(0,0,40,ZM_8x16[1]);
  608.                                                                 Disp_8x16(0,0,48,ZM_8x16[0]);
  609.                                                                         Disp_8x16(0,0,56,ZM_8x16[10]);
  610.                                                                         Disp_8x16(0,1,0,ZM_8x16[ day/10]);
  611.                                                                                 Disp_8x16(0,1,8,ZM_8x16[day%10]);
  612.                                                                                  //        Disp_8x16(1,20,ZM1_8x16[14]);
  613.                                                                                         //        Disp_8x16(1,30,ZM1_8x16[5]);
  614.                                                                                                         Disp_16x16(0,1,16,ZM_16x16[18]);
  615.                                                                                                 Disp_16x16(0,1,32,ZM_16x16[19]);
  616.                                                                                                 //        Disp_16x16(0,1,48,ZM_16x16[week]);
  617.                                                                                                         Disp_8x16(0,1,48,ZM1_8x16[week]);
  618.                                                                 Disp_8x16(2,0,0,ZM_8x16[hour/10]);               
  619.                       Disp_8x16(2,0,8,ZM_8x16[hour%10]);
  620.                       Disp_8x16(2,0,16,ZM1_8x16[11]);               
  621.                       Disp_8x16(2,0,24,ZM_8x16[ min/10]);               
  622.                 Disp_8x16(2,0,32,ZM_8x16[ min%10]);
  623.                 Disp_8x16(2,0,40,ZM1_8x16[11]);        
  624.                                                                 Disp_8x16(2,0,48,ZM_8x16[sec/10]);
  625.                                                                 Disp_8x16(2,0,56,ZM_8x16[sec%10]);
  626.                                                                    Disp_8x16(2,1,34,ZM_8x16[14]);
  627.                                                                           Disp_8x16(2,1,17,ZM_8x16[2]);
  628.                                                                                  Disp_8x16(2,1,25,ZM_8x16[2]);
  629.                                                                
  630.                         
  631.                               while(1)
  632.                                                 {
  633.                                                                 Disp_8x16(2,0,0,ZM_8x16[hour/10]);               
  634.                       Disp_8x16(2,0,8,ZM_8x16[hour%10]);
  635.                       Disp_8x16(2,0,16,ZM1_8x16[11]);               
  636.                       Disp_8x16(2,0,24,ZM_8x16[ min/10]);               
  637.                 Disp_8x16(2,0,32,ZM_8x16[ min%10]);
  638.                 Disp_8x16(2,0,40,ZM1_8x16[11]);        
  639.                                                                 Disp_8x16(2,0,48,ZM_8x16[sec/10]);
  640.                                                                 Disp_8x16(2,0,56,ZM_8x16[sec%10]);
  641.                                                                    Disp_8x16(2,1,34,ZM_8x16[14]);
  642.                                                                           Disp_8x16(2,1,17,ZM_8x16[2]);
  643.                                                                                  Disp_8x16(2,1,25,ZM_8x16[2]);
  644.                                                 }
  645.                           
  646.      //  Disp_8x16();
  647. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶顶 踩踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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