做的DS12C887时钟 12864液晶 秒只能跳1秒就停
[复制链接]
做的DS12C887时钟 12864液晶 秒只能跳1秒就停 P0口接的12864液晶 P1口接的
大侠们帮我看一下是什么问题
#include <reg51.h> #define uchar unsigned char #define uint unsigned int /* 端口定义*/ #define LCD_data ;P0 //数据口 sbit LCDRS = ;P3^5; //寄存器选择输入 sbit LCDRW = ;P3^6; //液晶读/写控制 sbit LCDEN = ;P3^4; //液晶使能控制 sbit LCDPSB = ;P3^7; //串/并方式控制 sbit wela = ;P2^6; sbit dula = ;P2^7; sbit dddd=P2^5; sbit dscs=P2^0; sbit dsas=P2^1; sbit dsrw=P2^2; sbit dsds=P2^3; sbit dsirq=P2^4; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; uchar count,s1num,shi,fen,miao; uchar code dis1[] = {"2009-07-16::年"}; uchar code dis2[] = {"00: 00: 00"}; uchar code dis3[] = {"欢迎你来到MCU"}; void delay(uint x) { uint i,j; for(j=0;j<x;j++) for(i=0;i<110;i++); } void writecmd(uchar cmd) //写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码 { LCDRS = 0; LCDRW = 0; LCDEN = 0; ;P0 = cmd; delay(5); LCDEN = 1; delay(5); LCDEN = 0; } void writedat(uchar dat) //写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据 { LCDRS = 1; LCDRW = 0; LCDEN = 0; ;P0 = dat; delay(5); LCDEN = 1; delay(5); LCDEN = 0; }
void lcdpos(uchar X,uchar Y) //设定显示位置 { uchar pos; if (X==0) {X=0x80;} else if (X==1) {X=0x90;} else if (X==2) {X=0x88;} else if (X==3) {X=0x98;} pos = X+Y ; writecmd(pos); //显示地址 } void writesfm(uchar add,uchar date) //写时分秒 { uchar shi,ge; shi=date/10; ge=date%10; writecmd(0x90+add); writedat(0x30+shi); writedat(0x30+ge); } void lcdinit() //LCD初始化设定 { uchar i; wela=0; dula=0; LCDPSB = 1; //并口方式 writecmd(0x30); //基本指令操作 delay(5); writecmd(0x0C); //显示开,关光标 delay(5); writecmd(0x01); //清除LCD的显示内容 delay(5); lcdpos(0,1); //设置显示位置为第一行的第1个字符 for(i=0;i<14;i++) { writedat(dis1); delay(5); } lcdpos(1,2); //设置显示位置为第二行的第1个字符 for(i=0;i<10;i++) { writedat(dis2); //显示字符 delay(5); } lcdpos(2,1); //设置显示位置为第三行的第1个字符 for(i=0;i<13;i++) { writedat(dis3); //显示字符 delay(5); } }
void write_ds(uchar add,uchar date) //写887时钟写时序 { dscs=0; dsas=1; dsds=1; dsrw=1; P1=add; dsas=0; dsrw=0; P1=date; dsrw=1; dsas=1; dscs=1; } uchar read_ds(uchar addd) //读887带返回值的函数 { uchar ds_date; dscs=0; dsas=1; dsds=1; dsrw=1; P1=addd; dsas=0; dsds=0; P1=0xff; ds_date=P1; dsds=1; dsas=1; dscs=1; return ds_date; } main() // 主程序 { lcdinit(); //初始化LCD while(1) { miao=read_ds(0); writesfm(6,miao); } }
|