• 大小: 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


评论

共有 条评论

相关资源