LCD1602液晶显示器进行设置时钟程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
write(0x80+0x40+add);//设置add位地置
read(0x30+shi);//设置十位地置
read(0x30+ge);//设置个位地址
}
void key()//独立开关控制
{
if(K1==0)
{
delay(5);
if(K1==0)
{
K1num++;
while(!K1);//判断按键是否按下
}
}
}
}
}
void main()//主函数
{
init();//调用子函数
init1();//调用定时子函数
while(1)
{
key();
}
}
void init1()//定时子函数
{
TMOD=0x01;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;
TH0=(65536-50000)/256; //设置时间50ms
{
s++;
if(s==23)
s=0;
write_sfm(3,s);
write(0x80+0x40+3);//时地址
}
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!K3);
if(K1num==1) //K3控制时分秒减
{
m--m);
EP=1;
delay(5);
EP=0;
}
void read(uchar date)//写入指令函数
{
RS=1;//根据时序图来设置
P0=date;
delay(5);
EP=1;
delay(5);
EP=0;
}
void init()//初始化函数
{
RS=0;
EP=0;
RW=0;
write(0x38);//显示设置模式
sbit EP= P2^7;//使能信号
sbit K1=P3^0; //开关定义
sbitK2=P3^1;
sbit K3=P3^2;
uchar num,t;
uchar K1num;
char s,f,m;//可取负数
uchar code table[]="2007-8-4FRI";//日期显示
uchar code table1[]=" 00:00:00";//时间显示
if(K1num==1)//按一下调节秒
{
TR0=0;//关定时器
write(0x80+0x40+9);//找到秒位置
write(0x0f);//光标闪烁
}
}
if(K1num==2)
{
write(0x80+0x40+6);//再按一下调节分地址
}
if(K1num==3)//第三次按下调节时
{
write(0x80+0x40+3);
TL0=(65536-50000)%256;
}
void e() interrupt 1//定时器T0方式1中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==18)//一秒钟定时
{
t=0;
m++;
if(m==60)//秒设置
{
m=0;
f++;
if(f==60)//分设置
{
f=0;
s++;
if(s==24)//小时设置
{
s=0;
}
write_sfm(3,s);//时位数据读取
}
write_sfm(6,f);//分位数据读取
}
write_sfm(9,m);//秒位数据读取
}
}
write(0x0c);//显示开关控制
write(0x06);//光标设置
write(0x01);//清屏设置
write(0x80);//数据地址初始位
for(num=0;num<15;num++)//查table表数据
{
read(table[num]);//读取表中内容
delay(20);
}
write(0x80+0x40);//从新设置数据指针
/*用LCD1602液晶显示器进行设置时钟,有独立键盘调节时间程序*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS= P2^6;//数据/命令选择端(H/L)
sbit RW= P2^5;//读写/选择端(H/L)
}
if(K1num==4)//按四次回到正常计时
{
K1num=0;
write(0x0c);//光标不闪
TR0=1;
}
}
if(K1num!=0)//有按下
{
if(K2==0)//K2开关控制时分秒加
{
delay(5);
if(K2==0)//消抖
{
while(!K2);//松手
if(K1num==1) //秒调节
{
m++;
if(m==60)
m=0;
write_sfm(9,m);
write(0x80+0x40+9);//秒钟地址
}
if(K1num==2)//分钟调节
{
f++;
if(f==60)
f=0;
write_sfm(6,f);
write(0x80+0x40+6);//分钟地址
}
if(K1num==3)//小时调节
write(0x80+0x40+9);
}
if(K1num==2)
{
f--;
if(f==-1)
f=59;
write_sfm(6,f);
write(0x80+0x40+6);
}
if(K1num==3)
{
s--;
if(s==-1)
m=23;
write_sfm(3,s);
write(0x80+0x40+3);
for(num=0;num<11;num++)
{
read(table1[num]);//读取table1表中内容
delay(20);
}
}
void write_sfm(uchar add,uchar date) //时分秒函数设置
{
uchar shi ,ge;
shi=date/10; //取商
ge=date%10;//取余
void init1();//中断子函数
void delay(uint k)//延时函数
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void write(uchar com) //命令指令函数
{
RS=0;//根据时序图来设置
P0=com;
delay(5);
read(0x30+shi);//设置十位地置
read(0x30+ge);//设置个位地址
}
void key()//独立开关控制
{
if(K1==0)
{
delay(5);
if(K1==0)
{
K1num++;
while(!K1);//判断按键是否按下
}
}
}
}
}
void main()//主函数
{
init();//调用子函数
init1();//调用定时子函数
while(1)
{
key();
}
}
void init1()//定时子函数
{
TMOD=0x01;
EA=1;//开总中断
ET0=1;//开定时器中断
TR0=1;
TH0=(65536-50000)/256; //设置时间50ms
{
s++;
if(s==23)
s=0;
write_sfm(3,s);
write(0x80+0x40+3);//时地址
}
}
}
if(K3==0)
{
delay(5);
if(K3==0)
{
while(!K3);
if(K1num==1) //K3控制时分秒减
{
m--m);
EP=1;
delay(5);
EP=0;
}
void read(uchar date)//写入指令函数
{
RS=1;//根据时序图来设置
P0=date;
delay(5);
EP=1;
delay(5);
EP=0;
}
void init()//初始化函数
{
RS=0;
EP=0;
RW=0;
write(0x38);//显示设置模式
sbit EP= P2^7;//使能信号
sbit K1=P3^0; //开关定义
sbitK2=P3^1;
sbit K3=P3^2;
uchar num,t;
uchar K1num;
char s,f,m;//可取负数
uchar code table[]="2007-8-4FRI";//日期显示
uchar code table1[]=" 00:00:00";//时间显示
if(K1num==1)//按一下调节秒
{
TR0=0;//关定时器
write(0x80+0x40+9);//找到秒位置
write(0x0f);//光标闪烁
}
}
if(K1num==2)
{
write(0x80+0x40+6);//再按一下调节分地址
}
if(K1num==3)//第三次按下调节时
{
write(0x80+0x40+3);
TL0=(65536-50000)%256;
}
void e() interrupt 1//定时器T0方式1中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==18)//一秒钟定时
{
t=0;
m++;
if(m==60)//秒设置
{
m=0;
f++;
if(f==60)//分设置
{
f=0;
s++;
if(s==24)//小时设置
{
s=0;
}
write_sfm(3,s);//时位数据读取
}
write_sfm(6,f);//分位数据读取
}
write_sfm(9,m);//秒位数据读取
}
}
write(0x0c);//显示开关控制
write(0x06);//光标设置
write(0x01);//清屏设置
write(0x80);//数据地址初始位
for(num=0;num<15;num++)//查table表数据
{
read(table[num]);//读取表中内容
delay(20);
}
write(0x80+0x40);//从新设置数据指针
/*用LCD1602液晶显示器进行设置时钟,有独立键盘调节时间程序*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS= P2^6;//数据/命令选择端(H/L)
sbit RW= P2^5;//读写/选择端(H/L)
}
if(K1num==4)//按四次回到正常计时
{
K1num=0;
write(0x0c);//光标不闪
TR0=1;
}
}
if(K1num!=0)//有按下
{
if(K2==0)//K2开关控制时分秒加
{
delay(5);
if(K2==0)//消抖
{
while(!K2);//松手
if(K1num==1) //秒调节
{
m++;
if(m==60)
m=0;
write_sfm(9,m);
write(0x80+0x40+9);//秒钟地址
}
if(K1num==2)//分钟调节
{
f++;
if(f==60)
f=0;
write_sfm(6,f);
write(0x80+0x40+6);//分钟地址
}
if(K1num==3)//小时调节
write(0x80+0x40+9);
}
if(K1num==2)
{
f--;
if(f==-1)
f=59;
write_sfm(6,f);
write(0x80+0x40+6);
}
if(K1num==3)
{
s--;
if(s==-1)
m=23;
write_sfm(3,s);
write(0x80+0x40+3);
for(num=0;num<11;num++)
{
read(table1[num]);//读取table1表中内容
delay(20);
}
}
void write_sfm(uchar add,uchar date) //时分秒函数设置
{
uchar shi ,ge;
shi=date/10; //取商
ge=date%10;//取余
void init1();//中断子函数
void delay(uint k)//延时函数
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void write(uchar com) //命令指令函数
{
RS=0;//根据时序图来设置
P0=com;
delay(5);