以AT89C51单片机为核心,设计一个二进制计数器

1)以4个LED灯为二进制的显示方式,4个LED初始状态为灯亮; (2)配置两个按键,K1为加法键,每按下一次,二进制数加1; K2为减法键,每按下一次,二进制数减1。
求大侠给一个keil的程序

第1个回答  2012-10-22
直接赋值,就是二进制显示:
比如:
uchar dat = 3;
P0 = dat; //LED灯二进制方式显示数据dat.追问

要用灯的亮灭来显示计数方式耶..一个按钮是加1 另外一个是减一,请问怎么处理呢?

追答

if(KEY1 == 0){
dat++;
P0 = dat;
}
if(KEY2 == 0){
if(dat > 0) dat--;
P0 = dat;
}
//P0 = dat; 这就是二进制显示方式了,比如dat = 2: 灯:灭灭亮灭,了。 这里没加消抖,去重复按键处理,

追问

请问能帮忙写一下一个完整的程序吗?我把电路图贴出来~上边的按钮是+1 下边的按钮是减一。谢谢啊~!

追答

#include
sbit KEY1 = P3^6;
sbit KEY2 = P3^7;
uchar disData = 0;
uchar keyStatus(uchar vkey, uchar * keyDown, uchar delay){
uchar res = 0;
if(vkey != 0){
if(keyDown[0] == delay){
res = 1;
}
if(keyDown[0] 0)disData--;
P1 = disData;
}
}
void delay(uchar n){
uchar i;
for( ; n > 0; n--)
for(i = 0 ; i < 20; i++);
}
void main(){
KEY1 = 1;
KEY2 = 1;
P1 = 0;
while(1){
scanKey1();
scanKey2();
delay(10);
}
}
图有问题,你自己解决了

本回答被网友采纳
第2个回答  2012-10-22
要用灯的亮灭来显示计数方式耶..一个按钮是加1 另外一个是减一,请问怎么处理呢?

if(!KEY1)
dat++;
if(KEY2)
dat--;
P0 = dat;追问

那4个LED灯怎么显示?效果是这样的,比如按了2次 ++ 的按钮二进制为10 那4个led的显示效果为 灭灭亮灭 求帮~谢谢了

第3个回答  2012-11-05
我等下帮你编一个吧~这个我以前作业做过的,一模一样,你老师真懒~本回答被提问者采纳
相似回答