-
大小: 55KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-05-28
- 语言: 其他
- 标签:
资源简介
51单片机 4个按键 分别控制流水灯左右两边中间移动 具有暂停 切换流水的功能 内有keil程序,和proteus仿真,可以直接调试看效果。
代码片段和文件信息
#include
#include
sbit key1=P3^2; // 按键01 的设定
sbit key2=P3^3; // 按键02 的设定
sbit key3=P3^4; // 按键03 的设定
sbit key4=P3^5; // 按键04 的设定
unsigned char kjkeynum;
unsigned char table0[]={0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f}; //左移
unsigned char table1[]={0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe}; //右移
unsigned char table2[]={0x7e0xbd0xdb0xe70x7e0xbd0xdb0xe7}; //往中间移
unsigned char table3[]={0xe70xdb0xbd0x7e0xe70xbd0xdb0x7e}; //往两边移
void keyscan(); // 按键扫描
void delayms(unsigned int i); // 延时子程序
////************************** 主函数 *********************************
void main()
{
while(1)
{
if(key1==0)
{
delayms(10); // 10ms 按键消抖
if(key1==0)
{
key=1; // 确定 按键01 有按下
while(key2||key3||key4) // 若没有其他按键 按下 , 则进行 “左移” 功能
{
keyscan();
}
}
}
if(key2==0)
{
delayms(10); // 10ms 按键消抖
if(key2==0)
{
key=2; // 确定 按键02 有按下
while(key1||key3||key4) // 若没有其他按键 按下 , 则进行 “右移” 功能
{
keyscan();
}
}
}
if(key3==0)
{
delayms(10); // 10ms 按键消抖
if(key3==0)
{
key=3; // 确定 按键03 有按下
while(key1||key2||key4) // 若没有其他按键 按下 , 则进行 “往中间移” 功能
{
keyscan();
}
}
}
if(key4==0)
{
delayms(10); // 10ms 按键消抖
if(key4==0)
{
key=4; // 确定 按键04 有按下
while(key1||key2||key3) // 若没有其他按键 按下 , 则进行 “往两边移” 功能
{
keyscan();
}
}
}
}
}
////**************************** 按键扫描 ***********************
void keyscan()
{
switch(key)
{
case 1:
while(key2||key3||key4) // 若没有其他按键 按下 , 则进行 “往左移” 功能
{
for(num=0;num<8;num++)
{
P0=table0[num];
delayms(1000);
// 【 动态切换按键 】
if(key2==0) // 有按键02 按下 ,执行相应功能
{
key=2;
keyscan();
}
if(key3==0) // 有按键03 按下 ,执行相应功能
{
key=3;
keyscan();
}
if(key4==0) // 有按键04 按下 ,执行相应功能
{
key=4;
keyscan();
}
if(key1==0) // 暂停 当前流水灯
{
P0=table0[num];
delayms(1000);
// 【 静态切换按键 】
while(key1)
{
if(key2==0) // 有按键02 按下 ,执行相应功能
{
key=2;
keyscan();
}
if(key3==0) // 有按键03 按下 ,执行相应功能
{
key=3;
keyscan();
}
if(key4==0) // 有按键04 按下 ,执行相应功能
{
key=4;
keyscan();
}
}
}
}
}break;
case 2: // 若没有其他按键 按下 , 则进行 “往右移” 功能
while(key1||key3||key4)
{
for(num=0;num<8;num++)
{
P0=table1[num];
delayms(1000);
// 【 动态切换按键】
if(key1==0) // 有按键01 按下 ,执行相应功能
{
key=1;
keyscan();
}
if
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 93257 2012-06-27 13:32 【led】\Last Loaded led.DBK
文件 8668 2012-06-27 21:40 【led】\led
文件 6277 2012-06-27 21:40 【led】\led.c
文件 93226 2012-06-27 15:58 【led】\led.DSN
文件 2189 2012-06-27 21:40 【led】\led.hex
文件 54 2012-06-27 21:40 【led】\led.lnp
文件 22192 2012-06-27 21:40 【led】\led.LST
文件 14898 2012-06-27 21:40 【led】\led.M51
文件 9281 2012-06-27 21:40 【led】\led.OBJ
文件 191 2012-06-27 22:51 【led】\led.plg
文件 768 2012-06-27 15:58 【led】\led.PWI
文件 56257 2012-06-27 22:51 【led】\led.uvopt
文件 13394 2012-06-24 00:11 【led】\led.uvproj
文件 56249 2012-06-27 21:40 【led】\led_uvopt.bak
文件 0 2012-06-23 21:55 【led】\led_uvproj.bak
文件 6376 2009-05-07 14:37 【led】\STARTUP.A51
文件 14072 2012-06-27 21:40 【led】\STARTUP.LST
文件 758 2012-06-27 21:40 【led】\STARTUP.OBJ
目录 0 2012-06-28 09:00 【led】
----------- --------- ---------- ----- ----
398107 19
- 上一篇:顺序表表示集合,实现集合的交、并、差运算
- 下一篇:规律有序文本生成工具
评论
共有 条评论