/*四位数码管的加减计数器程序,陈永飞同志于2007-11-10写,采用AT89C2051单片机,4位共阳数码管显示*/
#include<reg51.h>
#define leddata P1 //数码管的段码输出
#define uchar unsigned char
#define uint unsigned int
uint shu;
sbit jia=P3^0; //加一按键
sbit jian=P3^1; //减一按键
sbit qw=P3^2; //数码管的千位
sbit bw=P3^3; //数码管的百位
sbit sw=P3^4; //数码管的十位
sbit gw=P3^5; //数码管的个位
uchar code tab[]={ 0xC0,/*0*/
     0xF9,/*1*/
     0xA4,/*2*/
     0xB0,/*3*/
     0x99,/*4*/
     0x92,/*5*/
     0x82,/*6*/
     0xF8,/*7*/
     0x80,/*8*/
     0x90,/*9*/
  };
void desplay();
void delay(uchar a) //延时函数
{
uchar x,y;
for(x=0;x<a;x++)
for(y=0;y<200;y++);
}
void key()  //按键扫描函数
{
if(jia==0)
{
 delay(50);
 if(jia==0)
 {
 while(!jia)desplay();
 if(shu==9999)shu=0;
 else shu++;
 }
}
if(jian==0)
{
 delay(50);
 if(jian==0)
 {
 while(!jian)desplay();
 if(shu==0)shu=9999;
 else shu--;
 }
}
}
void desplay() //显示函数
{
leddata=tab[shu/1000]; qw=0;delay(200);qw=1;
leddata=tab[shu%1000/100];bw=0;delay(200);bw=1;
leddata=tab[shu%100/10];sw=0;delay(200);sw=1;
leddata=tab[shu%10];gw=0;delay(200);gw=1;
}
void main()  //主函数
{
while(1)
{
 key();
 desplay();
}
}