亲测有效!顺利通过课程设计!
有图有真相
#include
#define uchar unsigned char #define uint unsigned int sbit rs= P0^5; //寄存器类型,1表示数据寄存器,2表示指令寄存器 sbit rw = P0^6; //读写选择,1表示读,0表示写 sbit ep = P0^7; //读写使能,下降沿使能 sbit pcf8563_scl=P0^4; sbit pcf8563_sda=P0^3; sbit setup=P1^0; sbit shi=P1^1; sbit fen=P1^2; sbit led=P1^6;
uchar num[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}; //数字
uchar sg; uchar sd; uchar fg; uchar fd; uchar mg; uchar md; uchar ng;
uchar nd; uchar yg; uchar yd; uchar rg; uchar rd;
uchar hou=14; uchar min=30; uchar sec=0; uchar year=12; uchar mon=12; uchar day=12; uchar week=3; uchar number; bit busy;
void start_pcf8563(void);
void send_pcf8563_byte(void); void lcd_init(void);
void lcd_pos(uchar pos); void lcd_wdat(uchar dat); bit lcd_busy();
void display0(void); void display(void);
void stop_pcf8563(void);
void receive_pcf8563_byte(void); void spit_time(void); void update(void); void scan(void);
void delay(uchar ms);
void delay(uint t) //单位延时1ms,总延时1ms*t.(121为实验测试值) { uint i,j;
for(i=0;i bit lcd_busy() //判断LCD是否忙碌,1忙碌 { bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P2 & 0x80); ep = 0; return result; } void lcd_wcmd(uchar cmd) //写指令 { while(lcd_busy());//判断 LCD是否忙碌 rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P2 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_pos(uchar pos) //显示地址 { lcd_wcmd(pos | 0x80); } //写数据 void lcd_wdat(uchar dat) { while(lcd_busy());//判断 LCD是否忙碌 rs = 1; rw = 0; ep = 0; P2 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_wstr(const uchar *s) //写字符串 { unsigned char i = 0; while(s[i] != '\\0') { lcd_wdat(s[i]);// 显示字符 delay(250); i++; } } void lcd_init() //LCD初始化 { lcd_wcmd(0x3c); //功能设定 delay(1); lcd_wcmd(0x0c); //显示器开关 delay(1); lcd_wcmd(0x06); //设定进入模式 delay(1); lcd_wcmd(0x01); //清除显示屏,把光标移至左上角 delay(1); } void display0() //显示时钟背景 { lcd_pos(0x00); lcd_wstr(\ lcd_pos(0x04); lcd_wdat('-'); lcd_pos(0x07); lcd_wdat('-'); lcd_pos(0x46); lcd_wdat(':'); lcd_pos(0x49); lcd_wdat(':');