51单片机定时器中断问题,单个数码管间隔1秒一次显示0到9。 5
#include<reg52.h>#defineucharunsignedcharucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0...
#include<reg52.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*数码管段编码*/
int tt;
void delay(int);
void main()
{
int i;
TMOD=0x01;/*设置定时器0为工作方式1*/
TH0=(65536-50000)/256;/*赋初值*/
TL0=(65536-50000)%256;
EA=1;/*开总中断*/
ET0=1;/*开T0断*/
TR0=1;/*启动T0*/
P1=0x01;/*位选数码管*/
while(1)
{
if(tt==20)/*延时20次50ms,即1秒*/
{
tt=0;
if(i==10)
{i=0;} // 依次显示数码管0到9
P0=table[i];
i++;
delay(500);
}
}
}
void delay(int z)
{
int x,y;
for(x=200;x>0;x--)
for(y=z;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;/*重装初值*/
TL0=(65536-50000)%256;
tt++;
}
为什么有“delay(500);”时数码管一直显示0,而删去 “delay(500);”则程序正常? 展开
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*数码管段编码*/
int tt;
void delay(int);
void main()
{
int i;
TMOD=0x01;/*设置定时器0为工作方式1*/
TH0=(65536-50000)/256;/*赋初值*/
TL0=(65536-50000)%256;
EA=1;/*开总中断*/
ET0=1;/*开T0断*/
TR0=1;/*启动T0*/
P1=0x01;/*位选数码管*/
while(1)
{
if(tt==20)/*延时20次50ms,即1秒*/
{
tt=0;
if(i==10)
{i=0;} // 依次显示数码管0到9
P0=table[i];
i++;
delay(500);
}
}
}
void delay(int z)
{
int x,y;
for(x=200;x>0;x--)
for(y=z;y>0;y--);
}
void exter0() interrupt 1
{
TH0=(65536-50000)/256;/*重装初值*/
TL0=(65536-50000)%256;
tt++;
}
为什么有“delay(500);”时数码管一直显示0,而删去 “delay(500);”则程序正常? 展开
6个回答
展开全部
if(tt>=20)/
另外程序这样写是不行的,费劲啊
另外程序这样写是不行的,费劲啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
延时太大,等延时完成时TT>20,循环不能进行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
定时器中断就是用来代替延时delay的 你在加个delay,怎么可能会用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把500改成1就好了,1us为机器周期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询