基于51单片机的简单时间显示程序,只能显示时间而不能调节时间。求大神指出错误
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
//sbit key4=P3^3;
sbit key=P3^7;
void display();
void delayms(uint z);
void keysscan();
void init();
void write_com(uchar com);
void write_data(uchar date);
uchar num,num1,num2;num3,num4;
uchar sshi,sge,fshi,fge,mshi,mge;
uint temp=0;
void init() //初始化
{
dula=0;
wela=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_com(uchar com) //写指令
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void delayms(uint z) //延时
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display() //液晶屏显示
{
write_com(0x80);
write_data(sshi+48);
delayms(1);
write_com(0x80+0x01);
write_data(sge+48);
delayms(1);
write_com(0x80+0x02);
write_data(':');
delayms(1);
write_com(0x80+0x03);
write_data(fshi+48);
delayms(1);
write_com(0x80+0x04);
write_data(fge+48);
delayms(1);
write_com(0x80+0x05);
write_data(':');
delayms(1);
write_com(0x80+0x06);
write_data(mshi+48);
delayms(1);
write_com(0x80+0x07);
write_data(mge+48);
delayms(1);
}
void keysscan()
{
key=0;
if(key1==0)
{
delayms(5);
if(key1==0);
{
while(!key1);
temp++;
TR0=0;
write_com(0x0f);
}
}
switch(temp)
{
case 1:
if(key2==0)
{
delayms(5);
if(key2==0);
{
while(!key2)
num1++;
if(num1==60)num1=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3)
num1--;
if(num1==-1)num1=0;
}
}
break;
case 2:
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num2++;
if(num2==60)num2=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num2--;
if(num2==-1)num2=0;
}
}
}
break;
case 3:
{ if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num3++;
if(num3==60)num3=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num3--;
if(num3==-1)num3=0;
}
}
}
break;
case 4:
{
temp=0;
TR0=1;
write_com(0x08);
}
}
}
void T0_time()interrupt 1 //时钟0中断
{
num++;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
if(num==20)
{
num=0;
num1++;
if(num1==60)
{
num1=0;
num2++;
}
mshi=num1/10;
mge=num1%10;
if(num2==60)
{
num2=0;
num3++;
}
fshi=num2/10;
fge=num2%10;
if(num3==24)
{
num3=0;
// num4++;
}
sshi=num3/10;
sge=num3%10;
//if(num4)
display();
}
}
void main()
{
init();
while(1)
{
keysscan();
}
}
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
//sbit key4=P3^3;
sbit key=P3^7;
void display();
void delayms(uint z);
void keysscan();
void init();
void write_com(uchar com);
void write_data(uchar date);
uchar num,num1,num2;num3,num4;
uchar sshi,sge,fshi,fge,mshi,mge;
uint temp=0;
void init() //初始化
{
dula=0;
wela=0;
TMOD=0x01;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void write_com(uchar com) //写指令
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void delayms(uint z) //延时
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void display() //液晶屏显示
{
write_com(0x80);
write_data(sshi+48);
delayms(1);
write_com(0x80+0x01);
write_data(sge+48);
delayms(1);
write_com(0x80+0x02);
write_data(':');
delayms(1);
write_com(0x80+0x03);
write_data(fshi+48);
delayms(1);
write_com(0x80+0x04);
write_data(fge+48);
delayms(1);
write_com(0x80+0x05);
write_data(':');
delayms(1);
write_com(0x80+0x06);
write_data(mshi+48);
delayms(1);
write_com(0x80+0x07);
write_data(mge+48);
delayms(1);
}
void keysscan()
{
key=0;
if(key1==0)
{
delayms(5);
if(key1==0);
{
while(!key1);
temp++;
TR0=0;
write_com(0x0f);
}
}
switch(temp)
{
case 1:
if(key2==0)
{
delayms(5);
if(key2==0);
{
while(!key2)
num1++;
if(num1==60)num1=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3)
num1--;
if(num1==-1)num1=0;
}
}
break;
case 2:
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num2++;
if(num2==60)num2=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num2--;
if(num2==-1)num2=0;
}
}
}
break;
case 3:
{ if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
num3++;
if(num3==60)num3=0;
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
num3--;
if(num3==-1)num3=0;
}
}
}
break;
case 4:
{
temp=0;
TR0=1;
write_com(0x08);
}
}
}
void T0_time()interrupt 1 //时钟0中断
{
num++;
TH0=(65536-45872)/256;
TH1=(65536-45872)%256;
if(num==20)
{
num=0;
num1++;
if(num1==60)
{
num1=0;
num2++;
}
mshi=num1/10;
mge=num1%10;
if(num2==60)
{
num2=0;
num3++;
}
fshi=num2/10;
fge=num2%10;
if(num3==24)
{
num3=0;
// num4++;
}
sshi=num3/10;
sge=num3%10;
//if(num4)
display();
}
}
void main()
{
init();
while(1)
{
keysscan();
}
}
路过!
路过看见,支持一下!顶!顶!顶!
你key_scan里面的 num。每改变一次,都要写入一次,你们没有写入,要在num1或num2++之后加个display。