单片机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
可以用定时器设置流水灯的时间间隔,按键控制定时器开关
相似回答