单片机 请问流水灯程序一个按键单次按下控制改变 P0.0到P0.7不断循环左(右)移方向

供稿:hz-xin.com     日期:2025-01-14
单片机流水灯如何结束程序,比如p0.0~p0.7当灯亮到p0.7的时候就结束不循环工作,就是每次上电后只运行一次

#include
#include//包含后面用到的a= _crol_(a,1) 即每次a都循环左移一次
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++)
;
}

void main(void)
{
P1 = 0xff;
a = 0xfe;
for(i = 0;i<3;i++)
{
P1 = a;
delay();
a = _crol_(a,1);
}
}

现在你可能还没接触到定时器,但是循环左移/右移在小灯方面还是挺好用的~~~好好学哈

如果你不会写程序,给你了也没用
给你个思路:预先定于一个寄存器KEYNUM,首先有按键检测程序,每检测到一次按键,KEYNUM+1。在显示程序里判断KEYNUM是几,如果是1则第一个灯亮,其他的灭,依次类推,如果KEYNUM=8,第八个灯亮,同时清除KWENUM.

我说一个可行的吧,但是不一定是最好的。
定义一个位变量 bit fangxiang=1 ; //1表示一个方向,0表示另一个方向。
用定时器自动控制灯移动。
主循环里面这样写

while(1)
{
检测P10按键;
如果有按键;
fangxiang=!方向;

}

定时器函数里这样写
{
if(方向==1)
{
右移;
}
else
{
左移;
}
}

这样主循环只检测按键,检测到之后改变方向值,定时器检测方向值,不同的方向值调用不同的移动函数。

/*******************************************************************************************************/
#include <reg51.h>

sbit KK=P3^2;//按键
char AA[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯编码
int i;
char fe;
void YS(int hs);//延时函数
/*******************************************************************************************************/
void main()
{
fe=0;//初始化方向标识符
while(1)
{
P2=AA[i];//流水灯状态输出
YS(20); //延时,点亮时间设定
if(fe==0){i++; if(i>7){i=0;}}//根据 fe 的值,执行对应的方向
else{i--;if(i<0){i=7;} }

if(KK==0)//按键检测
{
YS(5);//延时去抖
if(KK==0){ fe=~fe; while(!KK); }//如果仍然被按下,方向标识符取反
}
}
}
/*******************************************************************************************************/
void YS( int hs)//延时函数
{
int hk;

for(;hs>0;hs--)
{ for(hk=500;hk>0;hk--); }// 10
}
/*******************************************************************************************************/

这个简单些,并通过实物测试通过

并附有注释,方便学习

#include <regx52.h>
#include <intrins.h>
char flag,i;
void delay_ms(char t)
{
char i;
while(t--)
{
for(i=0;i<120;i++);
}
}
void main(void)
{
P0=0xfe;
while(1)
{
if(flag)
_crol_(P0,1);
else
_cror_(P0,1);
if(P1_0==0)
{
delay_ms(10);
if(P1_0==0)
{
if(flag==0)
flag=1;
else
flag=0;
}
i++;
if(i>7)
i=0;
}
}
}

《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 第03...
实例23:用do-while语句控制P0口8位LED流水点亮 实例24:用字符型数组控制P0口8位LED流水点亮 实例25: 用P0口显示字符串常量 实例26:用P0 口显示指针运算结果 实例27:用指针数组控制P0口8位LED流水点亮 实例28:用数组的指针控制P0 口8 位LED流水点亮 实例29:用P0 、P1口显示整型函数返回值 ...

单片机实训总结范文5篇
其中分支程序分别为:AD转换模块(状态号为0),数字模块状态号为1),倒计时模块(状态号为2),电子钟模块(状态号为3),功能组合模块(状态号为4),流水灯模块(状态号为5)。 2 功能子程序设计 2.1 流水灯模块 流水灯模块利用单片机的P3口,通过给P3口的各位送低电平,相应的实现流水灯有规律的点亮。 2.2 30秒倒计时...

单片机开发板哪个好?我是电子信息工程专业大一学生,想学习一下单片
3、将书上的范例程序烧入单片机跑(或者仿真,看程序运行)4、当你做完IO流水灯实验、串口收发数据实验,再回去看书,能有更深的体会。

电子信息工程是干什么的~~以后做什么工作~~
自己做电路板面试的,这是一个很好的经验可以借鉴。所以建议大家有条件的话面 试时可以带上一块自己做的有一定深度(数字钟,流水灯之类的就免了)的作品, 在别人与面试官大肆吹水的时候,你和面试官讨论一下电路板的问题,其效果大家 也应该明白。我面试时就是带一块我参加挑战杯作品的电路板。 选择找工要准...