欢迎光临散文网 会员登陆 & 注册

51单片机100例实例之13例

2021-01-21 14:18 作者:技术流阿宅  | 我要投稿

 //项目名称:4只按键分组控制LED

//项目再创作者:科技小宅神

//完成时间:2021/01/21

//功能说明:每次按下K1逐次点亮LED,全亮时再次按下则循环开始

//K2按下,点亮上4只LED,K3按下,点亮下4只LED,K4按下关闭所有LED

proteus仿真图


#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

//1毫秒延时子程序

void DelayMS(uint x)

{

  uchar t;

while(x--)

{

for(t=0;t<120;t--);

}

}

//主程序

void main()

{

  uchar k,t,Key_State;

P0 = 0xff;

P1 = 0xff;

while(1)//无限循环

{

t = P1;//令t=P1

{

DelayMS(10);

if(t != P1)

continue;

Key_State = ~t >> 4;//取得4位按键值,也就是读取P1.0~P1.3的电位状态。先取反后移位,位运算符优先级~大于>>。

k = 0;

while(Key_State != 0)//即P1.0~P1.3的按键值不等于0x00时

{

k++;

Key_State >>= 1;//将Key_State向右移动1位,再赋值给Key_State。先运算再赋值。(复合赋值运算)注意是这里是算术右移!

}

switch(k)//根据按键号K进行4种处理

{

case 1: if(P0 == 0x00)//如果P0全部接低电平

P0 = 0xff;//那么P0全部1111 1111

P0 <<= 1;//将P0向左移动1位,再赋值给P0。先运算再赋值。(复合赋值运算)(逐增点亮)注意是这里是算术左移!

DelayMS(200);

break;//

case 2: P0 = 0xf0;//1111 0000 上四个点亮

break;

case 3: P0 = 0x0f;//0000 1111 下四个点亮

break;

case 4: P0 = 0xff;//1111 1111 全部关闭

}

}

}

}


51单片机100例实例之13例的评论 (共 条)

分享到微博请遵守国家法律