单片机交流
直播中

打马过草原

9年用户 884经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

如何利用独立键盘的按键控制数码管数字的变化?

如何利用独立键盘的按键控制数码管数字的变化?

回帖(1)

何朝燕

2021-10-12 10:56:26
1.参考教程:

清翔51单片机教程
2.实现效果:

利用独立键盘的按键,控制数码管数字的变化。





3.基本原理

**特点:**每个按键占用一个IO口,当按键数量较多时,IO口的利用效率不高,但程序简单,适用于所需按键较少的场合。
**原理:**以按键S2为例,给P30赋逻辑1,当S2被按下的时候,由于S2左端接地,则P30输出由高电平变低电平。S2没被按下依旧输出高电平。





4.参考代码


#include
#include //标准库函数
#define uint unsigned int
#define uchar unsigned char
***it DU = P2^6;        //数码管段选
***it WE = P2^7; //数码管位选
***it key_s2 = P3^0;//独立按键S2
***it key_s3 = P3^1;//独立按键S3
uchar num;         //数码管显示的值
//共阴数码管段选表0-9
uchar code tabel[]=        {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//毫秒级延时函数定义
void delay(uint z)
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}
void main()//main函数自身会循环
{
        WE = 1;//打开位选锁存器
        P0 = 0XFE;//1111 1110
        WE = 0;//锁存位选数据
        while(1)
        {
                if(key_s2 == 0)
                {
                        delay(20);//按键消抖(按键会有抖动影响结果)
                        if(key_s2 == 0)
                        {
                                num++;
                                if(num == 10)
                                        num = 0;
                                while(!key_s2);//松手检测(松手后跳出循环)
                        }
                }
                if(key_s3 == 0)
                {
                        delay(20);//按键消抖
                        if(key_s3 == 0)
                        {
                                num--;
                                if(num == 255)
                                        num = 9;
       
                                while(!key_s3);//松手检测
                        }
                }
                //松手之后刷新显示
                DU = 1;//打开段选锁存器
                P0 = tabel[num];//0000 0110
                DU = 0;//锁存段选数据
        }
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分