四种方法实现单片机双向流水灯
四种方法实现单片机双向流水灯本实验使用AT89C51芯片的P1端口,连接8个发光二极管,电路中使用470Ω电阻保护电路,其中发光二极管正极连接电源,负极连接P1.0—P1.7,通过给P1口不同的值控制不同的灯亮,中间使用延时函数,延时500毫秒,实现流水效果,下面使用4种算法实现双向流水灯。绘制的PROTEUS仿真电路图方法一:顺序结构#include<reg51.h>void di
·
四种方法实现单片机双向流水灯
本实验使用AT89C51芯片的P1端口,连接8个发光二极管,电路中使用470Ω电阻保护电路,其中发光二极管正极连接电源,负极连接P1.0—P1.7,通过给P1口不同的值控制不同的灯亮,中间使用延时函数,延时500毫秒,实现流水效果,下面使用4种算法实现双向流水灯。
绘制的PROTEUS仿真电路图
方法一:顺序结构
#include<reg51.h>
void display(unsigned int a){
unsigned int i = 0;
unsigned int j = 0;
for(i; i < a; i++)
for(j; j < 24000; j++);//晶振24MHZ时约等于1毫秒
}
void main(){
int led[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
while(1){//向下流水
P1=0xfe;
display(500);
P1=0xfd;
display(500);
P1=0xfb;
display(500);
P1=0xf7;
display(500);
P1=0xef;
display(500);
P1=0xdf;
display(500);
P1=0xbf;
display(500);
P1=0x7f;
display(500);
//向上流水
P1=0x7f;
display(500);
P1=0xbf;
display(500);
P1=0xdf;
display(500);
P1=0xef;
display(500);
P1=0xf7;
display(500);
P1=0xfb;
display(500);
P1=0xfd;
display(500);
P1=0xfe;
}
}
方法二:数组结构
#include<reg51.h>
void display(unsigned int a){
unsigned int i = 0;
unsigned int j = 0;
for(i; i < a; i++)
for(j; j < 24000; j++);//晶振24MHZ时约等于1毫秒
}
void main(){
int i=0;
int led[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
while(1){
for(i;i<=7;i++){//向下流
P1 = led[i];
display(500);
}
for(i=7;i>0;i--){//向上流
P1 = led[i];
display(500);
}
}
}
方法三:循环移位
#include<reg51.h>
#include<intrins.h>
void display(unsigned int a){
unsigned int i = 0;
unsigned int j = 0;
for(i; i < a; i++)
for(j; j < 24000; j++);//晶振24MHZ时约等于1毫秒
}
void main()
{
unsigned char i,temp;
while(1)
{
temp=0xfe;
for(i=1;i<8;i++)
{
P1=temp;
display(500);
temp=_crol_(temp,1);
}
for(i=1;i<8;i++)
{
P1=temp;
display(500);
temp=_cror_(temp,1);
}
}
}
方法四:移位运算
#include<reg51.h>
#include<intrins.h>
void display(unsigned int a){
unsigned int i = 0;
unsigned int j = 0;
for(i; i < a; i++)
for(j; j < 24000; j++);//晶振24MHZ时约等于1毫秒
}
void main()
{
unsigned char i,temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++)
{
P1=~temp;
display(500);
temp=temp<<1;
}
temp=0x80;
for(i=0;i<8;i++)
{
P1=~temp;
display(500);
temp=temp>>1;
}
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)