本文章意在记录自己学习以及分享仿真成功乐趣,需要的同学往里走。
也是借着学校要交实验报告理由整理一下自己的代码和思路。
本文章代码在project7.8仿真软件实现了
1.LED灯实现从上到下点亮,再从下到上点亮的流水灯循环两次。
2.从上到下依次点亮,从下到上依次熄灭
3.两侧同时向中间流动,中间向两侧依次点亮
废话就不多写了什么实验内容,实验原理放在文章最后需要的同学自取。
二、实验内容
熟悉Keil C51集成环境软件的安装和使用方法。
1.照接线图编写程序,完善给出程序,实现以下功能。
2.要求LED灯实现从上到下依次点亮,再从下到上依次点亮。完成后实现从两侧向中间循环点亮,再从中间往外循环点亮。功能完成后循环上述过程。
3.观察实验结果,验证程序是否正确。延时实现LED流水灯效果,每个i/o端口的八个口都接led二极管作跑马灯。在本实验中,p0、p1、p2、p3作为输出口,每个接8发光二极管,编写程序,使发光二极管循环点亮。
三、实验原理
1.led二极管,电流由n端流向p端点亮。本实验led二极管由高电平点亮。
2.AY89C51单片机端口可以根据需要输出低电平和高电平,通过led可知单片机输出高电平。如图1.1可知。
图1.1电路原理图
3.3.keil5 c51进行流水灯代码的实现。
四,实验代码(不能运行可以借鉴思路)
#include <REGX51.H>
unsigned char led,i,j,k,led_up,led_down,num;//led高电平点亮
void delay(unsigned int xms)//延迟函数
{
unsigned char i,j;
while(xms)
{
i=2;
j=239;
do
{
while(--j);
}while(--i);
xms--;
}
}
void main(void)
{
unsigned char j;//整个代码块的循环
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;//
/*先向上在向下循环两组*/
while(1)
{
for(j=0;j<2;j++)
{
led=0x01;// 0000 0001
P0=led;
delay(250);
for(k=1;k<8;k++)//p0 由上至下
{
led=led<<1;
P0=led;
delay(250);
P0=0X00;//将p0口的全部清0
}
led=0x01;
P1=led;
delay(250);//
for(k=1;k<8;k++)
{
led=led<<1;
P1=led;
delay(250);
P1=0x00;
}
led=0x01;
P2=led;
delay(250);
for(k=1;k<8;k++)
{
led=led<<1;
P2=led;
delay(250);
P2=0X00;
}
led=0x01;
P3=led;
delay(250);
for(k=1;k<8;k++)
{
led=led<<1;
P3=led;
delay(250);
P3=0x00;
}
}
/*先向下再线上循环*/
for(j=0;j<2;j++)
{
led=0x80;// 1000 0000
P3=led;
delay(250);
for(k=1;k<8;k++)//p0 由上至下
{
led=led>>1;
P3=led;
delay(250);
P3=0X00;//将p0口的全部清0
}
led=0x80;
P2=led;
delay(250);//
for(k=1;k<8;k++)
{
led=led>>1;
P2=led;
delay(250);
P2=0x00;
}
led=0x80;
P1=led;
delay(250);
for(k=1;k<8;k++)
{
led=led>>1;
P1=led;
delay(250);
P1=0X00;
}
led=0x80;
P0=led;
delay(250);
for(k=1;k<8;k++)
{
led=led>>1;
P0=led;
delay(250);
P0=0x00;
}
}
/* 由上依次增加,再以此减少*///一次
for(j=1;j<2;j++)
{
led=0xfe;//1111 1110
for(k=0;k<8;k++)
{
P0=~led;
led=led<<1;
delay(250);
}
led=0xfe;
for(k=0;k<8;k++)
{
P1=~led;
led=led<<1;
delay(250);
}
led=0xfe;//1111 1110
for(k=0;k<8;k++)
{
P2=~led;
led=led<<1;
delay(250);
}
led=0xfe;
for(k=0;k<8;k++)
{
P3=~led;
led=led<<1;
delay(250);
}
}
/*先从下往上走*/
for(j=1;j<2;j++)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
led=0x7f;//0111 1111
for(k=0;k<8;k++)
{
P3=led;
led=led>>1;
delay(250);
}
led=0x7f;
for(k=0;k<8;k++)
{
P2=led;
led=led>>1;
delay(250);
}
led=0x7f;//0111 1111
for(k=0;k<8;k++)
{
P1=led;
led=led>>1;
delay(250);
}
led=0x7f;//0111 1111
for(k=0;k<8;k++)
{
P0=led;
led=led>>1;
delay(250);
}
}
/*两边向中间流动 灯亮一下灭*/
for(j=0;j<2;j++)
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
led_down=0x01;//0000 0001 led系列 向下
led_up=0x80;//1000 0000 led1系列
P0=led_down;
P3=led_up;
delay(250);
for(k=1;k<8;k++)
{
led_down=led_down<<1;//向下
led_up=led_up>>1;//线上
P0=led_down;
P3=led_up;
delay(250);
P0=0x00;//清零
P3=0x00;//P3口全灭
}
led_down=0x01;//0000 0001
led_up=0x80;
P1=led_down;
P2=led_up;
delay(250);
for(k=1;k<8;k++)
{
led_down=led_down<<1;
led_up=led_up>>1;
P1=led_down;
P2=led_up;
delay(250);
P1=0x00;
P2=0x00;
}
/* 中间向两边,依次点亮*/
led_up=0x7f;//0000 0001
led_down=0xfe;//1111 1110
for(k=0;k<8;k++)
{
P1=~led_up;
P2=~led_down;
led_up=led_up>>1;
led_down=led_down<<1;
delay(250);
}
led_up=0x7f;
led_down=0xfe;
for(k=0;k<8;k++)
{
P0=~led_up;
P3=~led_down;
led_up=led_up>>1;
led_down=led_down<<1;
delay(250);
}
}
}
}
}
5、实验效果展示