单片机lcd液晶屏电子时钟C程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机lcd液晶屏电子时钟C程序
————————————————————————————————作者:————————————————————————————————日期:
/********************************************************************
* 文件名:液晶1602显示.c
* 描述: 该程序实现了对液晶1602的控制。

* 创建人:东流,2009年4月10日
* 版本号:2.0
***********************************************************************/ #include<reg52.h>
#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 shijian[16]={"time 00-00-00 t"},shijian1[16]={"date 00-00-00 "};
//这三个引脚参考资料
sbit E=P2^7; //1602使能引脚
sbit RW=P2^6; //1602读写引脚
sbit RS=P2^5; //1602数据/命令选择引脚
sbit LE = P3^7;
sbit key1 = P3^2; //小时修改建
sbit key2 = P3^3; //分钟修改键
sbit key3 = P3^4; //显示选择键
/********************************************************************
* 名称: delay()
* 功能: 延时,延时时间大概为5US。

* 输入: 无
* 输出: 无
***********************************************************************/
void delay()
{
uint n=250;
while(n--);
}
/********************************************************************
* 名称: bit Busy(void)
* 功能: 这个是一个读状态函数,读出函数是否处在忙状态
* 输入: 输入的命令值
* 输出: 无
***********************************************************************/ bit Busy(void)
{
bit busy_flag = 0;
RW = 1;
E = 1;
delay();
busy_flag = (bit)(P0 & 0x80);
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();
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)&((t%6)==0))
{
delay();
if((key1==0)&((t%6)==0))
{
shi++;
if(shi>23) shi=0;
}
delay();
}
if((key3==0)&((t%6)==0))
{
delay();
if((key3==0)&((t%6)==0))
{
shi--;
if(shi<0) shi=23;
}
}
if((key1==0)&((t%6)==1))
{
delay();
if((key1==0)&((t%6)==1))
{
fen++;
if(fen>59) fen=0;
}
delay();
}
if((key3==0)&((t%6)==1))
{
delay();
if((key3==0)&((t%6)==1))
{
fen--;
if(fen<0) fen=59;
}
delay();
}
if((key1==0)&((t%6)==2))
{
delay();
if((key1==0)&((t%6)==2)) yue++;
delay();
}
if((key1==0)&((t%6)==3))
{
delay();
if((key1==0)&((t%6)==3)) ri++;
delay();
}
}
/******************************
****时间显示
*******************************/
void shijianxian1()
{
shijian[6]=shi/10+48;
shijian[7]=shi%10+48;
shijian[9]=fen/10+48;
shijian[10]=fen%10+48;
shijian[12]=miao/10+48;
shijian[13]=miao%10+48;
shijian[8]=45;
shijian[11]=45;
shijian[15]=t+48;
}
/******************************
****日期显示
*******************************/
void riqi()
{
shijian1[6]=nian/10+48;
shijian1[7]=nian%10+48;
shijian1[9]=yue/10+48;
shijian1[10]=yue%10+48;
shijian1[12]=ri/10+48;
shijian1[13]=ri%10+48;
shijian1[8]=45;
shijian1[11]=45;
}
/********************************************************************
* 名称: Main()
* 功能: 主函数
* 输入: 无
* 输出: 无
***********************************************************************/ void Main()
{
uint i;
L1602_init();
timeInit();
while(1)
{
shijianxian();
shijianxian1();
if(key2==0)
{
delay();
if( (key2==0))
t++;
if(t>=6) t=0;
delay();
}
riqi();
for(i=0;i<16;i++)
{
wcmd(0xc0+i);
wdata(shijian[i]);
wcmd(0x80+i);
wdata(shijian1[i]);
}
}
}。

相关文档
最新文档