C语言程序 倒计时怎么不工作?此处按键 显示函数程序如何调用而又能中断显示正常呢? 20

#include<reg51.h>#include<intrins.h>#defineINT8Uunsignedchar#defineINT16Uunsignedints... #include<reg51.h>
#include<intrins.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit LED1=P1^0;
sbit K1=P3^2;
INT16U bai,shi ,ge ,second,num;
INT8U code DSY_CODE[]= // 共阳极数码管段码表
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; //段码
INT8U code Scan_BITs[]={0x04,0x02,0x01}; //位码
INT8U data disp_buff[]={0,0,0,};
INT16U count=100;
void init_timer();
//.... 延时函数.......
void delay(INT16U x)
{
INT8U t;while(x--) for(t=0;t<120;t++);
}

//----- 数据显示函数---------
void Show_Counts()
{ INT8U i;
disp_buff[2]=count/100; // ---分解COUNT计数值
disp_buff[1]=count%100/10;
disp_buff[0]=count%10;
if(disp_buff[2]==0) //高位为0时不显示
{ disp_buff[2]=10;
if(disp_buff[1]==0) disp_buff[1]=10;
}
//---数码管显示函数----
while(1)
{
for (i=0;i<3;i++)
{ TR0=1;
P0=0xFF; //暂时关闭段码
P2=Scan_BITs[i]; // 位码
P0=DSY_CODE[disp_buff[i]]; //段码
delay(25);
}
}
}
//---按键控制函数部分---------
void AJ()
{
if(K1==0)
{ delay(1) ; //消抖延时
if(K1==0)
{ while(!K1);// 按键松开?
init_timer();
TR0=1;
LED1=1;
Show_Counts();
}
}
}

// --定时函数部分-----------
void init_timer()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
// --中断服务函数部分---------
void T0_srv()interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{num=0;
count--; //有此句 方可倒计时开始
if(count==0)
{
TR0=0;
LED1=0;
P0=0x00;
P2=0x00;
}
}
}
//---主函数---------
void main()
{
num=0;
LED1=0;
while(1)
{
AJ();
}
}
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
磕蹦一颗牙
2015-01-06 · 超过13用户采纳过TA的回答
知道答主
回答量:66
采纳率:25%
帮助的人:20.3万
展开全部
确定调用了那个倒计时功能所在的函数?
追问
倒计时函数是  含在中断服务函数里,  按键控制函数一触发TR0=1, 应该可以倒计时开始呀, 这也是我的预计  但是结果是 100秒 不动。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式