单片机c语言编了个流水灯,用按键怎么实现它暂停。

按一下暂停,再按一下继续原来的程序。

实现流水灯的方式有很多种(中断,定时器,延时等等),看用哪种方式,最简单的是延时做流水灯,那么在死循环里面增加按键检测,判断出有按键按下来时,再进入死循环,程序不往下走就可以暂停,再按跌出死循环。

#include //51系列单片机定义文件

#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void delay(uint); //声明延时函数

void main(void)

{

uint i;

uchar temp;

uint Flag1=0;  按键标志位bai

uint Flag2=0;

while(1)

{

Flag1 = keyscan();

if(Flag1==1)(Flag2=~Flag2); //如果一旦检测到一次按键扫描就把标志位2 打开;再次就关闭;

if(Flag2==1)// 如果标志位打开就开始流水灯

{

 temp=0x01;

 for(i=0;i<8;i++) //8个流水灯逐个闪动

 {

P1=~temp;

delay(100); //调用延时函数

temp<<=1;

 }

}

扩展资料:

单片机编程就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分通过单片机编程来实现。单片机能识别的语言是硬件语言即汇编,因此编程就是围绕汇编来实现,有直接用汇编程序来编写的,但是较难调试的编写,特别是一上规模就更不易实现,因此常用高级语言来写然后通过编译器转化成汇编。

参考资料来源:百度百科-单片机C语言编程

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-28
//流水灯 4 个按键 4种 亮法,自己修改 成自己要的 亮法,供参考
#include <REG51.h> //51头文件
#define DY_PORT P1 //设置LED连接的I/O组
#define DY_SPEED 100 //设置每一个明亮级的停留时间(值域:0~65535)
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
void delay (unsigned int a) // 1ms延时程序
{
unsigned int i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
void main(void)
{
unsigned int i;
unsigned int temp;
while(1)
{
if(~k1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
DY_PORT=~temp;
delay(DY_SPEED); //调用延时函数
temp<<=1;
}
}
if(~k2)
{
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
DY_PORT=~temp;
delay(DY_SPEED); //调用延时函数
temp>>=1;
}
}
if(~k3)
{
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
DY_PORT=temp;
delay(DY_SPEED); //调用延时函数
temp<<=1;
}
}
if(~k4)
{
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
DY_PORT=temp;
delay(DY_SPEED); //调用延时函数
temp>>=1;
}
}
}
}追问

我想要的是比如说流水灯在走 我按了下按键 流水灯就在那停住了 打个比方刚好亮到第二个 然后我在按下按键 从第二个开始 哪里暂停哪里继续 一个按键就够了 请在帮帮忙。

追答

要完全符合自己的要求,需要自己修改,自己做才能有提高。

追问

我要的是用外部中断来实现 你这个我也会的。这两个概念的 你看清楚问题

追答

if(~k1) // 给你修改一个 试试 按下 k1 流水灯在走。释放k1 停住
{
if(i==8){i=0;temp=0x01;} //8个流水灯逐个闪动
i++;
DY_PORT=~temp;
delay(DY_SPEED); //调用延时函数
temp<<=1;
}

本回答被提问者和网友采纳
第2个回答  2012-10-27
利用外部中断可以,在中断函数里面写入你要执行的让流水灯停止的程序,设置一个全局变量FLAG=0;每次进入中断就取反,通过判断FLAG的值来决定是暂停还是继续
第3个回答  2012-10-26
可以用定时器设置流水灯的时间间隔,按键控制定时器开关

单片机c语言编了个流水灯,用按键怎么实现它暂停。
实现流水灯的方式有很多种(中断,定时器,延时等等),看用哪种方式,最简单的是延时做流水灯,那么在死循环里面增加按键检测,判断出有按键按下来时,再进入死循环,程序不往下走就可以暂停,再按跌出死循环。include \/\/51系列单片机定义文件 define uchar unsigned char \/\/定义无符号字符 define uint ...

单片机C语言编程:控制流水灯
T0 工作模式2 计时器中断,一次200us,1s流水灯左移或右移一次。k3触发外部中断0,级别高于计时器中断,故暂停。include <reg52.h>#include <intrins.h> #defineuint unsigned int#defineuchar unsigned charsbit k1=P1^0; \/\/左循环按钮sbit k2=P1^1; \/\/右循环按钮sbit k4=P1^2; \/\/恢复暂停...

用矩阵键盘上的键控制流水灯暂停的程序怎么编啊 用 C语言
但是你如果要求按一下就流水,再按一下就暂停,第三次按又流水,那你将按键按下计数,然后根据你按下按键次数进行对流水灯的操作。。。

单片机流水灯C语言结束程序该怎么写?也就是从灯0亮到灯7后就停止循环的...
你的描述太少了,下次提问把情况说明白,比如LED接口,点亮是什么电平。假设你电路使用P0驱动,低电平点亮,点亮下一个灯时需要关闭前一个灯。void delay(unsigned int ms) \/\/你自己根据晶振频率调整 { unsigned char j;for(;ms>0;ms--)for(j=110;j>0;j--);} void main(void){ unsigned ...

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)...

在做单片机按键控制流水灯,我想达到按一下自己循环,再按一下就停止的...
{ Delayms(10); \/\/按键去抖动 if(K1==0) s=0; \/\/按键按下此时是键值s=0 } while(s==0) \/\/当按键第一次按下时进入循环点亮灯的循环 { temp=0x01; for(i=0;i<8;i++) { P0

单片机流水灯怎么实现的?
一般来说,实现流水灯功能需要以下步骤:首先确定单片机型号和开发环境,并熟悉指令集和寄存器配置。然后确定LED灯的连接方式,并编写程序来控制LED灯的亮灭状态。最后在程序中添加延时函数来实现LED灯的亮灭延迟。在编写程序时,需要注意语法错误和逻辑错误,并进行测试和调试,以确保程序能够正确运行并实现...

单片机cc2530怎么让按下sw1暂停流水灯
在流水灯函数里,检测按键,如果按键按下,就直接返回。void led(void){ if(sw1 == 0)return;led = ~led;Delay(100);...}

求大神一个关于89c52单片机用S0键来启动和停止流水灯的程序,在这里先感...
\/\/键控流水灯 include "REG52.H"define DataGPIO P1\/\/显示端口 define FLOWTIME 100\/\/修改此值,改变流水速度 sbit KEY = P2^0;\/\/按键 bit Start_flag =0;\/\/流水灯控制 bit Flow_flag =0;\/\/流水 unsigned char Cnt =0;\/\/流水灯计数器 unsigned char KEY_Cnt=0;\/\/按键识别计数...

C51单片机编程,按键控制流水灯
\/\/若run=dir=1,自上而下流动 if(dir)for(i=0;i<=3;i++){ P2=led[i];delay(200);} else for(i=3;i>=0;i--){ \/\/run=1,dir=0,自下而上流动 P2=led[i];delay(200);} else P2=0xff; \/\/若run=0,全部灯灭 } } ...

相似回答