51单片机通过K1-K4控制LED移位
因为K1~K4连接在单片机的P1端口的高4位,本例在识别按键时,将P1端口的值分别与0x10、0x20、0x40、0x80进行与操作,
如果与其中之一相与后结果为0,则表明对应按键按下,这4个数高4位分别是0001(1)、0010(2)、0100(4)、1000(8)。
通过网盘分享的文件:按键控制LED上下移动链接: https://pan.baidu.com/s/11MmR-wycaI70CWoGLmZagg 提取码: 59gh
//K1-K4控制LED移位
//说明:按下K1时,P0端口LED上移一位
// 按下K2时,P0端口LED下移一位
// 按下K3时,P2端口LED上移一位
// 按下K4时,P2端口LED上移一位
#include#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char //定义无符号字符型形
#define uint unsigned int //定义无符号整型
//延时程序
void yan_shi(uint ms)
{
uint i,j;
for(i=0;i
}
//按键程序
//在C语言中==,是等于号,=是赋值符号
void an_jian_cheng_xu()//判断按键程序
{
if((P1&0x10)==0)//&是位并符号,例如二进制,0010&1111==0010
P0=_cror_(P0,1);//K1右移1位 ,_cror_右移函数(左移,还是右移,都在intrins.h文件中)
else if((P1&0x20)==0)
P0=_crol_(P0,1);//K2左移1位,_crol_左移函数
else if((P1&0x40)==0)
P2=_cror_(P2,1);//K3右移1位
else if((P1&0x80)==0)
P2=_crol_(P2,1);////K3左移1位
}
//主程序
void main()
{
uchar an_jian_fu_wei;
P0=0XFE;//点亮P0口第一个灯
P2=0XFE;//点亮P2口第一个灯
P1=0XFF;//按键全部高电平。复位
an_jian_fu_wei=0XFF;
while(1)
{
if(an_jian_fu_wei != P1)//!= 不等于符号。等待按键放下。放下后P1=0xFF。
{
an_jian_fu_wei = P1;
yan_shi(1);// 防抖动
an_jian_cheng_xu();//判断按键程序
}
}









最新发布