单片机学习小组
直播中

王晾其

7年用户 1007经验值
私信 关注

请问独立按键是怎样实现8位数码管0~7循环的

按键的原理是什么?数码管的原理是什么?

请问独立按键是怎样实现8位数码管0~7循环的?

回帖(1)

金晖

2022-2-23 14:08:21
(1)按键原理:按键正常状态为默认高电平,当按键按下之后就变成低电平。利用这个特性,我们可以检测出按键是否按下。
(2)数码管原理:想实现数码管的点亮,首先要有位选,即点亮哪一个数码管;其次要有段选,即具体的数码管显示哪一段(一个数码管由8段构成,包括一个小数点)
(3)按键原理图:
(4)74HC138原理图:(5)数码管原理图:(6)源代码:

#include
***it K4=P3^3;
***it LSA=P2^2;
***it LSB=P2^3;
***it LSC=P2^4;
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80/*显示小数点*/};
void delay(u16 i)//延时函数
{
        while(i--);
}
void keypros()
{
        u8 i;
        if(K4==0)
        delay(1000); //按键消抖
        if(K4==0)
        {
                for(i=0;i<8;i++) //for循环实现数码管0~7的循环显示
                {
                         switch(i)
                         {
                                 case 0: LSA=0;LSB=0;LSC=0;break;
                                case 1:        LSA=1;LSB=0;LSC=0;break;
                                case 2:        LSA=0;LSB=1;LSC=0;break;
                                case 3:        LSA=1;LSB=1;LSC=0;break;
                                case 4:        LSA=0;LSB=0;LSC=1;break;
                                case 5:        LSA=1;LSB=0;LSC=1;break;
                                case 6:        LSA=0;LSB=1;LSC=1;break;
                                case 7:        LSA=1;LSB=1;LSC=1;break;
                         }
                         P0=smgduan; //数码管显示具体数字
                         delay(50000);
                }
        }
        if(K4!=0)//按键正常状态,不按下
        {
                LSA=1;
                LSB=1;
                LSC=1;
                P0=smgduan[0];
        }
}
void main()
{
      
        while(1)
        {
                keypros();        //调用按键处理函数
        }
}
举报

更多回帖

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