目录
实验内容
基于Proteus8.13仿真软件,实现51单片机对流水灯的控制,链接单片机的io控制。
Proteus电路连接
寻找元件
首先,在Proteus上找出所需元器件完成电路的连接,操作如下图所示:
本次所需元件名如下
自上而下分别是51单片机、按钮、电容、电解电容、晶振、红色led、电阻、8位排阻。(还需查询其他元件名称可跳转至改链接http://t.csdnimg.cn/NXfsa)
电路原理图
keil 代码
代码主要内容
头文件
延时函数:对led状态的保持
for循环:通过循环对P1io口进行移位赋值
led控制规则
本文中,led是负极接单片机,故需要单片机输出低电平方可点亮led
初始状态点亮第一颗led,P1.0口输出低电平,其余为高电平,如图所示低四位为1110、高四位为1111,8+4+2+1=F,8+4+2+0=E,二进制转16进制1111 1110=0xfe,无大小写区,(二进制码的顺序与io口的编码号顺序是相反的,只需这样记住即可)
源码
本代码中有四个for循环
第一个for显示效果为从第一颗led(P1.0口led)开始亮依次亮起。
第二个for效果为将第一个for亮起的八个led,从第一颗led(P1.0口led)开始依次熄灭。
第三个for为从第八颗led(P1.7口led)开始反向流水灯。
第四个for效果为将第三个for亮起的八个led,从第八颗led(P1.7口led)开始依次熄灭。
/*******************************************************************************
* 文件名称:LED流水灯控制实验
* 作者:林帆在努力
* 日期版本:2024.09.08
*******************************************************************************/
#include "reg51.h" //头文件引用
void Delay(unsigned int t); //延时函数声名
void main() // 主函数
{
unsigned char i=0;
while(1)
{
for(i=0;i<8;i++)//1-8 1111 1110
{
P1 = 0XFe<<i; //通过for循环左移操作对P1的八个位进行赋值
Delay(50000); //延时500ms,机械延时,大约等于500ms
}
for(i=0;i<8;i++)//1-8 0000 0001初始态
{
P1 = ~(0XFe<<i);//对P1的八个位的值进行取反
Delay(50000);
}
for(i=0;i<8;i++)//8-1 0111 1111初始态
{
P1 = 0X7f>>i;
Delay(50000);
}
for(i=0;i<8;i++)//8-1 1000 0000初始态
{
P1 = ~(0X7f>>i);
Delay(50000);
}
}
}
void Delay(unsigned int t)//延时函数,因为卸载main函数的下面,所以需要在main前面进行一次声名
{
while(t--);
}