单片机按键按下的先后顺序判断

K4、K3:“进出”模拟检测键。
每先按K3、再按K4,即代表“进”一人次;
每先按K4、再按K3,则代表“出”一人次。
每“进”一人次,就在原“进”显示基础上加1(“进”显示初始状态为“b000”);
每“出”一人次,就在原“出”显示基础上加1(“出”显示初始状态为“C000”)。 
悬赏分:100 - 解决时间:2010-6-25 19:14 
最好把C语言程序给出来~

 

按照题目,编写了程序。用 PROTEUS 软件仿真截图如下。


呵呵,原来编写的程序,是使用汇编语言,现按照要求改成了C语言。
//================================================================
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K3 = P3^2;
sbit K4 = P3^3;
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//                       0     1     2     3     4     5     6     7     8     9 
                       0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc2,0x89,0xff};
//                       A     b     C     d     E     F     G     H    [ ]
uchar DispD[] = {0,0,0,11,0,0,0,12};
uchar DispW[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//------------------------------------
void delay(uint z)
{
     uint x, y;
     for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}
//------------------------------------
void display(void)
{
     uint i;
     for (i = 0; i < 8; i++) {
       P2 = 0;
       P0 = table[DispD[i]];
       P2 = DispW[i];
       delay(3);
     } 
}
//------------------------------------
void main()
{
     uint in_num = 0, outnum = 0;
     while(1) {
       display();
//--------------------------
       if (K3 == 0) {
         display();
         if (K3 == 0) {
           while(K3 == 0) display();
           while(K4 == 1) display();
           in_num++;
           DispD[0] = in_num % 10;
           DispD[1] = in_num / 10 % 10;
           DispD[2] = in_num / 100;
           while(K4 == 0) display();
         }
       }
//--------------------------
       if (K4 == 0) {
         display();
         if (K4 == 0) {
           while(K4 == 0) display();
           while(K3 == 1) display();
           outnum++;
           DispD[4] = outnum % 10;
           DispD[5] = outnum / 10 % 10;
           DispD[6] = outnum / 100;
           while(K3 == 0) display();
         }
       }
//--------------------------
     }

//================================================================
提问者对于答案的评价:嘿嘿,谢谢帮助。以后可以私下问你有关单片机的问题吗?哈哈~
原题网址:单片机按键按下的先后顺序判断_百度知道

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值