求围观,求大神 咨询一个问题哈 我想写一个时钟程序,遇到两个问题,我自己写的程序如下#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^7;
sbit RW=P2^6;
sbit EN=P2^5;
uchar i,num;
char shi,fen,miao;
uchar code table1[]=" 2017-6-1 Thurs ";
uchar code table2[]=" 19:17:55 ";
void delay(uint t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=100;y>0;y--);
}
void write_com(uchar com) //写指令
{
RS=0;
RW=0;
P0=com;
EN=1;
delay(5);
EN=0;
}
void write_date(uchar date)//写字节
{
RS=1;
RW=0;
P0=date;
EN=1;
delay(5);
EN=0;
}
void init() //初始化函数
{
RW=0;
RS=0;
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_shijian(uchar address, uchar time) //显示两位时间
{
uchar shi,ge;
shi=time/10;
ge=time%10;
write_com(0x80+0x40+address);
write_date(0x30+shi);
write_date(0x30+ge);
}
void main()
{
init();
write_com(0x80+0x00);
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table2[num]);
delay(5);
}
while(1)
{
if(i==16)
{
i=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_shijian(4,shi);
}
write_shijian(7,fen);
}
write_shijian(10,miao);
}
}
}
void jishi() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}目前程序遇到两个问题 第一:装初值TH0=(65536-50000)/256;
TL0=(65536-50000)%256; 用的12M晶振 按道理i=20的时候恰好1S,但是实际设置i=20时 这里记一分钟手机秒表跑75s,所以把i调成16这是哪里出了问题呢? 第二 我设置的初值 19:17:55,当真正上电之后不是从55秒开始加的直接跳到19:17:00开始加,当秒加到59时 再加一下成了19:01:00了,其余的加法都是正常的进位,求大神指导一下程序哪里出了问题 我看了好久找不到毛病 求各位帮下忙哈 谢谢
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^7;
sbit RW=P2^6;
sbit EN=P2^5;
uchar i,num;
char shi,fen,miao;
uchar code table1[]=" 2017-6-1 Thurs ";
uchar code table2[]=" 19:17:55 ";
void delay(uint t)
{
uchar x,y;
for(x=t;x>0;x--)
for(y=100;y>0;y--);
}
void write_com(uchar com) //写指令
{
RS=0;
RW=0;
P0=com;
EN=1;
delay(5);
EN=0;
}
void write_date(uchar date)//写字节
{
RS=1;
RW=0;
P0=date;
EN=1;
delay(5);
EN=0;
}
void init() //初始化函数
{
RW=0;
RS=0;
EN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
TMOD=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_shijian(uchar address, uchar time) //显示两位时间
{
uchar shi,ge;
shi=time/10;
ge=time%10;
write_com(0x80+0x40+address);
write_date(0x30+shi);
write_date(0x30+ge);
}
void main()
{
init();
write_com(0x80+0x00);
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table2[num]);
delay(5);
}
while(1)
{
if(i==16)
{
i=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_shijian(4,shi);
}
write_shijian(7,fen);
}
write_shijian(10,miao);
}
}
}
void jishi() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
}目前程序遇到两个问题 第一:装初值TH0=(65536-50000)/256;
TL0=(65536-50000)%256; 用的12M晶振 按道理i=20的时候恰好1S,但是实际设置i=20时 这里记一分钟手机秒表跑75s,所以把i调成16这是哪里出了问题呢? 第二 我设置的初值 19:17:55,当真正上电之后不是从55秒开始加的直接跳到19:17:00开始加,当秒加到59时 再加一下成了19:01:00了,其余的加法都是正常的进位,求大神指导一下程序哪里出了问题 我看了好久找不到毛病 求各位帮下忙哈 谢谢