各位大师麻烦帮忙看下这个计数器程序,前段时间发了一个仿制本贴一位大师的程序但最大只能计数到999,经过本贴一些大师的指点修改程序使计数器能正常计数0-9999,再次感谢各位大师的指点!另把修改后的程序发出来再麻烦各位大师帮忙看下怎么修改下程序使数码管显示消除无效0,数码管是共阴的,现在一开机显示4个0,现在想改一下使前面的十,百,千位显示的无效0消除。
#include <STC15.h>
#define uchar unsigned char
#define uint unsigned int
sbit FMQ=P5^5;//蜂鸣器
sbit K1=P3^2; //按键加
sbit K2=P3^3; //按键减
sbit K3=P5^4; //复位
bit flag_KEY=0; //按键松开标志位
sbit DS1=P3^4;//数码管第1位
sbit DS2=P3^5;//数码管第2位
sbit DS3=P3^6;//数码管第3位
sbit DS4=P3^7;//数码管第4位
unsigned char ScanTime=1;
unsigned int Num=0;
//共阴数码管段码表,段接P1.0-1.6,位接P3.4-3.7
unsigned char code SEG_Tab[]={
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x3F,
};
/*---------------------数码管显示---------------------------------------*/
void display()
{ //数码管初始化
P1=0x00;//P1=00000000
P3=0xFF;//P3=11111111
switch(ScanTime)
{
//----------数码管第1位--------------
case 1:
if(Num==0)
{
P1=0x3F;
}
else
{
P1=SEG_Tab[Num/1000];
}
DS1=0;
break;
//-----------数码管第2位-------------
case 2:
if(Num==0)
{
P1=0x3F;
}
else
{
P1=SEG_Tab[Num/100%10];
}
DS2=0;
break;
//-----------数码管第3位-------------
case 3:
if(Num==0)
{
P1=0x3F;
}
else
{
P1=SEG_Tab[Num/10%10];
}
DS3=0;
break;
//-----------数码管第4位-------------
case 4:
if(Num==0)
{
P1=0x3F;
}
else
{
P1=SEG_Tab[Num%10];
}
DS4=0;
break;
//------------------default---------------
default: break;
}
//-----数码管循环------
ScanTime++;
if(ScanTime>4)
{
ScanTime=1;//循环扫描
}
}
/*-------------------------------------
按键扫描
---------------------------------------*/
void keyscan()
{
if(K1==0)
{
if(flag_KEY==1)//按键只响应1次
{
flag_KEY=0;
{if(Num==10000)Num=0;}
{
Num++;
}
}
}
else if(K2==0)
{
if(flag_KEY==1)//按键只响应1次
{
flag_KEY=0;
{if(Num==0)Num=10000;}
{
Num--;
}
}
}
else if(K3==0)
{
if(flag_KEY==1)//按键只响应1次
{
flag_KEY=0;
{
Num=0;
}
}
}
else//按键松开
{
flag_KEY=1;
}
}
void delay_ms(unsigned int ms)// 延时子程序
{
unsigned int a,b;
for(a=ms;a>0;a--)
for(b=123;b>0;b--);
}
/*-------------------------------------
主函数
---------------------------------------*/
void main()
{
P1M1 = 0x00; P1M0 = 0xFF; //P1口推挽模式
P3M0 |= 0xf0; P3M1 &= ~0xf0; //P3口推挽模式
while(1)
{
display();
keyscan();
delay_ms(10);
if(Num<=999)
{
if((Num%100/10 == 0)&&(Num%10 == 0))
{FMQ=0;}
else
{FMQ=1;}
}
else
{
if((Num%1000%100/10 == 0)&&(Num%10 == 0))
{FMQ=0;}
else
{FMQ=1;}
}
}
}
|