
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
void Delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void main(){
uchar i,j;
while(1)
{
j=0x01; //8个流水灯逐个闪动
for(i=0;i<8;i++)
{
P0=~j;
Delayms(300);
j<<=1;
}
j=0x80; //8个流水灯反向逐个闪动
for(i=0;i<8;i++)
{
P0=~j;
Delayms(300);
j>>=1;
}
}
}
#include <reg52h>
#define LED P0 /宏定义LED接于P0口/
void delay (int); /声明延迟子函数/
main()
{
int i;
while(1)
{
LED=0xfe;
for(i=0;i<7;i++)
{
delay(100);
LED=(LED<<1)|0x01; /最低位LED灯左移一位后进行或运算使得最低位不会为“0”/
}
for(i=0;i<7;i++)
{
delay(100);
LED=(LED>>1)|0x80; /最低位LED灯右移一位后进行或运算使得最高位不会为“0”/
}
LED=0xff;
for(i=0;i<4;i++)
{
delay(300);
LED=~LED; /所有的LED灯取反全亮或者全灭/
}
}
}
#include <reg52h> //52系列单片机头文件
#define uint unsigned int //宏定义
sbit led1=P1^0; //声明单片机P1口的第一位
void delay1s(); //声明子函数
void main() //主函数
{
while(1) //大循环
{
led1=0; /点亮第一个发光二极管/
delay1s(); //调用延时子函数
led1=1; /关闭第一个发光二极管/
delay1s(); //调用延时子函数
}
}
void delay1s() //子函数体
{
uint i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
首先要看Led灯和单片机的连接情况,如果只是控制亮灭,只需要看单片机端口控制即可,关键是配置端口的DDRx方向寄存器和PORTx数据寄存器,比如端口A的0引脚控制一个灯,要配置它的输出高电平或是低电平以达到控制灯的亮灭,那就
灯亮:
DDRA |= BIT(0); //输出
PORTA |= BIT(0);//高电平
灯灭:
DDRA |= BIT(0); //输出
PORTA &= ~BIT(0);//低电平
其余的就看你电路如何连接的,每个端口寄存器的每一位控制一个引脚,你可以查查芯片的数据手册,上边有个表格的。
如果你要控制灯的亮暗程度,选择使用PWM输出来控制,需要看定时计数器。
方法:
1:设定一个变量i,可以从0到3循环的变化
2:检测一个经过消抖处理的按键,按一下,i+1
3:当i值为各个值时,执行相应的花样。
流水灯参考程序
#include
#include
#define uchar unsigned char
uchar j,temp;
void delay(unsigned int ms)
{
uchar t;
while(ms--)
for(t=0;t<123;t++);
}
void main()
{
P1=0xff;
delay(500);
temp=0xfe; //有点怪,led接在P23~P26
for(j=0;j<4;j++)
{
P1=temp;
delay(500);
temp=_crol_(temp,1);
}
P1=0xff;
while(1);
}
#include<reg51h>
#define uchar unsigned char
sbit c10=P1^0;
sbit c11=P1^1;
sbit c12=P1^2;
sbit c13=P1^3;
uchar led1,led3;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
uchar keyval=0xff;
led1=0xfe;
led3=0xf8;
while(1)
{
if(c10==0)
{
delay(10);
if(c10==0)
{
while(c10==0);
keyval=0;
}
}
if(c11==0)
{
delay(10);
if(c11==0)
{
while(c11==0);
keyval=1;
}
}
if(c12==0)
{
delay(10);
if(c12==0)
{
while(c12==0);
keyval=2;
}
}
if(c13==0)
{
delay(10);
if(c13==0)
{
while(c13==0);
keyval=3;
}
}
switch(keyval)
{
case 0:
P0=led1;
led1=(led1<<1)|0x01;
if(led1==0xff)led1=0xfe;
delay(100);
case 1:
P0=led1;
led1=(led1>>1)|0x80;
if(led1==0xff)led1=0x7f;
delay(100);
case 2:
P0=led3;
led3=(led3<<1)|0x01;
if((led3&0xf0)==0x30)led3=0x3e;
if((led3&0xf0)==0x70)led3=0x7c;
if((led3&0xf0)==0xf0)led3=0xf8;
break;
case 3:
P0=led3;
led3=(led3>>1)|0x80;
if((led3&0x0f)==0x0c)led3=0x7c;
if((led3&0x0f)==0x0e)led3=0x3e;
if((led3&0x0f)==0x0f)led3=0x1f;
break;
default:break;
}
}
}
#include<reg51h>
#define uchar unsigned char
uchar led[5]={0x7e,0x3c,0x18,0x00,0xff};
uchar num;
sbit key=P1^0;
main()
{
P0=0xff;
num=0;
while(1)
{
if(key==0)
{
while(key==0);
P0=led[num];
num++;
num%=5;
}
}
}
以上就是关于设计一个LED流水灯电路并写出程序.全部的内容,包括:设计一个LED流水灯电路并写出程序.、利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流水形式编程,不是用c语言 编、单片机控制一个led灯亮灭C编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)