单片机lcd1602液晶屏电子时钟C程序
/* 文件名 : 液晶 1602 显示.c * 描述 : 该程序实现了对液晶 1602 的控制。 * 创建人 : 东流,2009 年 4 月 10 日 * 版本号 : 2.0 */ #include #define uchar unsigned char #define uint unsigned int uint count,t; int shi=1,fen=11,miao=22,nian=12,yue=7,ri=1; uchar shijian16=“time 00-00-00 t“,shijian116=“date 00-00-00 “;/这三个引脚参考资料 sbit E=P27; /1602 使能引脚 sbit RW=P26; /1602 读写引脚 sbit RS=P25; /1602 数据/命令选择引脚 sbit LE = P37;sbit key1 = P32; /小时修改建 sbit key2 = P33; /分钟修改键 sbit key3 = P34; /显示选择键/* 名称 : delay() * 功能 : 延时,延时时间大概为 5US。 * 输入 : 无 * 输出 : 无 */void delay() uint n=250;while(n-); /* 名称 : bit Busy(void) * 功能 : 这个是一个读状态函数,读出函数是否处在忙状态 * 输入 : 输入的命令值 * 输出 : 无 */ bit Busy(void) bit busy_flag = 0;RS = 0;RW = 1;E = 1;delay();busy_flag = (bit)(P0 E = 0;return busy_flag; /* 名称 : wcmd(uchar del) * 功能 : 1602 命令函数 * 输入 : 输入的命令值 * 输出 : 无 */ void wcmd(uchar del) while(Busy();RS = 0;RW = 0;E = 0;delay();P0 = del;delay();E = 1;delay();E = 0; /* 名称 : wdata(uchar del) * 功能 : 1602 写数据函数 * 输入 : 需要写入 1602 的数据 * 输出 : 无 */void wdata(uchar del) while(Busy();RS = 1;RW = 0;E = 0;delay();P0 = del;delay();E = 1;delay();E = 0; /* 名称 : L1602_init() * 功能 : 1602 初始化,请参考 1602 的资料 * 输入 : 无 * 输出 : 无 */ void L1602_init(void) wcmd(0x38);wcmd(0x0c);wcmd(0x06);wcmd(0x01); void timeInit() TMOD = 0X01; /定义定时器 1 工作方式 16 位定时 c/t 选为定时器 GATE 选 TR1 控制TL0 = (65536-10000)%256;TH0 = (65536-10000)/256;TR0=1;EA=1;ET0=1; void timeint() interrupt 1 TL0 = (65536-10000)%256;TH0 = (65536-10000)/256;count+; /*时间日期设定 */ void shijianxian() if(count>=100)miao+;count=0;if(miao>=60)fen+;miao=0;if(fen>=60)shi+;fen=0;if(shi>=24) ri+;shi=0;if(ri>30)yue+;ri=1;if(yue>12)nian+;yue=1;if(nian=99)nian=0;if(key1=0)if(key1=0)if(shi>23) shi=0;delay();if(key3=0)if(key3=0)if(shi59) fen=0;delay();if(key3=0)if(key3=0)if(fen=6) t=0;delay();riqi();for(i=0;i<16;i+)wcmd(0xc0+i);wdata(shijiani);wcmd(0x80+i);wdata(shijian1i);