基于51单片机的流水灯按键控制关于按键控制暂停继
单片机源程序如下:
- #include<reg52.h>
- #define uint unsigned int //定义int变量uint
- #define shuzu1 unsigned char
- #define shuzu2 unsigned char //定义两个数组,实现两种流水灯
- shuzu1 i;
- shuzu2 j; //数组 i,j变量
- shuzu1 code table1[]={0xfc,0xf9,0xf3,0xe7,
- 0xcf,0x9f,0x3f}; //数组1,每两个流水灯亮
- shuzu2 code table2[]={0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f};//数组2,一位流水灯亮
- sbit k1=P3^2;
- sbit k2=P3^3;
- sbit k3=P3^4;
- sbit k4=P3^5; //定义四位数码管函数名(k1,k2,k3,k4)
- void deng1(); //流水灯1的子函数
- void deng2(); //流水灯2的子函数
- void anjian(); //按键暂停继续子函数
- void delay(uint z)
- {
- uint i,j;
- for(i=0;i<z;i++)
- for(j=0;j<110;j++);
- } //延时函数
- void deng1()
- {
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- while(!k1); //判断按键1是否按下,松手检测
- for(i=0;i<=7;i++)
- {
- P1=table1[i];
- delay(500);//流水灯程序
- anjian();//按键暂停继续子程序
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- deng2();//中途跳出灯1循环
- }
- }
- }
- }
- }
- }
- void deng2()
- {
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- while(!k1);
- for(j=8;j>=0;j--)
- {
- P1=table2[j];
- delay(500);
- anjian();
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- deng1();
- }
- }
- }
- }
- }
- }
- void anjian()
- {
- if(k3==0)
- {
- delay(10);
- if(k3==0)
- {
- while(!k3);//判断按键3是否按下,松手检测
- while(1)//死循环,使流水灯暂停
- {
- if(k4==0);
- if(k4==0)
- {
- delay(10);
- if(k4==0)
- {
- while(!k4);
- break;//跳出死循环
- }
- }
- }
- }
- }
- }
- void main()
- {
- while(1)
- {
- deng1();
- deng2();
- anjian();//调用三个子函数
- }
- }
复制代码
所有资料51hei提供下载:
两种流水灯按键控制暂停继续.rar
(37.99 KB, 下载次数: 25)
|