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

这篇具有很好参考价值的文章主要介绍了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进制)。

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

常见的字符的码段

显示字符 共阴极字型码 共阳极字型码
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部分

新建项目

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

 自己选择路径,起文件名(建议是用英文,但是目前中文也没有报错)LED数码管的静态显示与动态显示(Keil+Proteus),笔记

 选择AT89C51LED数码管的静态显示与动态显示(Keil+Proteus),笔记

点击是 

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

 新建C语言文件

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

LED数码管的静态显示与动态显示(Keil+Proteus),笔记 然后就是输入代码

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

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

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

LED数码管的静态显示与动态显示(Keil+Proteus),笔记 再重新把程序构建一下就可以了。(文件在项目的Objects文件夹下面)

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

Proteus部分

先要创建一个.DSN文件

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

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

添加电路图需要的元器件

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

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

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

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

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

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

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

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

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

导入hex文件(双击AT89C51)

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

左下角选择开始停止

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

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

 运行结果

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

拓展 

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

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

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

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

#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数码管的静态显示与动态显示(Keil+Proteus),笔记

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

LED数码管的动态显示

同理可得

#include<reg51.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);//延时
		}
	}
}

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

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

 流水灯

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

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

 拓展

显示学号后8位可以直接修改代码即可。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
	
uchar code dis_code[]={0x99,0xC0,0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//40200126
uchar code wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//对应输出的位置

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

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

 或者可以用移位函数来控制位控码

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
	
uchar code dis_code[]={0x99,0xC0,0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//40200126(共阳极段码表)

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

void main(){
	uchar i,j=0x80;
	while(1){
		for(i=0;i<8;i++){
			j=_crol_(j,1);//循环移位函数,将j循环左移1位
			P0=dis_code[i];//P0口输出段码
			P2=j;//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

总结

还是需要一点耐心的,其实我也不确定能不能运行成功,但是最后结果和自己理想中的一样的时候还是有点小激动的,未来继续努力。文章来源地址https://www.toymoban.com/news/detail-716671.html

到了这里,关于LED数码管的静态显示与动态显示(Keil+Proteus)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用AT89C52单片机实现数码管的静态与动态显示

            资源work1和work2(完整工程文件在笔者本人主页的资源中,免费欢迎下载)分别完成下面两个任务:         1、单片机接矩阵键盘和2个静态数码管,自行设计硬件电路,利用汇编语言,要求将按键值(0~15)在数码管显示。         主要代码: ……      

    2024年02月02日
    浏览(49)
  • LED数码管共阴极与共阳极以及数码管的显示方式

    ​​​​​​ 1.LED共阴极是指LED灯中的二极管的阴极有一个共同的接点,并且该接点连接在GND端,即处于低电平状态。 2.LED共阳极是指LED灯中的二极管的阳极有一个共同的接点,并且该接点连接在VCC端,即处于高电平状态。 1.共阴极数码管是高电平驱动,共阳极数码管是低电

    2024年02月11日
    浏览(44)
  • 数码管静态显示

      上期课程中,我们使用了按键控制蜂鸣器。本期课程中,我们将学习Cyclone IV开发板上新的器件—数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。   数码管分七段数码管和八段数码管。七段和八段的区别在于,是否包括小数点DP(Digital Point)。本

    2024年02月16日
    浏览(30)
  • 静态数码管显示

    学习芯片: EP4CE6F17C8 本次学习使用的为共阳极数码管,即用低电平点亮数码管,同样可知,共阴极数码管的阴极连在一起,即用高电平点亮数码管。 八段数码管示意图: a,b,c,d,e,f,g,dg表示八段数码管时,a为最低位,dp为最高位 八段数码管用8位二进制表示,由于本次实验使用

    2024年02月16日
    浏览(31)
  • 数码管的静态显示

    首先说一下数码管,其实就是7个led灯,加上一个小数点正好8位,和51单片机的一个端口连接。 使不同的灯亮起,就可以实现显示0到9这几个数字。 以上都是图片,下面把对应的值给到大家,0到9的十六进制值复制粘贴就好了:{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} 下面说一

    2024年02月06日
    浏览(73)
  • 单片机控制LED数码管的显示

    首先我们说说LED数码管的显示原理。 LED数码管是常见的显示器件。LED数码管为“8”字形的,其计8段(包括小数点段在内)或7段(不包括小数点段),每一段对应一个发光二极管,有共阳极和共阴极两种,如图所示。共阳极LED数码管的阳极连接在一起,公共阳极接到+5 V上;共阴极

    2024年02月01日
    浏览(46)
  • 数码管的静态显示(二)

    要按照上图的顺序传递位选和段选的数据。 因为q0是最高位,共阳极数码管结构是dp....a,所以应该先传入低位a,而a在上图中的8段2进制编码中是seg[7],所以段选信号的顺序是seg[0],...seg[7]。 因为输出信号是两个时钟,所以要进行分频,因为不能太高。因为是4分频,所以计数

    2024年03月18日
    浏览(32)
  • 【STM32+HAL+Proteus】系列学习教程---数码管显示定时

    1、STM32 基于HAL库定时器的使用; 2、加强数码管的学习。 3、具体目标:利用定时器3实现一个60秒的定时,定时时间在数码管上显示,定时时间到,蜂鸣器响一声作为提示功能。         自动生成的代码中,中断回调函数都有一个__weak ,加上了__weak 修饰符的函数,

    2024年04月09日
    浏览(79)
  • 仿真软件proteus构建七段数码管显示数字0-9实验

        七段数码管显示原理研究在前一篇博客中已经阐述过,就是利用7个数码管构建一个“8”字形,然后利用数字的形状特点,依次点亮某一些段,就可以显示数字了。     七段数码管显示数字还是二极管发光原理的利用。     这里依旧采用proteus构建硬件工程,单片机类型

    2024年02月11日
    浏览(48)
  • verilog实现数码管静态显示

    六个数码管同时间隔0.5s显示0-f。要求:使用一个顶层模块,调用计时器模块和数码管静态显示模块。 本文介绍了数码管显示原理,数码管驱动方式等等,并通过代码实现了数码管静态显示

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包