数码管控制显示说明
单片机数码管显示实验总结

单片机数码管显示实验总结单片机数码管显示实验总结一、实验目的本次实验旨在通过单片机控制数码管显示,掌握数码管的工作原理、编程控制方法以及单片机与数码管的接口技术。
通过实验,提高自己的动手能力和编程技能,为今后的学习和实际工作打下坚实的基础。
二、实验原理数码管是一种常用的电子显示器件,它由多个LED组成,通过控制各个LED的亮灭来显示不同的数字或字符。
本次实验采用的是共阴极数码管,它由8个LED组成,通过单片机控制每个LED的亮灭状态来显示不同的数字或字符。
三、实验步骤1.硬件准备(1)选择合适的单片机开发板,如Arduino、STM32等。
(2)购买数码管及相应的驱动电路。
(3)准备杜邦线、电阻、电容等电子元件。
2.硬件连接(1)将数码管与单片机开发板连接起来。
(2)根据数码管驱动电路的要求,连接电源、地线和控制信号线。
(3)连接电源后,打开开发板电源,观察数码管的显示效果。
3.编程控制(1)在开发板上编写程序,控制数码管显示不同的数字或字符。
(2)使用相应的编译器将程序编译成可执行文件,上传到开发板上。
(3)观察数码管的显示效果,调试程序,使其达到预期效果。
4.测试与评估(1)在不同情况下测试数码管的显示效果,如按键输入、传感器数据等。
(2)对程序进行优化和改进,提高程序的效率和稳定性。
(3)总结实验过程中的问题和解决方法,为今后的学习和实际工作提供参考。
四、实验结果及分析1.实验结果在实验过程中,我们成功地实现了对数码管的编程控制,使其能够根据不同的输入显示不同的数字或字符。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
经过调试和改进,我们解决了这些问题,使数码管的显示效果更加理想。
2.结果分析通过本次实验,我们深入了解了数码管的工作原理和编程控制方法,掌握了单片机与数码管的接口技术。
同时,我们也发现了一些问题,如数码管的亮度不够、显示的数字不清晰等。
这些问题的出现可能与硬件连接、编程控制等方面有关。
数码管显示电路的原理

数码管显示电路的原理
数码管显示电路通过控制电压信号的高低来驱动数码管的不同段进行显示。
数码管是由多个发光二极管组成的,每个发光二极管对应显示一个数字或符号。
数码管显示电路主要由以下几个部分组成:
1. 数字信号发生器:用来产生需要显示的数字或符号的电信号。
该信号可以通过逻辑门、计数器、微控制器等方式产生。
2. 译码器:将数字信号转换为控制数码管显示的信号。
译码器一般采用BCD码(二进制编码十进制)或者7段码来表示数字。
3. 驱动电路:将译码器输出的信号转换为适合驱动数码管的电压和电流。
驱动电路一般使用三极管、开关电路等来完成。
4. 数码管:由多个发光二极管(LED)组成,每个发光二极管对应一个数字或符号的显示段。
数码管的引脚连接到驱动电路上。
5. 电源电路:为整个数码管显示电路提供工作电压。
一般使用稳压电源或者适配器来提供稳定的直流电压。
工作原理如下:
当数字信号发生器产生需要显示的数字或符号的电信号时,该
信号经过译码器转换为对应的亮灭控制信号,然后通过驱动电路产生适合数码管的控制电压和电流。
驱动电路按照控制信号的要求,通过对应的引脚将控制信号传递给数码管。
这样,数码管的不同段就会根据控制信号的高低来亮灭,从而显示出对应的数字或符号。
整个数码管显示电路在工作时,可以通过改变数字信号的输入来实现不同数字或符号的动态显示。
经过适当的控制和调节,数码管显示电路可以显示出各种数字、字母、符号等。
PLC实验三报告-LED数码显示控制

实验三 LED数码显示控制一、实验要求拨上开关后,由八组LED发光二极管模拟的八段数码管开始显示:字母A、b、C、d、E、F、G、H、I、J,时间间隔1s,并循环不止。
拨下启动开关后停止显示。
二、实验软元件X000—启动开关 Y000~Y007---数码管的a段~h段三、实验梯形图四、实验程序及注释0.启动2.字段显示间隔1秒6.产生秒冲8.启动后延时1.5秒显示13.脉冲移位输入14.循环显示设置,F接A17.左移位指令31.输出数码管a段36.输出数码管b段43.输出数码管c段50.输出数码管d段61.输出数码管e段70.输出数码管f段77.输出数码管g段82.打下开关得到一个下降沿激活复位84.复位计时器89.复位M10~M20五、实验结果1)仿真结果程序设置了M11到M20分别控制显示字母A、b、C、d、E、F、G、H、I、J,则跟着左移位指令就可以按顺序显示这十个字母。
再设置一个M20在移位输入M10前面即可在左移位到M20显示字母J后即再次激活M10,然后继续左循环脉冲,自此实现循环显示的效果。
LDF X000指令可以在打下开关后得到一个下降沿从而触发复位指令,清除M10~M20,使得所有相关输出的段位灯熄灭。
字母A 字母b 字母C 字母d字母E 字母F 字母G 字母H左:字母I右:字母J2)实验结果在实验室得到的实验结果与仿真结果一致。
打上开关循环显示字母A~J,打下开关后所有灯熄灭。
六、实验总结1)实验台上的输出Y4个一组要接一个地,所以在实验过程中如果输出需要用到7个输出Y000~Y006,则除了COM1要接地外,COM2也要接地。
2)通过这次实验,我们了解了用PLC模拟数码管显示的原理。
如果需要使数码管显示一个字符,则先观察该字符需要数码管的哪个段位同时亮,然后可以用一个辅助继电器M来控制这个字符,在这个字符需要发光的几个段对应的输出Y的前面都添加一个常开的触点M,则当这个M得到一个脉冲后即会闭合使得输出Y得电,继而得到想要显示的字符。
数码管静态显示和动态显示原理

数码管静态显示和动态显示原理数码管是一种常见的显示设备,它由多个发光二极管(LED)组成,通过控制每个LED的点亮与否,可以显示数字、字母、符号等。
数码管的显示方式主要分为静态显示和动态显示两种。
静态显示即直接将需要显示的数字发送给数码管进行显示。
实现静态显示的原理是通过控制LED的正向电流,使其发光。
1.显示单个数码管静态显示一位数码管时,需要将需要显示的数字转换为对应的二进制编码,并通过控制数码管的引脚,将对应的编码信号送到数码管,从而点亮对应的LED。
LED管的引脚包括共阳(正)端和共阴(负)端,需要根据具体的数码管类型,将对应的编码信号送到相应的引脚上。
例如,常见的共阳数码管,其引脚对应的编码信号如下表所示:数码管编码,a,b,c,d,e,f,g,DOT二进制值,1,2,4,8,16,32,64,128我们可以选择使用并口或者串口的方式,将对应的编码信号通过控制引脚进行发送,从而实现对数码管的显示。
2.显示多位数码管如果需要显示多位数码管,可以依次控制每个数码管的引脚,逐个显示数字。
例如,如果需要显示一个四位的数字,可以选择多个数码管,然后依次对每个数码管进行静态显示。
对于多位数码管,如果静态刷新频率较低,人眼会觉得显示闪烁。
因此,在静态显示中,通常需要使用较高的刷新频率,以使得显示效果更加稳定。
动态显示是指通过间歇性显示不同的位数,从而实现连续显示的效果。
动态显示的原理是通过快速的切换不同的位数,让人眼产生连续显示的错觉。
1.时分复用最常见的动态显示原理是时分复用技术,即通过快速的切换不同的位数,以使得数码管在较短的时间内完成多个位数的显示。
例如,对于一个四位数码管的显示,可以快速切换每个数码管的引脚,使得数码管按照一定的频率逐个显示不同的数字。
实现时分复用的关键是要保证刷新频率足够高,以至于人眼无法察觉到刷新的效果。
2.位数切换在时分复用中,需要对每个数码管进行位数的切换,以显示对应的数字。
数码管静态显示

数码管静态显示本讲任务:介绍用数码管进行数字和字母的显示。
数码管显示:单片机系统中常用的显示器有:1:发光二极管显示器(数码管);2:液晶LCD 显示器;3:CRT 显示器等。
LED 、LCD 显示器有两种显示结构:1:段显示(7段、米字型等);2:点阵显示(5×8、8×8点阵等)。
数码管可显示内容和特点:可显示内容: 数字、小数点和部分英文字符、符号。
特点:1、自发光、亮度高,特别适合环境亮度低的场合使用。
2、牢固,不怕冲击。
数码管的结构:数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的亮暗组合成字符。
常见数码管有10根管脚。
其中COM为公共端,根据内部发光二极管的接线形式可分为共阴极和共阳极两种。
使用时,共阴极数码管公共端接地,共阳极数码管公共端接电源。
每段发光二极管需5~10mA的驱动电流才能正常发光,一般需加限流电阻控制电流大小。
数码管显示原理:LED数码管的 a~g 七个发光二极管。
加正电压的发光,加零电压的不能发光,不同亮暗的组合就能形成不同的字型,这种组合称为字型码。
共阳极和共阴极的字型码是不同的。
共阴数码管字形码表:0x3f ,0x06 ,0x5b ,0x4f ,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f , 0 1 2 3 4 5 6 7 8 90x77 ,0x7c ,0x39 ,0x5e ,0x79 ,0x71 ,0x00A B C D E F 不显示静态显示驱动:静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动(要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
数码管动态驱动:动态驱动常用于多个数码管同时显示数字或字母,是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。
单片机实验3 数码管控制实验-动态显示

;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F
数码管显示数字

在第6课里,我们讲到数码管的静态显示,利用静态显示法,通过控制位选和段选,可以让数任意几位数码管显示任意字符,但由于所有位数码管的相同的段选全部接在一起,所以只能同时显示相同的数字,例如8位同时显示8字,1、3、5位同时显示3字。
但大家想一下,如果我们要让数码管同一时刻显示不同的数字,如图1所示的现象,用静态显示的方法就不能够实现,这里就只能用到动态显示的方法,今天这一节我们主要讲解数码管动态显示的原理的程序实现的方法。
图1 数码管同时显示123456在讲解动态显示方法之前,我们先介绍在种数码管及单片机程序开发过程常用的方法-数组编码法。
1、数组编码在跟数码管相关的程序中,可以对位进行编码,也可对段进行编码,这里我们以段编码进行讲解。
通过第8课的程序我们知道,在位选确定后,要显示数字8时,P0=0x80,显示数字3时P0=0xb0,也就是0xb0,0x80分别可以表示数字3和8,按此方法,我们把在数码管上显示0-f,16个数字全部用16制度表示出来,这16个16进制数就称为数码管可显示0-f的相应的编码,如图2所示(注意共阳和共阴极数码管相应的编码有所不同,这里以实验板上共阳极的为例)。
图2 共阳极数码管编码在编程中,编码的表示方法如下:unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e };这里编码表示的方法与C语言中数组定义的方法基本一样。
table是数组名,后面需加[],中括号中需加上数组中元素的个数,也可以不写。
等号的右边用一个大括号将所有元素包含起来,里面的元素之间用“,”隔开,在大括号外用“;”结束。
等号左边的unsigned char 是数据元素的数据类型,这里定义为无符号字符型,也就是元素的值范围只能是0-255之间。
按键控制数码管显示

按键控制数码管显示试验1:首先打开keil 4软件,如下图新建一个工程
2:输入工程名称后点保存
3:选择你用的单片机型号后点OK
4:我的是89C52所以如下选择后点OK
5:然后新建一个组
6:输入组名称,注意一定和工程名一致,且后缀名为asm
7:然后在将组加进来
8:如下选择刚保存的组然后点加入
9:然后设置频率12M
10:照图上挨个点上勾
11:debug为最后项,照图点上勾,然后OK
12然后编写程序,写好检查后点击运行
机等待烧录软件提示给单片机上电。
14:效果图:
总结:这次试验是按键控制数码管显示数字0~9的增减、以及流水灯的闪烁。
通过大家的努力实现。
感谢本组每位组员的努力。
本组成员【王思琪、熊飞、孔恩、李云彬、王鹏碧】。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数码管控制显示
一、数码管控制电路结构
1、段码、位码均由P0口输出,采用总线模式连接。
2、RP1为P0口上拉电阻。
3、74LS07为反相器。
4、74LS08为与门。
5、74HCT574分别作为段码与位码的八路D型触发器。
(功能等同于74HC377)工作原理为:当CP为由低电平到高电平时,D0输出到Q0(即Q状态为D的状态);当CP为低电平时,Q输出端保持不变。
OE为使能端,必须为低电平时,才会有输出(即D→Q)。
6、引脚控制:
CS1:接P1.5
CS2:接P1.4
WR:接P1.7
P0~P7:接D0~D7
二、控制程序举例
1、基本的数字显示功能
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P1^7;
sbit cs1=P1^5;
sbit cs2=P1^4;
#define LEDdata P0
void delay(uint x) //1秒延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=115;j>0;j--);
}
void display()
{
cs1=0;cs2=1; //选择段码缓存
LEDdata=0xc0; //输出段码
wr=1;wr=0; //取缓冲区数据对应段码数据,并保持不变
cs1=1;cs2=0; //选择位码缓存
LEDdata=0xfe; //输出位码数据,显示第1个
wr=1;wr=0; //
}
void main()
{
while(1)
{
cs1=cs2=0; //选择两个触发器
LEDdata=0xff; //实现初始的清屏操作
wr=1;wr=0;
display(); //调用显示函数
}
}
2、采用动态显示八个数字
#include <REG52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LEDdata P0
sbit wr=P1^7;sbit cs1=P1^5;sbit cs2=P1^4;
uchar code LEDcode[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0-9,- uchar buf[8]={7,6,5,4,3,2,1,0}; //定义的显示缓冲区
void delay(uint i) { while(i--); } //公用延时函数,约10uS
void display()
{
uchar i,j=0xfe;
buf[0]=0;buf[1]=1;buf[2]=2;buf[3]=3;buf[4]=4;
buf[5]=5;buf[6]=6;buf[7]=7;
for(i=0;i<8;i++)
{
cs1=0;cs2=1; //选择段码锁存器缓存
LEDdata=LEDcode[buf[i]];wr=1;wr=0; //取缓冲区数据对应段码数据
cs1=1;cs2=0; //选择位码缓存
LEDdata=j;wr=1;wr=0; //取位码编码
delay(100); //延时1mS
j=_crol_(j,1); //改变位编码
cs1=cs2=0; //同时选择两个锁存器
LEDdata=0xff;wr=1;wr=0; //同时关闭所有数码管显示}
}
void main()
{
while(1)
{
display(); //调用显示函数
}
}
3、控制数字显示的变化(开机检测画面)
#include <REG52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LEDdata P0
sbit wr=P1^7;sbit cs1=P1^5;sbit cs2=P1^4;
uchar code LEDcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0-9,- uchar buf[8]={7,6,5,4,3,2,1,0};//定义的显示缓冲区
uchar code LEDcode1[]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe};
void delay(uint i) { while(i--); } //公用延时函数,约10uS
void display()
{
uchar i,j=0xfe;
buf[0]=0;buf[1]=1;buf[2]=2;buf[3]=3;buf[4]=4;
buf[5]=5;buf[6]=6;buf[7]=7;
for(i=0;i<8;i++)
{
cs1=0;cs2=1;//选择段码锁存器缓存
LEDdata=LEDcode[buf[i]];wr=1;wr=0;//取缓冲区数据对应段码数据
cs1=1;cs2=0;//选择位码缓存
LEDdata=j;wr=1;wr=0;//取位码编码
delay(100);//延时1mS
j=_crol_(j,1);//改变位编码
cs1=cs2=0;//同时选择两个锁存器
LEDdata=0xff;wr=1;wr=0;//同时关闭所有数码管显示
}
}
void main()
{
uchar i;
cs1=cs2=0;//同时选择位、段码缓存IC LEDdata=0xff;wr=1;wr=0;//关闭显示
for(i=0;i<8;i++)
{
cs1=0;cs2=1;//选择段码缓存IC
LEDdata=LEDcode1[buf[i]];wr=1;wr=0;//取缓冲区数据对应段码数据
cs1=1;cs2=0;//选择位码缓存IC
LEDdata=0x00;wr=1;wr=0;//位码全点亮
delay(50000);//延时50ms
cs1=cs2=0;//同时选择位、段码缓存IC
LEDdata=0xff;wr=1;wr=0;//关闭显示
}
while(1)
{
display();//调用显示函数
}
}。