c51单片机如何使用一个按钮就能实现数码管从0~9的循环并且还能实现数码管清零?

下面程序只能实现数码管0~9的循环以及暂停,却无法清零。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define A P0
sbit t=P1^0;
sbit k=P3^0;
uint flag=0;
void delay(uint i)
{
while(i--);
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
}

void main()
{ char *ps;
char smg[70]={0xC0,0xF9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00};
ps=smg;
while(1)
{ A=*ps;
delayms(200);
ps++;
if(*ps==0x00)
ps-=10;

if(k==0)
{
delay(200);
if(k==0)
{
flag++;
if(flag==2)flag=0;
}

} while(!k);
if(flag==0)
{t=1;}
if(flag==1)
{ t=0;}
}
}

从你的仿真图中没有看到P1.0接什么,看程序也看不出来那个 t 是怎么能控制数码管循环显示和暂停的,都不能实现哪,只能是不停的循环显示,根本停不下来。
数码管的段码表只有11个数,可数组却声明了70个元素,smg[70] ,这是根据什么确定的70,应该是smg[11] 就行。按理,一个按键是不可能实现计数,暂停,清0的,因为,要实现,必然是按计数,暂停,清0这3个动作循环一次的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-22
数码管清零是什么意思?防止余辉导致看不清数字?追答

第2个回答  2019-05-22
斑多少钱啊追问

能保证没问题吗?