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

按一下暂停,再按一下继续原来的程序。... 按一下暂停,再按一下继续原来的程序。 展开
 我来答
帐号已注销
2020-12-21 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:158万
展开全部

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

#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语言编程

宿兴电子
2024-10-18 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
GUEL86
推荐于2017-11-28 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2672万
展开全部
//流水灯 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;
}
}
}
}
更多追问追答
追问
我想要的是比如说流水灯在走  我按了下按键  流水灯就在那停住了  打个比方刚好亮到第二个 然后我在按下按键  从第二个开始  哪里暂停哪里继续  一个按键就够了    请在帮帮忙。
追答
要完全符合自己的要求,需要自己修改,自己做才能有提高。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友92b79c7
2012-10-27
知道答主
回答量:21
采纳率:0%
帮助的人:3.2万
展开全部
利用外部中断可以,在中断函数里面写入你要执行的让流水灯停止的程序,设置一个全局变量FLAG=0;每次进入中断就取反,通过判断FLAG的值来决定是暂停还是继续
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友056c810
2012-10-26
知道答主
回答量:9
采纳率:0%
帮助的人:5.9万
展开全部
可以用定时器设置流水灯的时间间隔,按键控制定时器开关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式