Ⅰ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++) //8个流水灯依次反向全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp>>=1;
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
(1)单片机for语句控制流水灯扩展阅读
51单片机流水灯的源代码如下
#include<reg51.h>
#include<intrins.h>
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<110;i++);
}
main()
{
inti;
while(1)
{
P0=0xfe;
for(i=0;i<8;i++)
{
P0=_crol_(P0,1);
delay(500);
}
}
}
Ⅱ keil软件用单片机控制8个LED流水灯来回点亮(C语言程序)
#include "reg51.h"
main()
{
unsigned int i,j;
while(1)
{
P1=0xfe; //点亮第一个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfd; //点亮第二个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xfb; //点亮第三个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xf7; //点亮第四个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xef; //点亮第五个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xdf; //点亮第六个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0xbf; //点亮第七个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
P1=0x7f; //点亮第八个LED
for(i=200;i>0;i--)
for(j=500;j>0;j--);
}
}
或:
#include "reg51.h"
void delay(unsigned int t)
{
unsigned inti,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char w,i;
while(1)
{
w=0xfe;
for (i=0;i<8;i++)
{
P1=w; //循环点亮LED
w<<=1; //点亮灯的位置移动,最低位补0
w=w|0x01; //将最低位置1
delay(500); //延时
}
}
}
或:
#include "reg51.h"
//程序中使用_crol_函数,所以要包含头文件"intrins.h"
#include "intrins.h"
void delay(unsigned int t)
{
unsigned int i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned char temp;
temp=0xfe;
while(1)
{
P1=temp;
delay(500); //延时
temp=_crol_(temp,1); //点亮LED的位置循环左移一位
}
}
Ⅲ 用两组I/O口控制16个流水灯的C51程序
在使用C51进行编程时,通过数组定义可以简化控制多个LED灯的操作。比如定义一个包含16个LED状态的数组,如下所示:
uchar led[]={0xfe,0xfd,0xfb,0x07,0x0f,0x1f,0x3f,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
接着使用for循环将数组中的值依次赋给P0口,代码如下:
for(i=0;i<8;i++) {
P0=led[i];
delayms(1000)
}
这种方式适用于控制较少数量的LED灯。如果需要直接赋值,代码会稍显复杂,每次重新赋值P0都需要加入延时。
另外,还有一种更为简洁的程序实现方式,如下:
#include //包含单片机寄存器的头文件
void delay(void) {
unsigned int n;
for(n=0;n<30000;n++) ;
}
void main(void) {
unsigned char i;
while(1) {
P1=0xff;
delay();
for(i=0;i<8;i++)//设置循环次数为8 {
P1=P1>>1; //每次循环P1的各二进位右移1位,高位补0
delay(); //调用延时函数
}}
}
此程序通过循环右移P1的值来实现LED灯的流水效果,同时加入延时函数以控制闪烁速度。
该程序利用了位操作的特性,使得LED灯的控制更为灵活。通过不断右移P1的值,可以实现流水灯的效果。每次循环时,P1的值会右移一位,高位补0,从而实现LED灯的依次点亮。
整个程序中,通过while(1)循环确保程序持续运行。每次循环时,P1的值右移一位,并调用延时函数以控制闪烁速度。这样,就可以实现多个LED灯的流水效果。
这种编程方式简洁明了,易于理解和维护,适用于控制多个LED灯的流水效果。通过不断右移P1的值,可以实现LED灯的依次点亮,从而达到流水灯的效果。
Ⅳ C51单片机编程,按键控制流水灯
#include "reg51.h"
unsigned char led[]={0xfe,0xfd,0xfb,0xf7}; //LED灯的花样数据
void delay(unsigned char time){ //延时函数
unsigned int j=15000;
for(;time>0;time--)
for(;j>0;j--);
}
void main(){
bit dir=0,run=0; //标志位定义及初始化
char i;
while(1){
switch (P0 & 0x0f){ //读取键值
case 0x0e:run=1;break; //K1动作,设run=1
case 0x0d:run=0,dir=0;break; // K2动作,设run=dir=0
case 0x0b:dir=1;break; //K3动作,设dir=1
case 0x07:dir=0;break; //K4动作,设dir=0
}
if (run) //若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,全部灯灭
}
}
Ⅳ 单片机流水灯程序
单片机流水灯程序答案:
下面是一个基于单片机的流水灯程序示例。
详细解释:
1. 程序概述:
此程序用于控制单片机连接的LED灯,实现流水灯效果。即LED灯会依次亮起,形成一个流动的灯光效果。
2. 程序逻辑:
* 初始化:设置单片机端口的方向为输出,并初始化所有LED灯为熄灭状态。
* 主循环:在单片机的主循环中,逐个控制端口位,使每个LED灯依次亮起。通过延时函数控制每个灯亮的时间,形成流水灯效果。
* 延时函数:为了控制LED灯的亮起和熄灭速度,需要加入延时函数。这个延时函数可以根据需要进行调整,以达到最佳效果。
3. 代码实现:
c
#include <单片机头文件.h> // 根据实际单片机型号替换头文件
void delay; // 延时函数声明
void main {
P1 = 0x00; // 初始化端口,所有LED灯熄灭
while { // 主循环
for { // 控制8个LED灯
P1 = ~; // 依次点亮LED灯
delay; // 延时函数,控制点亮时间
}
}
}
void delay { // 简单的延时函数实现
unsigned int j;
for;
}
注意:以上代码仅为示例,实际应用中需要根据单片机的具体型号和硬件连接情况进行调整。单片机的编程语言和具体语法也会因型号不同而有所差异。此外,延时函数的实现也可能更为复杂,这里为了简单明了而采用了一个基础的实现方式。在实际应用中,可能还需要考虑其他因素,如中断、外部触发等。请根据具体需求进行编程和调试。