c语言单片机计数器程序怎么写,我写了一个四位计数器程序,if 语句嵌套太多,怎样才能更简洁一点?...

/************************************************************************/

/*                    带加减的四位数码管计数器                          */

/************************************************************************/

//如果数码管位数多一点, if 就可能会冗余文件太长了

#include

#define uchar unsigned char

#define uint unsigned int

#define duan P0                //数码管段输出

sbit jia=P1^0;                 //按键加

sbit jan=P1^1;                 //按键减

sbit qin=P1^2;                 //按键清零

sbit gw=P2^2;                 //数码管个位

sbit sw=P2^3;                 //数码管十位

sbit bw=P2^4;                 //数码管百位

sbit qw=P2^5;                 //数码管千位

char aa,bb,cc,dd;

uchar code tab[]={        0xEB,/*0*/

0x21,/*1*/

0xD3,/*2*/

0x73,/*3*/

0x39,/*4*/

0x7A,/*5*/

0xFA,/*6*/

0x23,/*7*/

0xFB,/*8*/

0x7B,/*9*/

};

/*延时函数*/

void delay(uint z)

{

uint x;

for(x=z;x>0;x--);

}

/*显示函数*/

void display(uchar qian,uchar bai,uchar shi,uchar ge)

{

duan=tab[qian];

gw=0;

delay(100);

gw=1;

duan=tab[bai];

sw=0;

delay(100);

sw=1;

duan=tab[shi];

bw=0;

delay(100);

bw=1;

duan=tab[ge];

qw=0;

delay(100);

qw=1;

}

/* 按键和计算函数*/

void key()

{

if(jia==0)             //这是加的程序

{

delay(100);

if(jia==0)

{

while(!jia)display(aa,bb,cc,dd);

aa++;

if(aa==10)                   //这个开始if 了

{

aa=0;

bb++;

if(bb==10)

{

bb=0;

cc++;

if(cc==10)

{cc=0;

dd++;

if(dd==10)

dd=0;

}

}

}

}

}

if(jan==0)              //这是减程序

{

delay(100);

if(jan==0)                //这也 if 了

{

while(!jan)display(aa,bb,cc,dd);

aa--;

if(aa==-1)

{

aa=9;

bb--;

if(bb==-1)

{

bb=9;

cc--;

if(cc==-1)

{

cc=9;

dd--;

if(dd==-1)

dd=9;

}

}

}

}

}

if(qin==0)

{

delay(100);

if(qin==0)

{

while(!qin)display(aa,bb,cc,dd);

aa=0;

bb=0;

cc=0;

dd=0;

}

}

}

/*主函数*/

void main()

{

&nbsp

8e530af0fcc3960ba420e2b09475f592.gif2=0xff;

while(1)

{

key();

display(aa,bb,cc,dd);

}

}

//如果要是写一个八位数的话,if 语句就嵌套更深了,请问有什么方法能简单一点,我用switch  case 没有写出来

[此贴子已经被作者于2008-9-5 9:34:50编辑过]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值