level 7
少林六号卧底
楼主
我想用1602显示做一个电子钟,可是程序弄不对,大神帮我看看
这是主函数
#include<lcd_1602.h>
void write_sfm();
void dis_sfm(uchar,uchar,uchar);
void dis_nyr();
void init();
uchar count,ss,shi,feng,miao,shi1,feng1,miao1;
void main()
{
lcd1602init();
init();
while(1)
{
//dis_nyr();
dis_sfm(shi,feng,miao);
}
}
void t1() interrupt 3
{
TH1=0x4b;
TL1=0xff;
ss++;
}
void init()
{
TMOD=0x10;
IE=0X88;
TH1=0x4b;
TL1=0xff;
TR1=1;
}
void write_sfm()
{
if(ss==20)
{
ss=0;
miao++;
if(miao==60)
{
miao=0;
feng++;
if(feng==60)
{
feng=0;
shi++;
if(shi==23)
shi=0;
}
}
}
}
void dis_sfm(uchar shi,uchar feng,uchar miao)
{
write_sfm();
write_shu(11,1,miao%10);
write_shu(10,1,miao/10);
write_char(9,1,':');
write_shu(8,1,feng%10);
write_shu(7,1,feng/10);
write_char(6,1,':');
write_shu(5,1,shi%10);
write_shu(4,1,shi/10);
}
void dis_nyr()
{
write_shu(0,0,2);
write_shu(1,0,0);
write_shu(2,0,1);
write_shu(3,0,4);
write_char(4,0,'/');
write_shu(5,0,1);
write_shu(6,0,2);
write_char(7,0,'/');
write_shu(8,0,0);
write_shu(9,0,3);
write_string(13,0,"SUD");
}
1602的函数
#include<lcd_1602.h>
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
sbit du=P2^6;
sbit we=P2^7;
void lcd1602delay(uchar x)
{
uchar i,j,z;
for(i=x;i>0;i--)
for(j=18;j>0;j--)
for(z=152;z>0;z--);
}
void write_com(uchar com)
{
RS=0;
RW=0;
P0=com;
lcd1602delay(1);
EN=1;
lcd1602delay(1);
EN=0;
}
void write_date(uchar date)
{
RS=1;
RW=0;
P0=date;
lcd1602delay(1);
EN=1;
lcd1602delay(1);
EN=0;
}
void write_shu(uchar x,uchar y,uchar num)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
write_date(48+num);
}
void write_char(uchar x,uchar y,uchar num)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
write_date(num);
}
void write_string(uchar x,uchar y,uchar *s)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
while(*s)
{
write_date(*s);
s++;
}
}
void lcd1602init()
{
P0=0x00;
du=0;
we=0;
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
2014年12月03日 13点12分
1
这是主函数
#include<lcd_1602.h>
void write_sfm();
void dis_sfm(uchar,uchar,uchar);
void dis_nyr();
void init();
uchar count,ss,shi,feng,miao,shi1,feng1,miao1;
void main()
{
lcd1602init();
init();
while(1)
{
//dis_nyr();
dis_sfm(shi,feng,miao);
}
}
void t1() interrupt 3
{
TH1=0x4b;
TL1=0xff;
ss++;
}
void init()
{
TMOD=0x10;
IE=0X88;
TH1=0x4b;
TL1=0xff;
TR1=1;
}
void write_sfm()
{
if(ss==20)
{
ss=0;
miao++;
if(miao==60)
{
miao=0;
feng++;
if(feng==60)
{
feng=0;
shi++;
if(shi==23)
shi=0;
}
}
}
}
void dis_sfm(uchar shi,uchar feng,uchar miao)
{
write_sfm();
write_shu(11,1,miao%10);
write_shu(10,1,miao/10);
write_char(9,1,':');
write_shu(8,1,feng%10);
write_shu(7,1,feng/10);
write_char(6,1,':');
write_shu(5,1,shi%10);
write_shu(4,1,shi/10);
}
void dis_nyr()
{
write_shu(0,0,2);
write_shu(1,0,0);
write_shu(2,0,1);
write_shu(3,0,4);
write_char(4,0,'/');
write_shu(5,0,1);
write_shu(6,0,2);
write_char(7,0,'/');
write_shu(8,0,0);
write_shu(9,0,3);
write_string(13,0,"SUD");
}
1602的函数
#include<lcd_1602.h>
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P2^5;
sbit du=P2^6;
sbit we=P2^7;
void lcd1602delay(uchar x)
{
uchar i,j,z;
for(i=x;i>0;i--)
for(j=18;j>0;j--)
for(z=152;z>0;z--);
}
void write_com(uchar com)
{
RS=0;
RW=0;
P0=com;
lcd1602delay(1);
EN=1;
lcd1602delay(1);
EN=0;
}
void write_date(uchar date)
{
RS=1;
RW=0;
P0=date;
lcd1602delay(1);
EN=1;
lcd1602delay(1);
EN=0;
}
void write_shu(uchar x,uchar y,uchar num)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
write_date(48+num);
}
void write_char(uchar x,uchar y,uchar num)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
write_date(num);
}
void write_string(uchar x,uchar y,uchar *s)
{
if(y==0)
write_com(0x80+x);
else if(y==1)
write_com(0xc0+x);
while(*s)
{
write_date(*s);
s++;
}
}
void lcd1602init()
{
P0=0x00;
du=0;
we=0;
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
lcd1602delay(5);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}