我用STC8H8KU64 LQFN64单片机和12232液晶,想写个时钟,在调试的过程中DS1302的数据怎么都读不出来,时钟显示总-5-5-5,不知是什么原因,求助各高手帮指一下
- /*============================================================
- FVN-12232C-03 122×32 SED1520 + DS1302时钟 + 开机屏自测+LOGO【中】
- MCU: STC8H8K64U 24MHz
- LCD接线:
- DB0~DB7 -> P2.0~P2.7
- A0(D/I) -> P4.1
- R/W -> P3.7
- E1 -> P3.5
- E2 -> P3.6
- RES -> P5.1
- DS1302接线:
- SCLK -> P1.5
- IO -> P1.6
- CE -> P1.7
- ============================================================*/
- #include <stc8h.h>
- #include <intrins.h>
- //#include "LCD_ks0108ZK.h" //屏字库 适合ks0108控制器的12864屏/19264屏
- #define uchar unsigned char
- #define uint unsigned int
- //Disp_8x16(uchar code *cn);
- /*-------- LCD引脚定义 --------*/
- sbit LCD_RES = P5^1;
- sbit LCD_E1 = P3^5;
- sbit LCD_E2 = P3^6;
- sbit LCD_RW = P3^7;
- sbit LCD_A0 = P4^1;
- #define LCD_DATA P2
- /*-------- DS1302引脚定义 --------*/
- sbit DS_SCLK = P1^4;
- sbit DS_IO = P1^5;
- sbit DS_CE = P1^6;
- /*-------- 全局时间变量 --------*/
- uchar sec,min,hour,day,month,week,year;
- /*字模数据表,宽度x高度=8x16----------------------------------------------*/
- uchar code ZM_8x16[][16]={
- /*自建8*16字体*/
- 0x00,0x78,0x04,0x04,0x04,0x04,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"0",0*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"1",1*/
- 0x00,0x00,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x00,0x00,/*"2",2*/
- 0x00,0x00,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"3",3*/
- 0x00,0x78,0x80,0x80,0x80,0x80,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"4",4*/
- 0x00,0x78,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"5",5*/
- 0x00,0x78,0x84,0x84,0x84,0x84,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"6",6*/
- 0x00,0x00,0x04,0x04,0x04,0x04,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,/*"7",7*/
- 0x00,0x78,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"8",8*/
- 0x00,0x78,0x84,0x84,0x84,0x84,0x78,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x1F,0x00,/*"9",9*/
- 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"-",10*/
- 0x00,0xC0,0x20,0x10,0x08,0x10,0x20,0xC0,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x07,0x03,/*"湿度图标",11*/
- 0x00,0x00,0x18,0xD8,0x30,0xCC,0xC0,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,/*"湿度%",12*/
- 0x00,0x00,0xFC,0xAA,0x02,0xFC,0x00,0x00,0x0C,0x1E,0x3F,0x3E,0x3E,0x3F,0x1E,0x0C,/*"温度图表",13*/
- 0x00,0x08,0x00,0xF8,0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,/*"温度C",14*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空白",15*/
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"_",16*/
- };
- /*字模数据表,宽度x高度=8x16----------------------------------------------*/
- uchar code ZM1_8x16[][16]={
- /*宋体加粗*/
- 0x00,0xE0,0xF0,0x18,0x08,0x18,0xF0,0xE0,0x00,0x0F,0x1F,0x30,0x20,0x30,0x1F,0x0F,/*"0",0*/
- 0x00,0x00,0x10,0x10,0xF8,0xF8,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x3F,0x20,0x20,/*"1",1*/
- 0x00,0x70,0x78,0x08,0x08,0x08,0xF8,0xF0,0x00,0x30,0x38,0x2C,0x26,0x23,0x31,0x30,/*"2",2*/
- 0x00,0x30,0x38,0x08,0x08,0x88,0xF8,0x70,0x00,0x18,0x38,0x21,0x21,0x23,0x3E,0x1C,/*"3",3*/
- 0x00,0x00,0x80,0xC0,0x70,0xF8,0xF8,0x00,0x00,0x06,0x07,0x25,0x24,0x3F,0x3F,0x24,/*"4",4*/
- 0x00,0xF8,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x19,0x39,0x20,0x20,0x31,0x1F,0x0E,/*"5",5*/
- 0x00,0xE0,0xF0,0x98,0x88,0x98,0x90,0x00,0x00,0x0F,0x1F,0x31,0x20,0x20,0x3F,0x1F,/*"6",6*/
- 0x00,0x18,0x18,0x08,0x88,0xE8,0x78,0x18,0x00,0x00,0x00,0x3E,0x3F,0x01,0x00,0x00,/*"7",7*/
- 0x00,0x70,0xF8,0x88,0x08,0x88,0xF8,0x70,0x00,0x1C,0x3E,0x23,0x21,0x23,0x3E,0x1C,/*"8",8*/
- 0x00,0xF0,0xF8,0x08,0x08,0x18,0xF0,0xE0,0x00,0x01,0x13,0x32,0x22,0x33,0x1F,0x0F,/*"9",9*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"-",10*/
- 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,/*":",11*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"空白",12*/
- };
- /*字模数据表,宽度x高度=16x16----------------------------------------------*/
- uchar code ZM_16x16[][32]={
- 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,/*"空白",0*/
-
- /*宋体*/
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",1*/
- 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
- 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"二",2*/
- 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"三",3*/
- 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
- 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*"四",4*/
- 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
- 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*"五",5*/
- 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
- 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,/*"六",6*/
- 0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,/*"七",7*/
- 0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,/*"八",8*/
- 0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
- 0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,/*"九",9*/
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"十",10*/
- 0x00,0x20,0x10,0x08,0x94,0xA7,0x44,0x44,0x44,0xA4,0x94,0x0C,0x00,0x00,0x00,0x00,
- 0x02,0x02,0x01,0x01,0x20,0x24,0x24,0x44,0x48,0x88,0x10,0x01,0x01,0x02,0x02,0x00,/*"冬",11*/
- 0x00,0xFE,0x22,0x22,0xFE,0x40,0x48,0x48,0x7F,0x48,0x48,0x48,0x7F,0x48,0x48,0x00,
- 0x80,0x7F,0x02,0x82,0xFF,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,/*"腊",12*/
- 0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,
- 0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"正",13*/
- 0x08,0x08,0x89,0xEA,0x18,0x88,0x00,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
- 0x02,0x01,0x00,0xFF,0x01,0x86,0x40,0x20,0x18,0x07,0x40,0x80,0x40,0x3F,0x00,0x00,/*"初",14*/
- 0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x00,
- 0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"廿",15*/
- 0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
- 0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,/*"月",16*/
- 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,/*"日",17*/
- 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00,0x00,
- 0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,0x00,0x00,/*"星",18*/
- 0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
- 0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,0x00,0x00,/*"期",19*/
- };
- /**************** 开机LOGO:全屏大字【中】 32*122 左右屏各61列 ****************/
- code uchar logo_left[4][61] = {
- {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},
- {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},
- {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},
- {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},
- };
- code uchar logo_right[4][61] = {
- {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},
- {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},
- {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},
- {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},
- };
- /*-------- 延时函数 --------*/
- void Delay_us(uint us)
- {
- while(us--)
- {
- _nop_(); _nop_(); _nop_(); _nop_();
- _nop_(); _nop_(); _nop_(); _nop_();
- }
- }
- void Delay_ms(uint ms)
- {
- uint i,j;
- for(i=ms;i>0;i--)
- for(j=1000;j>0;j--);
- }
- /*============================================================
- SED1520 底层: 写命令
- ============================================================*/
- void SED1520_WriteCmd(uchar cs, uchar cmd)
- {
- LCD_A0 = 0;
- LCD_RW = 0;
- if(cs == 0) LCD_E1 = 1; else LCD_E2 = 1;
- LCD_DATA = cmd;
- Delay_us(20);
- if(cs == 0) LCD_E1 = 0; else LCD_E2 = 0;
- Delay_us(20);
- }
- /*============================================================
- SED1520 底层: 写数据
- ============================================================*/
- void SED1520_WriteData(uchar cs, uchar dat)
- {
- LCD_A0 = 1;
- LCD_RW = 0;
- if(cs == 0) LCD_E1 = 1; else LCD_E2 = 1;
- LCD_DATA = dat;
- Delay_us(20);
- if(cs == 0) LCD_E1 = 0; else LCD_E2 = 0;
- Delay_us(20);
- }
- /*============================================================
- 屏自测:全开(0xFF) → 延时 → 全灭(0x00)
- ============================================================*/
- //void LCD_TestScreen(uchar code *cn)
- void LCD_TestScreen()
- {
- uchar page, col;
- // uchar i,j;
- //===== 屏全开测试,全部点亮黑点 =====
- /* for(page = 0; page < 2; page++)
- {
- SED1520_WriteCmd(0, 0xB8 + page);
- SED1520_WriteCmd(0, 0x00);
- // SED1520_WriteCmd(0, 0x10); //列高4位=0
- for(col = 0; col < 8; col++)
- {
- Delay_ms(100);
- // SED1520_WriteData(0, 0x02);
- SED1520_WriteData(0, cn[0]);
- //全屏黑停留0.5秒
- }
- // SED1520_WriteCmd(1, 0xB8 + page);//0左边 1右边
- // SED1520_WriteCmd(1, 0x00);
- // for(col = 0; col < 1; col++)
- // {
- // SED1520_WriteData(1, 0xFF);
- // Delay_ms(10); //全屏黑停留0.5秒
- // }
- }
- Delay_ms(500); */ //全屏黑停留0.5秒
- //===== 屏全灭测试,全部清掉黑点 =====
- /* for(page = 0; page < 4; page++)
- {
- SED1520_WriteCmd(0, 0xB8 + page);
- SED1520_WriteCmd(0, 0x00);
- for(col = 0; col < 61; col++)
- SED1520_WriteData(0, 0x00);
- SED1520_WriteCmd(1, 0xB8 + page);
- SED1520_WriteCmd(1, 0x00);
- for(col = 0; col < 61; col++)
- SED1520_WriteData(1, 0x00);
- }
- Delay_ms(500); */
- for(page = 0; page < 2; page++)
- {
- SED1520_WriteCmd(0, 0xB8 +page);//片地址
- SED1520_WriteCmd(0, 0x10);//列地址
- for(col = 0; col < 61; col++)
- {
- SED1520_WriteData(0, 0xFF);
- Delay_ms(10); //全屏黑停留0.5秒
- }
- // SED1520_WriteCmd(1, 0xB8 + page);
- // SED1520_WriteCmd(1, 0x00);
- // for(col = 0; col < 61; col++)
- // SED1520_WriteData(1, 0xFF);
- // Delay_ms(1000); //全屏黑停留0.5秒
- }
- // Delay_ms(500); //全屏黑停留0.5秒
- }
- /***********************************************************************
- 函数功能:指定位置显示8*16的字符
- 12864屏 colcol列0~15,page行0~3 fb带表反白显示,fb=非0是反白显示,fb=0正常显示
- 19264屏 colcol列0~23,page行0~3 fb带表反白显示,fb=非0是反白显示,fb=0正常显示
- ************************************************************************/
- /* uchar i,j;
- for(i=0;i<2;i++) //i=0上半8行;i=1下半8行
- {
- SED1520_WriteCmd(0, 0xB8 + i); //设置硬件页
- SED1520_WriteCmd(0, 0x10); //列高4位
- SED1520_WriteCmd(0, 0x00); //列低4位,起始列=0
- for(j=0;j<8;j++)
- {
- SED1520_WriteData(0, cn[2]);
- }
- }
- }
- /*============================================================
- 显示开机LOGO 大字【中】
- ============================================================*/
- void LCD_ShowLogo(void)
- {
- uchar page,col;
- for(page=0;page<4;page++)
- {
- //左半屏 cs=0 E1
- SED1520_WriteCmd(0,0xB8+page);
- SED1520_WriteCmd(0,0x00);
- for(col=0;col<61;col++)
- {
- SED1520_WriteData(0,logo_left[page ][col]);
- }
- //右半屏 cs=1 E2
- SED1520_WriteCmd(1,0xB8+page);
- SED1520_WriteCmd(1,0x00);
- for(col=0;col<61;col++)
- {
- SED1520_WriteData(1,logo_right[page ][col]);
- }
- }
- }
- /*============================================================
- LCD初始化
- ============================================================*/
- void LCD_Init(void)
- {
- /* P2 数据总线推挽输出 */
- P2M0 = 0xFF; P2M1 = 0x00;
- /* P3.5 E1, P3.6 E2, P3.7 RW 推挽 */
- P3M0 |= (1<<5)|(1<<6)|(1<<7);
- P3M1 &= ~((1<<5)|(1<<6)|(1<<7));
- /* P4.1 A0 推挽 */
- P4M0 |= (1<<1);
- P4M1 &= ~(1<<1);
- /* P5.1 RES 推挽 */
- P5M0 |= (1<<1);
- P5M1 &= ~(1<<1);
- // DS1302 P1口
- P1M0 |= (1<<5)|(1<<7);
- P1M1 &= ~((1<<5)|(1<<7));
- DS_SCLK = 0;
- DS_CE = 0;
- DS_IO = 0;
- LCD_E1 = 0;
- LCD_E2 = 0;
- LCD_RW = 0;
- LCD_A0 = 0;
- //硬件复位 SED1520
- LCD_RES = 0;
- Delay_ms(30);
- LCD_RES = 1;
- Delay_ms(80);
- SED1520_WriteCmd(0, 0xAF); //开显示左屏
- Delay_ms(10);
- SED1520_WriteCmd(1, 0xAF); //开显示右屏
- Delay_ms(10);
- }
- /*============================================================
- 全屏清除
- ============================================================*/
- void LCD_Clear(void)
- {
- uchar page, col;
- for(page = 0; page < 4; page++)
- {
- SED1520_WriteCmd(0, 0xB8 + page);
- SED1520_WriteCmd(0, 0x00);
- for(col = 0; col < 61; col++)
- SED1520_WriteData(0, 0x00);
- SED1520_WriteCmd(1, 0xB8 + page);
- SED1520_WriteCmd(1, 0x00);
- for(col = 0; col < 61; col++)
- SED1520_WriteData(1, 0x00);
- }
- }
- /************************ DS1302 驱动 ************************/
- void DS1302_IO_Set(bit dir)
- {
- if(dir)
- {
- P1M0 &= ~(1<<5);
- P1M1 |= (1<<5);
- }
- else
- {
- P1M0 |= (1<<5);
- P1M1 &= ~(1<<5);
- }
- }
- void DS1302_WriteByte(uchar dat)
- {
- uchar i;
- DS1302_IO_Set(0);
- for(i=0;i<8;i++)
- {
- DS_SCLK = 0;
- Delay_us(5);
- DS_IO = dat & 0x01;
- Delay_us(5);
- dat >>= 1;
- Delay_us(5);
- DS_SCLK = 1;
- Delay_us(5);
-
-
- }
- }
- uchar DS1302_ReadByte(void)
- {
- uchar i,dat=0;
- DS1302_IO_Set(1);
- for(i=0;i<8;i++)
- {
- dat >>= 1;
- //Delay_us(5);
- DS_SCLK = 0;
- Delay_us(5);
- DS_SCLK = 1;
- Delay_us(5);
- if(DS_IO)
- //
- dat |= 0x80;
- // Delay_us(5);
- DS_SCLK = 0;
- Delay_us(5);
- }
- return dat;
- }
- void DS1302_Write(uchar addr, uchar dat)
- {
- DS_CE = 0;
- _nop_();
- DS_SCLK = 0;
- _nop_();
- DS_CE = 1;
- _nop_();
- DS1302_WriteByte(addr);
- Delay_us(20);
- DS1302_WriteByte(dat);
- Delay_us(5);
- DS_CE = 0;
- }
- uchar DS1302_Read(uchar addr)
- {
- uchar dat;
- DS_CE = 0;
- _nop_();
- DS_SCLK = 0;
- _nop_();
- DS_CE = 1;
- _nop_();
- DS1302_WriteByte(addr);
- Delay_us(5);
- dat = DS1302_ReadByte();
- Delay_us(5);
- DS_CE = 0;
- Delay_us(5);
- return dat;
- }
- uchar BCD2DEC(uchar bcd)
- {
- return ((bcd>>4)*10)+(bcd&0x0F);
- }
- uchar DEC2BCD(uchar dec)
- {
- return ((dec/10)<<4)|(dec%10);
- }
- void DS1302_ReadTime(void)
- {
- sec = BCD2DEC(DS1302_Read(0x81));
- // sec = BCD2DEC(00100101);
- Delay_us(5);
- min = BCD2DEC(DS1302_Read(0x83));
- // min = BCD2DEC(00000101);
- Delay_us(5);
- hour = BCD2DEC(DS1302_Read(0x85));
- Delay_us(5);
- day = BCD2DEC(DS1302_Read(0x87));
- Delay_us(5);
- month= BCD2DEC(DS1302_Read(0x89));
- Delay_us(5);
- week = BCD2DEC(DS1302_Read(0x8B));
- Delay_us(5);
- year = BCD2DEC(DS1302_Read(0x8D));
- }
- void DS1302_SetTime(uchar y,uchar m,uchar d,uchar w,uchar h,uchar mi,uchar s)
- {
- DS1302_Write(0x8E,0x00);
- Delay_us(5);
- DS1302_Write(0x80,DEC2BCD(s));
- Delay_us(5);
- DS1302_Write(0x82,DEC2BCD(mi));
- Delay_us(5);
- DS1302_Write(0x84,DEC2BCD(h));
- Delay_us(5);
- DS1302_Write(0x86,DEC2BCD(d));
- Delay_us(5);
- DS1302_Write(0x88,DEC2BCD(m));
- Delay_us(5);
- DS1302_Write(0x8A,DEC2BCD(w));
- Delay_us(5);
- DS1302_Write(0x8C,DEC2BCD(y));
- Delay_us(5);
- DS1302_Write(0x8E,0x80);
- }
- /************************ 8*16纵向字库 ************************/
- code uchar F8X16[][16] = {
- //0
- {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
- //1
- {0x00,0x00,0x00,0x00,0x84,0x42,0xFE,0x7F,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00},
- //2
- {0x00,0x00,0x74,0x1D,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x0C,0x18,0x00,0x00},
- //3
- {0x00,0x00,0x44,0x10,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
- //4
- {0x00,0x00,0x1F,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0xFE,0x7F,0x10,0x08,0x00,0x00},
- //5
- {0x00,0x00,0x44,0x10,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7E,0x1F,0x00,0x00},
- //6
- {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x78,0x1C,0x00,0x00},
- //7
- {0x00,0x00,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7E,0x1F,0x00,0x00},
- //8
- {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x82,0x41,0x7C,0x1E,0x00,0x00},
- //9
- {0x00,0x00,0x7C,0x1E,0x82,0x41,0x82,0x41,0x82,0x41,0x86,0x43,0x7C,0x1E,0x00,0x00},
- //10:空格
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- //11:冒号 :
- {0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},
- //12:减号 -
- {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
- //13:周
- {0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00},
- };
- void LCD_PutChar(uchar page,uchar x,uchar ch_idx)
- {
- uchar i,cs,col;
- if(x < 61)
- {
- cs = 0;
- col = x;
- }
- else
- {
- cs = 1;
- col = x - 61;
- }
- SED1520_WriteCmd(cs, 0xB8 + page);
- SED1520_WriteCmd(cs, 0x00 + col);
- for(i=0;i<8;i++)
- {
- SED1520_WriteData(cs, F8X16[ch_idx][ i]);
- }
- SED1520_WriteCmd(cs, 0xB8 + page + 1);
- SED1520_WriteCmd(cs, 0x00 + col);
- for(i=0;i<8;i++)
- {
- SED1520_WriteData(cs, F8X16[ch_idx][i+8]);
- }
- }
- //void Disp_8x16(uchar x, uchar y, uchar code *cn)
- //void Disp_8x16(uchar z,uchar x,uchar y,uchar code *cn)//z页 x左右选择 Y列地址
- void Disp_8x16(uchar z,uchar x,uchar y,uchar code *cn)//z页 x左右选择 Y列地址
- // void Disp_8x16()
- {
- uchar page1, col1;
- for(page1 = 0; page1 < 2; page1++)
- {
- SED1520_WriteCmd(x, 0xB8 +page1+z);//片地址
- SED1520_WriteCmd(x, 0x00+y);//列地址
- for(col1 = 0; col1 < 8; col1++)
- {
- SED1520_WriteData(x,cn[page1*8+col1]);
- Delay_ms(1); //全屏黑停留0.5秒
-
- }
- }
- }
- void Disp_16x16(uchar z,uchar x,uchar y,uchar code *cn)//
- // void Disp_8x16()
- {
- uchar page1, col1;
- for(page1 = 0; page1 < 2; page1++)
- {
- SED1520_WriteCmd(x, 0xB8 +page1+z);//片地址
- SED1520_WriteCmd(x, 0x00+y);//列地址
- for(col1 = 0; col1 < 16; col1++)
- {
- SED1520_WriteData(x,cn[page1*16+col1]);
- Delay_ms(1); //全屏黑停留0.5秒
-
- }
- }
- }
- void LCD_ShowNum(uchar page,uchar x,uchar num)
- {
- uchar hi,lo;
- hi = num / 10;
- lo = num % 10;
- LCD_PutChar(page, x, hi);
- LCD_PutChar(page, x+8, lo);
- }
- /************************ 主函数 ************************/
- void main(void)
- {
- LCD_Init();
- P1M0 = 0Xff;
- P1M1=0X00;
- // Delay_ms(100);
- // LCD_TestScreen(); //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
- //
- LCD_Clear();
- // LCD_ShowLogo(); //开机显示【中】LOGO
- // Delay_ms(2000); //LOGO停留2秒
- // LCD_Clear();
- DS1302_SetTime(26,10,06,2,12,00,00);
- //Disp_8x16(ZM_8x16[2]);
- // LCD_TestScreen();
- Delay_ms(500);
-
-
- // LCD_TestScreen(ZM_8x16[4]); //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
- // LCD_TestScreen(); //新增:屏自检:全屏黑0.5s -> 全屏清0.5s
- DS1302_ReadTime();
- // sec=53;
- //hour=12;
- // min=30;
- // DS1302_ReadTime(void);
- // 第一行page0~1:YY-MM-DD 周X
- // LCD_ShowNum(0,0,year);
- // LCD_PutChar(0,16,12); // '-'
- // LCD_ShowNum(0,24,month);
- // LCD_PutChar(0,40,12); // '-'
- // LCD_ShowNum(0,48,day);
- // LCD_PutChar(0,64,10); //空格
- // LCD_PutChar(0,72,13); //周
- // LCD_ShowNum(0,80,week);
- // 第二行page2~3:HH:MM:SS
- // LCD_ShowNum(2,0,hour);
- // LCD_PutChar(2,16,11); // :
- // LCD_ShowNum(2,24,min);
- // LCD_PutChar(2,40,11); // :
- // LCD_ShowNum(2,48,sec);
-
- // Disp_8x16(ZM_8x16[2]);
- LCD_Clear();
- Delay_ms(1000);
- Disp_8x16(0,0,0,ZM_8x16[2]);//页/ 左右/列地址
- Disp_8x16(0,0,8,ZM_8x16[0]);
- Disp_8x16(0,0,16,ZM_8x16[2]);
- Disp_8x16(0,0,24,ZM_8x16[6]);
-
- Disp_8x16(0,0,32,ZM_8x16[10]);
- Disp_8x16(0,0,40,ZM_8x16[1]);
- Disp_8x16(0,0,48,ZM_8x16[0]);
- Disp_8x16(0,0,56,ZM_8x16[10]);
- Disp_8x16(0,1,0,ZM_8x16[ day/10]);
- Disp_8x16(0,1,8,ZM_8x16[day%10]);
- // Disp_8x16(1,20,ZM1_8x16[14]);
- // Disp_8x16(1,30,ZM1_8x16[5]);
- Disp_16x16(0,1,16,ZM_16x16[18]);
- Disp_16x16(0,1,32,ZM_16x16[19]);
- // Disp_16x16(0,1,48,ZM_16x16[week]);
- Disp_8x16(0,1,48,ZM1_8x16[week]);
- Disp_8x16(2,0,0,ZM_8x16[hour/10]);
- Disp_8x16(2,0,8,ZM_8x16[hour%10]);
- Disp_8x16(2,0,16,ZM1_8x16[11]);
- Disp_8x16(2,0,24,ZM_8x16[ min/10]);
- Disp_8x16(2,0,32,ZM_8x16[ min%10]);
- Disp_8x16(2,0,40,ZM1_8x16[11]);
- Disp_8x16(2,0,48,ZM_8x16[sec/10]);
- Disp_8x16(2,0,56,ZM_8x16[sec%10]);
- Disp_8x16(2,1,34,ZM_8x16[14]);
- Disp_8x16(2,1,17,ZM_8x16[2]);
- Disp_8x16(2,1,25,ZM_8x16[2]);
-
-
- while(1)
- {
- Disp_8x16(2,0,0,ZM_8x16[hour/10]);
- Disp_8x16(2,0,8,ZM_8x16[hour%10]);
- Disp_8x16(2,0,16,ZM1_8x16[11]);
- Disp_8x16(2,0,24,ZM_8x16[ min/10]);
- Disp_8x16(2,0,32,ZM_8x16[ min%10]);
- Disp_8x16(2,0,40,ZM1_8x16[11]);
- Disp_8x16(2,0,48,ZM_8x16[sec/10]);
- Disp_8x16(2,0,56,ZM_8x16[sec%10]);
- Disp_8x16(2,1,34,ZM_8x16[14]);
- Disp_8x16(2,1,17,ZM_8x16[2]);
- Disp_8x16(2,1,25,ZM_8x16[2]);
- }
-
- // Disp_8x16();
- }
复制代码
|