51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
如果32个流水灯将32个I/O口占完了 你哪来一个I/O来装按键
请留邮箱 私聊
// 改了一下试试
#include<reg52.h> //包含 reg52.h 这个头文件
#include<intrins.h>
#define led P2 //
char i;
sbit k1=P3^6; // 启动按键
sbit k2=P3^7; // 停止按键
bit s=0; // 启停标志
char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组
void delay1s(void); //延时函数
void liushuideng(); //流水灯的循环
void main()
{
led=~0xff;
k1=1;
while(1)
{
if(k1==0)
{
s = 1 ;
}
if(k2==0)
{
s = 0 ;
led=~0xff;
}
if(s==1)
{
i = i + 1 ;
if(i==8){i=0;}
led=~a[i]; //LED灯通过遍历数组产生变化
delay1s(); //延时500ms
}
}
}
void delay1s(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
#include<reg52.h> //包含 reg52.h 这个头文件
#include<intrins.h>
#define led P2 //
sbit k1=P0^0; // 启动按键
sbit k2=P0^1; // 停止按键
void delay1s(void); //延时函数
void liushuideng(); //流水灯的循环
void main()
{
led=~0xff;
k1=1;
while(1)
{
if(k1==0)
{
liushuideng();
if(k2==0)break;
}
}
}
void delay1s(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void liushuideng()
{
char i;
char j=0;
char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组
while(1)
{
if(j<2) //循环的次数
{
for(i=0;i<8;i++) //循环i;i+1
{
led=~a[i]; //LED灯通过遍历数组产生变化
delay1s(); //延时500ms
if(k2==0)return;
}
j++; //循环次数累加
}
led=~0xff;
if(k1!=1&&j!=0)
{
j=0;
}
}
}
由于流水灯一个循环时间很长,在此期间按下按键是没有响应的
可以用中断的方法或将按键检测插入到 流水灯的延时过程中
void main()
{
led=~0xff;
k1=1;
while(1)
{
if(k1==0)
{
delayms(10);
if(k1==0) flag=1;
}
if(flag==1)liushuideng();
}
}
流水灯不要死循环,因主程序就 是一个大循环程序
将按键2的检测加入for循环中
for(i=0;i<8;i++) //循环i;i+1
{
led=~a[i]; //LED灯通过遍历数组产生变化
if(k2==0)
{delayms(10);if(k2==0) flag=0;break}
delayms(250); //延时250ms
if(k2==0)
{delayms(10);if(k2==0) flag=0;break}
delayms(250); //延时250ms
}
#include "reg51.h" /* 此文件中定义了单片机的一些特殊功能寄存器 */
#include <intrins.h>
typedef unsigned int int16_t; /* 对数据类型进行声明定义 */
typedef unsigned char int8_t;
#define LED P2
/**************端口定义************************************************/
sbit Key_B=P3^3; //外部中断1,HC6800-ES-V2.0板子是独立按键K4键
/*********变量定义******************************************/
bit Start=0;
void IntConfiguration()//外部中断设置子函数
{
IT1=1;
EX1=1;
EA=1;
}
void delay( int16_t i )
{
while ( i-- );
}
void LSD ( )
{
int8_t i=0;
int8_t LED_Last=0;
LED=0xfF;
for(i=0;i<=7;i++)
{
LED=LED<<1;
// LED_Last=LED;
delay(50000);
}
}
void main()
{
IntConfiguration();
while(1)
{
while (Start)
{
LSD ( );
}
LED=0xff;
}
}
void Int1(void) interrupt 2//外部中断1的中断服务函数
{
delay(50000);
Start=~Start;
IE0=0;
}
楼主 带带我
51单片机流水灯如何通过两个按键启动和停止 ,怎么停止
sbit k1=P3^6; \/\/启动按键 sbit k2=P3^7;\/\/停止按键 bit s=0; \/\/ 启停标志 char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; \/\/LED灯的数组 void delay1s(void); \/\/延时函数 void liushuideng(); \/\/流水灯的循环 void main(){ led=~0xff;k1=1;while(1){...
51单片机控制1组流水灯2组LED的方法(能给个代码最好)
\/\/定义第二个LED灯\/\/主函数,C语言的入口函数: void main(void){ while(1){ \/\/循环扫描按键 if(key1==0) \/\/按键1按下,LED1灯亮 led1=0; if(key2==0) \/\/按键2按下,LED1灯灭 led1=1; if(key3==0) \/\/按键3按下,LED2灯亮 led2=0; if(key4==0) \/\/...
c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序_百 ...
1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...
...三个内容。一个最小系统带一个流水灯。两个按键控制两个灯,外部中...
流水灯:#include<reg51.h>#include<intrins.h>void delay(uchar a){uchar i;while(a--)for(i=0;i<120;i++);}main(){P0=0xfe;while(1) { P0=_crol_(P0,1); delay(200); }}按键控制两个灯#include<reg51.h>sbit led1=P1^0;sbit led2=P1^1;void ext0() inter...
单片机编程,按下S1,流水灯一只灯亮,从D1到D8,循环两次。
主函数main中,我们首先初始化了一些变量,然后进入一个无限循环。当检测到S1按下时,我们通过延时函数来防止抖动,再进入一个循环,直到S1释放。接着,我们通过一个外层循环控制流水灯点亮两次,内层循环控制从D1到D8依次点亮。每次点亮一个灯后,通过延时函数使灯光保持一定时间。需要注意的是,代码中的...
单片机51按下按键key1流水灯从上到下亮3次代码怎么写
可以采用以下步骤:1、要定义按键输入口和流水灯输出口。使用单片机51的P1和P2口,分别定义按键输入口和流水灯输出口。2、要初始化按键输入口为低电平。当按键没有被按下时,按键输入口就处于低电平状态。3、在主函数中,使用一个无限循环,不断检查按键输入口是否被按下。按下按键,则点亮第一个灯...
单片机汇编语言按键控制流水灯,两个开关k1,k2。实现功能按下k1,流水灯...
K1 EQU P1.0K2 EQU P1.1ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR 00H CLR 01HLOOP: JB K1,LOOP1 SETB 00H CLR 01H SJMP LOOPLOOP1: JB K2,LOOP2 SETB 01H CLR 00HLOOP2: JB 01H,LOOP3 JB 00H,LOOP4 SJMP MAINLOOP3: ...
跪求 单片机 按键控制流水灯,要求按一下按键第一个灯亮,按两下第二个...
如果你不会写程序,给你了也没用 给你个思路:预先定于一个寄存器KEYNUM,首先有按键检测程序,每检测到一次按键,KEYNUM+1。在显示程序里判断KEYNUM是几,如果是1则第一个灯亮,其他的灭,依次类推,如果KEYNUM=8,第八个灯亮,同时清除KWENUM....
51单片机双键控制八位流水灯C程序
EA=1;while(1){ if(K1==0){ while(K1==0);TR0=1;LED=0xfe;P0=LED;while(LED!=0){ while(!flag);flag=0;LED<<=1;P0=LED;} TR0=0;} if(K2==0){ while(K2==0);TR0=1;LED=0x7f;P0=LED;while(LED!=0){ while(!flag);flag=0;LED>>=1;P0=LED;} TR0=0;} } }...
我想用二个按键来控制51单片机流水灯速度,要求1一个加速一个减速,要求...
可以利用if语句和I++、I--、功能调节变量的值,然后把这个变量联系到延时函数中去就差不多了,请试一试。