微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么按键按下,单片机不能读相应得到数据?

为什么按键按下,单片机不能读相应得到数据?

时间:10-02 整理:3721RD 点击:
新手学习单片机的道路总是磕磕绊绊,我刚刚能用矩阵键盘控制板子上的小灯的亮灭(注释部分),但是为什么接上数码管之后,数码管只是显示初始值0,当我按下按键的时候,数码管也没有反应呢?【就是画蓝线的那条语句,逻辑,语法也都没错啊,当按下按键的时候key4=0了难道不对吗?】求大神指教~谢谢大家了 急死我了



P0口做按钮开关时,要有上拉电阻哦~~~~你添加了么?建议换个端口试试,例如:sbit Key4 = P1^3;//希望能帮到你~~~~~

没有加……后来我发现是程序的IO口写错了,但是我不太明白上啦电阻有啥用呢……我把低四位接高电平,高四位接低电平,读取高四位的数据,按下就是低电平,不按下就是悬空(高电平)这样也能实现功能。接了上啦电阻的话有什么好处呢?

生活就像一盒巧克力,你不知道你的下一块口味是什么。

/*        名称:K1-K4 按键状态显示
        说明:K1、K2按下时LED点亮,松开时熄灭,
                  K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
//延时
void DelayMS(uint x)
{
        uchar i;
        while(x--) for(i=0;i<120;i++);
}       
//主程序
void main()
{
        P0=0xff;
        P1=0xff;
        while(1)
        {
                LED1=K1;
                LED2=K2;
                if(K3==0)
                {
                        while(K3==0);
                        LED3=~LED3;
                }
                if(K4==0)
                {
                        while(K4==0);
                        LED4=~LED4;
                }


这段程序的最后少了两个【{】,不完美~~~~~

学习,,,,,,,,,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top