LED数码管的静态显示与动态显示(Keil+Proteus)

前言

就是今天看了一下书上的单片机实验,发现很多的器件在Proteus中都不知道怎么去查找,然后想做一下这个实验,尝试能不能实现,LED数码管的两个还可以实现,但是用LED点阵显示器的时候他那个网络标号不知道是什么情况,有两个东西,所以我也还没搞懂,先暂时就是把LED数码管的静态显示和动态显示来记录一下。由于之前的Keil版本太老了,然后我就下载了最新版的,不过应该也没有什么影响吧。实验完成的就是以下两个:

1.用静态的方法显示学号的最后两位。

2.用动态的方法流水显示学号的后面六位。

实验需要用到的元器件符号(在Proteus中)

|------------|-----------------------|
| 元件名称 | Proteus关键字 |
| 单片机 | AT89C51 |
| 晶体振荡器 | CRYSTAL |
| 蓝色的数码管 | 7SEG-COM-AN-BLUE |
| 绿色的数码管 | 7SEG-COM-AN-GRN |
| 电阻 | RES |
| 七段数码管 | 7SEG-MPX8-CA-BLUE |
| 复位按钮 | BUTTON |
| 电容 | CAP |
| 电解电容 | CAP-ELEC |
| NPN三极管 | NPN |
| 排阻 | RX8 |

**LED数码管的显示原理是利用LED的发光特性,通过控制LED的亮灭来显示不同的数字或字符。**它由多个LED灯组成,通常为七个LED灯,排列成数字"8"的形状。每个LED灯代表一个数字段,分别为a、b、c、d、e、f、g段,其中a、b、c、d、e、f、g段分别对应数字"0"到"9"中的不同段。

**LED数码管的控制方式有两种,一种是共阳极控制,一种是共阴极控制。**共阳极控制是指将所有LED灯的阳极连接在一起,通过控制各个阴极的接通情况来控制LED数码管的亮灭;共阴极控制则是将所有LED灯的阴极连接在一起,通过控制各个阳极的接通情况来控制LED数码管的亮灭。

比如我采用的是共阳极的数码管,想输出2,他共阳极就是都接着同一个电源了,要想他亮,对应的位置就是0(低电平),1(高电平)就不亮,然后在纸上画着对应位置,就可以写出对应的字型码了(采用16进制)。

常见的字符的码段

|----------|------------|------------|
| 显示字符 | 共阴极字型码 | 共阳极字型码 |
| 0 | 3FH | C0H |
| 1 | 06H | F9H |
| 2 | 5BH | A4H |
| 3 | 4FH | B0H |
| 4 | 66H | 99H |
| 5 | 6DH | 92H |
| 6 | 7DH | 82H |
| 7 | 07H | F8H |
| 8 | 7FH | 80H |
| 9 | 6FH | 90H |
| A | 77H | 88H |
| b | 7CH | 83H |
| C | 39H | C6H |
| d | 5EH | A1H |
| E | 79H | 86H |
| F | 71H | 8EH |
| P | 73H | 8CH |
| U | 3EH | C1H |
| T | 31H | CEH |
| y | 6EH | 91H |
| H | 76H | 89H |
| L | 38H | C7H |
| "灭" | 00H | FFH |

LED数码管的静态显示

首先就是要理解他的逻辑,通过Keil生成对应的.hex文件,再导入到Proteus中进行模拟。

Keil部分

新建项目

自己选择路径,起文件名(建议是用英文,但是目前中文也没有报错)

选择AT89C51

点击是

新建C语言文件

然后就是输入代码

cpp 复制代码
#include"reg51.h" //包含8051单片机寄存器定义的头文件
void main(void){
	P0=0xa4;//将数字"2"的码段(共阳极)送P0口
	P1=0x82;//将数字"6"的码段(共阳极)送P1口
	while(1);//无限循环
}

没有错误就问题不大,但是此时我们还没有生成.hex文件,需要勾选一下。

再重新把程序构建一下就可以了。(文件在项目的Objects文件夹下面)

到这里Keil部分就可以了,接着就是Proteus部分:

Proteus部分

先要创建一个.DSN文件

添加电路图需要的元器件

然后就是添加后连线(直接连线就不用说了),这里说一下网络标号

输入标号(标号一致表示连接)

电源在左边的工具栏和通过鼠标右键都可以找到

导入hex文件(双击AT89C51)

左下角选择开始停止

运行结果

拓展

本来以为买的是一样的,结果发现不太一样。这个选择的是AT89C52.需要借助,STC-ISP.

之后就是下载/编程,就烧录到单片机里面了。

还是有区别的,这个程序。这个的有一个消影的布置,就是如果不这样就会导致输出的时候两个会重合,所以需要有清零重新打印的布置。

cpp 复制代码
#include<regx52.h>
//打印的位置
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x7F,0x6F};
//延时函数
void delay(unsigned int xms){
	unsigned char i,j;
	while(xms--){
		i=2;
		j=239;
		do{
			while(--j);
		}while(--i);
	}
}
//打印的数字
void Nixie(unsigned char Location,Number){
	switch(Location){
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	//消影
	P0=NixieTable[Number];
	delay(1);
	#P0=0x00;
}

void main(){
		while(1){
			Nixie(1,2);
			Nixie(2,6);
		}
}

LED数码管的动态显示

同理可得

cpp 复制代码
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
	
uchar code dis_code[]={0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//200126
uchar code wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20};//对应输出的位置

void delay(uint t){
	uchar i;
	while(t--)
		for(i=0;i<200;i++);
}

void main(){
	uchar i;
	while(1){
		for(i=0;i<6;i++){
			P0=dis_code[i];//P0口输出段码
			P2=wei_code[i];//P2口输入位控码
			delay(123);//延时
		}
	}
}

总线可以通过右键来找到(左边也有,还有电源和接地的符号)

流水灯

参考链接

KeilMDK5软件写不了汉字注释怎么解决?_keil怎么输入中文_第九荒岛的博客-CSDN博客https://blog.csdn.net/qq_46600282/article/details/128550120proteus设计教程-数码管使用方法_proteus数码管_zd845101500的博客-CSDN博客https://blog.csdn.net/zd845101500/article/details/126663186proteus常用元件图示和名称介绍 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/518410309?utm_id=0单片机Proteus中的这个16个引脚的元器件是什么?_百度知道 (baidu.com)https://zhidao.baidu.com/question/2121623824451309267.htmlProteus如何设置网络标号-百度经验 (baidu.com)https://jingyan.baidu.com/article/adc8151342d5a7b623bf73f3.html怎样把HEX文件载入PROTEUS 7仿真软件单片机里_360问答 (so.com)https://wenda.so.com/q/1676834827210755proteus电源在哪-百度经验 (baidu.com)https://jingyan.baidu.com/article/4e5b3e192806d8d0911e2423.html

51单片机入门教程-2020版 程序全程纯手打 从零开始入门_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Mb411e7re/?spm_id_from=333.1007.0.0&vd_source=7c3bfbf39d037fe80c97234396acc524

总结

还是需要一点耐心的,其实我也不确定能不能运行成功,但是最后结果和自己理想中的一样的时候还是有点小激动的,未来继续努力。

相关推荐
m_Molly1 分钟前
C++源代码封装成dll动态链接库,并在WPF项目中使用的步骤说明
笔记
完球了1 小时前
【Day03-MySQL单表】
数据库·笔记·学习·mysql·sql8.0
酒饮微醉-2 小时前
论文阅读--Planning-oriented Autonomous Driving(二)
论文阅读·笔记·学习·自动驾驶
你可以叫我仔哥呀2 小时前
学习笔记JVM篇(五)
jvm·笔记·学习
码农0002 小时前
nginx学习笔记
笔记·学习·nginx
Zww08912 小时前
html,css基础知识点笔记(二)
css·笔记·html
NuyoahC3 小时前
Python语法(二)——函数
开发语言·笔记·python
weixin_750335523 小时前
Datawhale X 南瓜书 task02学习笔记
笔记·python·学习
火眼99883 小时前
《使用 LangChain 进行大模型应用开发》学习笔记(四)
人工智能·笔记·langchain·ai编程
waterHBO4 小时前
TensorFlow 笔记
人工智能·笔记·tensorflow