C51 计时器 问题求助

来源:百度知道 编辑:UC知道 时间:2024/06/20 10:28:26
#include<reg52.h>
sbit duan=P3^3;//段选通端
sbit wei=P3^4;//位选通端
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表
table2[]={0x02,0x01,0x08,0x04,0x20,0x10,0x80,0x40};//0~7依次位码表
//以下是延时函数
void Delay(unsigned int i) //延时程序,i是形式参数
{
unsigned int j;
for(;i>0;i--) //变量i由实际参数传入一个值,因此i不能赋初值
for(j=0;j<125;j++)
{;}
}
//以下是主函数
void main()
{
unsigned char a;
unsigned int m,w,x,upbit,lowbit,hibit,b=0,cnt=60;
while(1)
{m=0;

while(m<cnt)

{

upbit=m/10; //提取十位
lowbit=m%10; //提取个位
m++;

if (m-1==0)
{ b=b+1;
w=b/10; //提取十位
hibit=b%10;

}
for(a=0;a<40;a++) //调整a的大小可改变计数的显示速度
{
duan=1;P0=table[w];duan=0;//qian位的段码
wei=1;P0=table2[4];wei=0; //百位的位选
Delay(5);
duan=1;P0=table[hibit];duan=0;//百位的段码

if (m-1==0)
{ b=b+1;
w=b/10; //提取十位
hibit=b%10;

}晕,你看嘛,当程序进入这里的时候,b已经被你自加1了,也就是说b=1,hibit取余的时候就去1;所以你应该吧w=b/10; //提取十位
hibit=b%10;这两行放这个if语句的外面

你把m++放在最后吧