找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5114|回复: 0
上一主题 下一主题
收起左侧

基于51单片机的8个流水灯的按键控制

[复制链接]
跳转到指定楼层
楼主
ID:364977 发表于 2018-7-4 16:56 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1 =P2^0; //按键1
sbit key2 =P2^1; //按键2
sbit key3 =P2^2; //按键3
uchar flag1=0,flag2=0,flag3=0;
void delay_ms(uint z)
{
uint i,j;
for(i=0;i<z;i++);
for(j=0;j<110;j++);
}
void O_to_E() //1,3,5,7与2,4,6,8交替闪烁
{
P0=0Xaa;
delay_ms(200);
P0=~0Xaa;
delay_ms(200);
}
void key_scan() //键盘扫描
{
if(!key1)
{
delay_ms(10); //延时消抖
if(!key1)
flag1=1;
}
if(!key2)
{
delay_ms(10); //延时消抖
if(!key2)
flag2=1;
}
if(!key3)
{
delay_ms(10); //延时消抖
if(!key3)
flag3=1;
}
}
void main()
{
uchar i;
while(1)
{
key_scan();
if(flag1) //按键一按下?
{
for(i=0;i<8;i++) //从左至右亮,每次一盏
{
P0=~(0x80>>i);
delay_ms(100);
key_scan(); //按键扫描
if(flag2||flag3){flag1=0;break;} //如果有其它按键按下响应其它按键
}
}
if(flag2) //按键一按下?
{
for(i=0;i<8;i++) //从右至左亮,每次一盏
{
P0=~(0x01<<i);
delay_ms(100);
key_scan();
if(flag1||flag3){flag2=0;break;}
}
}
if(flag3)
{
O_to_E(); //奇偶交替闪烁
key_scan();
if(flag1||flag2)flag3=0;
}
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:551656 发表于 2019-5-31 11:51 来自触屏版
又isis的图嘛?

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表