单片机6位数码管计数器程序问题

自己写了个51单片机0-999999计数器程序,基于STC12C5A60S2,用75HC573驱动数码管,程序问题为最后一位刷新速度很快,我想要它一秒计数一次,大家帮忙看下程序怎么改?
#include <reg52.H> //STC头文件
#define uchar unsigned char
#define uint unsigned int
#define timewe 3

sbit we = P2^7;
sbit du = P2^6;

uint temp,shiwan,wan,qian,bai,shi,ge;

uchar code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay (uint a) // 1ms延时程序(12MHz 10倍于51单片机速度时)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}

void display()
{
temp = 0;
while(1)
{
if(temp == 999999)
temp = 0;

shiwan = temp/100000;
wan = temp%100000/10000;
qian = temp%10000/1000;
bai = temp%1000/100;
shi = temp%100/10;
ge = temp%10;

du = 1;
P0 = duan[shiwan];
du = 0;
we = 1;
P0 = 0xfe;
we = 0;
delay(timewe);

du = 1;
P0 = duan[wan];
du = 0;
we = 1;
P0 = 0xfd;
we = 0;
delay(timewe);

du = 1;
P0 = duan[qian];
du = 0;
we = 1;
P0 = 0xfb;
we = 0;
delay(timewe);

du = 1;
P0 = duan[bai];
du = 0;
we = 1;
P0 = 0xf7;
we = 0;
delay(timewe);

du = 1;
P0 = duan[shi];
du = 0;
we = 1;
P0 = 0xef;
we = 0;
delay(timewe);

du = 1;
P0 = duan[ge];
du = 0;
we = 1;
P0 = 0xdf;
we = 0;
delay(5);

temp++;
}
}
/**********************************************/
/* 主函数 */
/**********************************************/
void main(void)
{
while(1)
{
display();
}
}

#include <reg52.H> //STC头文件
#define uchar unsigned char
#define uint unsigned int
#define timewe 3

sbit we = P2^7;
sbit du = P2^6;

unsigned long temp;
uint jsms=0;

uchar code duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay (uint a) // 1ms延时程序(12MHz 10倍于51单片机速度时)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++); 

}

uchar disbuf[6];
void display()
{ uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
static uchar a;
if(a>=6)a=0;
we=1;
P0=0xff;
we=0;
du=1;
P0=duan[disbuf[a]];
du=0;
we=1;
P0=wei[a];
we=0;
a++;
}
/**********************************************/
/* ä¸»å‡½æ•° */
/**********************************************/
void main(void)
{
temp=0;
while(1)
{
if(++jsms>=1000){
if(++temp == 999999)
temp = 0; 
}

disbuf[0] = temp/100000;
disbuf[1] = temp%100000/10000;
disbuf[2] = temp%10000/1000;
disbuf[3] = temp%1000/100;
disbuf[4] = temp%100/10;
disbuf[5] = temp%10;
display();
delay(1);
}
}追问

这个编译不通过啊。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-15
仿真实例
这个可以参考一下,可以用按键 输入所需 显示 的数字。
相似回答