单片机原理及其应用——单片机控制8只发光二极管交替闪烁

一、实验要求

【实验内容】
1.用Proteus绘制硬件原理图,并设置元件参数。
2.用KeilC51软件编写点亮一个发光二极管的程序。
3.Keil C51与Proteus联调,仿真调试和硬件调试观察实验现象。
4.实现P2口连接的8只LED灯交替闪烁。
【硬件要求】
连接方法:P2.0-P2.7采用“拉电流”方式连接8只LED灯,LED的阴极通过保护电阻连接到地端。
【软件实现】
1.编程实现点亮一个发光二极管的程序。
2.编程实现P2口连接的8只LED灯交替闪烁。

二、分析

1、本实验是通过单片机的P2口做相关实验,P2口当作为输入接口时与P0、P1一样,要先向其锁存器写入1,其目的是使场效应管截止;作为输出接口时与P1口一样,因为其内部有上拉电阻即不需要另外外接上拉电阻。
2、画电路的工作原理是通过P2.0-P2.7八个口输出高低电平状态,由单片机控制8只发光二极管,使每只发光二极管点亮。因为发光二极管具有单向导通性,当加在发光二极管两端的电压超过其导通电压时,它就会导通;而超过一定的电流时,发光二极管点亮。通过单片机的I/O口连接,因为选择的是P2口,即P2.0-P2.7八个口与8只发光二极管连接,这里采用的是“拉电流”方式连接,即单片机P2各口的各引脚与发光二极管的阳极相连,而发光二极管的阴极接地,即通过保护电阻连接到地端。

三、利用Proteus仿真软件画原理图

在这里插入图片描述

四、Keil编程软件编写程序

本次实验是通过实现P2口连接的8只LED灯交替闪烁,且连接方法是通过单片机的并行输入/输出接口的P2端口P2.0-P2.7,其中各发光二极管的阴极通过保护电阻连接到地端。
通过循环依次点亮各发光二极管,且点亮一盏时其它发光二极管是熄灭的,通过一个for循环写一个可依次每一个发光二极管轮流的循环,然后该循环中通过取数组中的元素来对P2端口的P2.0-P2.7输出高低电平状态组成的十六进制数据,从而实现依次循环点亮各发光二极管,另外还要设置一个延时,即设置一个延时函数从而设置每次循环点亮的间隔时间,实现每隔一段时间点亮一盏灯,首先单片机P2口输出高电平1时对应的发光二极管点亮,而输出低电平0时对应的发光二极管熄灭,采用数组建立数组存储各端口输出高低电平状态组成的十六进制数据,且字节操作法,即unsigned char LED[]={0x01,0x02,0x04,0x08,0x10,
0x20,0x40,0x80},比如十六进制0x01表示的是二进制0000 0001,即此时点亮LED0,其它LED熄灭,十六进制0x02表示的是二进制0000 0010,即即此时点亮LED1,其它LED熄灭,依次进行下去,另外其中还要加上延时函数使各灯延时一段时间。
程序代码如下:

#include<reg51.h>
void delay()
{
	unsigned int i,j;
	for(i=0;i<1000;i++)
		for(j=0;j<125;j++);
}
void main()
{
	unsigned char LED[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//定义LED[]数组P2口输出数据
	unsigned char a;
	while(1)
	{
		for(a=0;a<8;a++)
		{
			P2=LED[a];
			delay();
		}
	}
}

如下:
在这里插入图片描述
通过for(a=0;a<8;a++)循环语句,即每次通过P2=LED[a]调用建立的LED[]数组,数组中的元素分别为8只发光二极管轮流点亮时,单片机P2口各个位输出高低电平状态组成的十六进制数据,并通过调用先前创建的delay()延时函数延时,下图生成.HEX可执行文件:
在这里插入图片描述

五、实验结果

将.HEX可执行文件导入到单片机内,并点击开始仿真,仿真结果如下,第一盏灯D1亮,而其它灯是熄灭的,随后,第一盏灯D1熄灭,第二盏灯D2亮,第二盏灯D2熄灭,第三盏灯D3亮……,第三盏灯D3熄灭,依次这样下去。
仿真结果如下:
在这里插入图片描述
由于程序中使用while(1)无限循环所以一直会这样循环下去:
在这里插入图片描述
按照电路图来连接实物,使用排线直接将P2.0-P2.7接口和LED&交通灯模块的D1-D8灯连在一起,接线如下图,要注意排线对应的各端口。
在烧录软件中设置单片机型号、串口号、最低最高波特率,然后点击“打开程序文件”,选择之前生成的可执行文件,然后打开开发板上的开关,然后点击“下载/编程”,然后右边框就会显示操作是否成功,此时就可以观察板子上LED&交通灯模块的D1-D8灯的情况:
在这里插入图片描述

版权声明:本文为CSDN博主「晚风(●•σ )」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43085848/article/details/121552519

生成海报
点赞 0

晚风(●•σ )

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于STM32的室内环境监测系统

设计简介: 本设计是基于单片机的室内环境监测器,主要实现以下功能: 可实现LCD1602显示环境数据实时监测一氧化碳、甲烷、烟雾值空气质量大于各自限值报警,并通过TTS报警 标签&#x

基于stm32f407的示波器

一.设计要求 二.整体思路 硬件部分主要负责电压的缩放以及垂直灵敏度的控制,因为stm32的大部分引脚最高输入电压为3.3v,而要求的电压需要50v,需要进行电压缩放。 软件部分主要负责方波的实现&#x

实验一 stm32F407VETx点亮流水灯

二、设计指标 使电路板上的8个LED轮流点亮,并按键控制点亮速度。 三、操作 1、CubeMX操作 1.1依据开发板LED引脚设置CubeMX中8个LED的引脚为GPIO_Output模式, 2、按键设置

apm32串口发送字符串总结

最近在弄apm32,在弄串口发送接收字符串,之前在实习的时候弄过GD32,有点基础,要操作寄存器标志位,所用的库函数不大一样,方法是相同的。主要代码如下: for(i 0;