求帮忙看一下程序

2019-07-15 21:39发布

#include <reg52.h>sbit  KEY1 = P2^4;sbit  KEY2 = P2^5;sbit  KEY3 = P2^6;sbit  KEY4 = P2^7;sbit  ADDR0 = P1^0;sbit  ADDR1 = P1^1;sbit  ADDR2 = P1^2;sbit  ADDR3 = P1^3;sbit  ENLED = P1^4;unsigned char code LedChar[] = {    0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,    0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e};  //数码管真值表void delay(void);       //延时函数声明void main(void){    bit keybuf = 1;    //按键值暂存,临时保存按键的扫描值    bit backup = 1;    //按键值备份,保存前一次的扫描值    unsigned char counter = 0;  //计数器记录按键按下的次数        //选择最右边的数码管进行显示    P0 = LedChar[counter];    ADDR0 = 0;    ADDR1 = 0;    ADDR2 = 0;    ADDR3 = 1;    ENLED = 0;    //选中第一行按键以进行扫描    P2 = 0xF7;        while(1)    {        keybuf = KEY4;            //只取KEY4为例,把当前扫描值暂存        if (keybuf != backup)    //当前值与前一次值不相等说明此时按键有动作        {            delay();              //延时大约10ms            if (keybuf == KEY4)   //判断扫描值有没有发生改变,即按键抖动            {                if (backup == 0)  //如果前一次的值为0,则说明当前状态是由0变为1,即按键弹起                {                    counter++;    //计数器+1                    if (counter >= 10)                    {         //只用1个数码管显示,所以记到10就清零重新开始                        counter = 0;                    }                    P0 = LedChar[counter];  //计数值显示到数码管上                }                backup = keybuf;  //更新备份为当前值,以备进行下次比较            }        }    }}void delay(void){    unsigned int i = 1000;    while (i--);  //通过debugKEIL软件延时方式计算得出大概是10ms}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
朱枫
1楼-- · 2019-07-16 02:14
把图纸传上来,不然没法分析,还有程序有什么问题
q5yinbaise
2楼-- · 2019-07-16 05:54
学习一下
shanyx2010
3楼-- · 2019-07-16 11:16
这个程序是记录按键弹起次数 并通过数码管显示出来
wzy616611
4楼-- · 2019-07-16 15:49
 精彩回答 2  元偷偷看……
shanyx2010
5楼-- · 2019-07-16 16:40
wzy616611 发表于 2013-11-21 13:12
keybuf = KEY4;            //只取KEY4为例,把当前扫描值暂存        if (keybuf != backup)    //当 ...

将当前IO口状态与之前的状态对比     不同的话肯定就说明按键状态变化了
wzy616611
6楼-- · 2019-07-16 20:51
shanyx2010 发表于 2013-11-21 22:53
将当前IO口状态与之前的状态对比     不同的话肯定就说明按键状态变化了

嗯嗯,谢谢你哈

一周热门 更多>