单片机编程出现问题 我现在只是让它能实现24小时的时钟 但是烧录程序后,8位数码管显示00-00-00,不会走动 10

P1段选P2位选程序如下#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintun... P1段选 P2位选 程序如下
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar shi,fen,miao;
uint n;
sbit buf0=P2^0;
sbit buf1=P2^1;
sbit buf2=P2^2;
sbit buf3=P2^3;
sbit buf4=P2^4;
sbit buf5=P2^5;
sbit buf6=P2^6;
sbit buf7=P2^7;
char code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint z);
void jishi();
void main()
{
TMOD=0x01;//设置定时器零为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}
void timer0() interrupt 1
{
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
n++;
jishi();
}
void jishi()
{
if(n==20)
{
n=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60);
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}
void delay(uint z)
{
int x,y;
for(x=z;z>0;z--)
for(y=5;y>0;y--);
}
展开
 我来答
wolf_lhy
2012-12-27 · TA获得超过6608个赞
知道大有可为答主
回答量:1090
采纳率:66%
帮助的人:537万
展开全部
你的主函数写的有问题,当然,其实你整个函数架构都写的不好,但是你描述的问题,是你的主函数有问题,看看你的主函数:

void main()
{
TMOD=0x01;//设置定时器零为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}

从第一句 TMOD = 0x01到最后一句:P1 = Tab[....]
执行了一次,这个程序就彻底完了,就是说,你的程序已经执行完了,不在执行了。
你没发现,所有的C语言程序都有While(1)或者for(;;)吗?

所以,你的主程序修改一下:
把显示放到while(1)里或者for(;;)

while(1)
{

P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}
这样这个程序就能永远的执行下去。
当然,结果能不能达到你的预期我不知道,我没仔细看,但是肯定不会只显示 00 -00 -00然后不动
零度JFC
2012-12-28 · TA获得超过708个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:119万
展开全部
void main()
{
TMOD=0x01;//设置定时器零为工作方式1
TH0=0x3C;
TL0=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1)
{
P1=Tab[shi/10%10];buf0=0;delay(1);buf0=1;
P1=Tab[shi%10];buf1=0;delay(1);buf1=1;
P1=0x40;buf2=0;delay(1);buf2=1;
P1=Tab[fen/10%10];buf3=0;delay(1);buf3=1;
P1=Tab[fen%10];buf4=0;delay(1);buf4=1;
P1=0x40;buf5=0;delay(1);buf5=1;
P1=Tab[miao/10%10];buf6=0;delay(1);buf6=1;
P1=Tab[miao%10];buf7=0;delay(1);buf7=1;
}
}

如果不加这个while(1){}的话,显示函数执行完后定时器会重新初始化,这样定时器永远不能连续的工作一秒,于是时间久不会走动,这就是问题所在了
delay函数的x删掉吧,省个变量,哈哈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyt18782
2012-12-28 · TA获得超过386个赞
知道小有建树答主
回答量:673
采纳率:0%
帮助的人:239万
展开全部
让他死循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式