单片机之led显示

合集下载

3.2 单片机控制LED数码管的显示

3.2 单片机控制LED数码管的显示

5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
图5-9 4位LED数码管动态显示示意图
5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
各位数码管轮流点亮的时间间隔(扫描间隔)应根据实 际情况定。发光二极管从导通到发光有一定的延时,如果点 亮时间太短,发光太弱,人眼无法看清;时间太长,产生闪 烁现象,且此时间越长,占用单片机时间也越多。另外,显 示位数增多,也将占用单片机大量时间,因此动态显示实质 是以执行程序时间来换取I/O端口减少。下面是动态显示实 例。
void main(void)
ห้องสมุดไป่ตู้
{
P0=0xa4;
//将数字"2"的段码送P0口
P1=0xf8;
//将数字"7"的段码送P1口
while(1)
//无限循环
;
}
5.3.2 LED数码管的静态显示与动态显示
2. 动态显示方式
显示位数较多时,静态显示所占的I/O口多,这时常 采用动态显示。为节省I/O口,通常将所有显示器段码 线相应段并联在一起,由一个8位I/O口控制,各显示位 公共端分别由另一单独I/O口线控制。
// 如段码为0x01,表明一个循环显示已结束 } }
5.3.1 LED数码管显示原理
void delayms(uint j) { uchar i; for(;j>0;j--)
{ i=250; while(--i); i=249; while(--i);
} }
// 延时函数
5.3.1 LED数码管显示原理
图5-10 8只数码管分别滚动显示单个数字1~8
5.3.2 LED数码管的静态显示与动态显示

单片机控制LED点阵显示屏

单片机控制LED点阵显示屏

单片机控制LED点阵显示屏一、简介单片机控制LED点阵显示屏是一种常见的电子显示器件,可以用于显示各种文字、图形等信息。

本文将介绍如何利用单片机来控制LED 点阵显示屏,实现信息的显示功能。

二、材料准备在开始搭建单片机控制LED点阵显示屏系统之前,我们需要准备以下材料:•单片机开发板:例如STC89C52•LED点阵显示屏:常见的有8×8、16×16等不同尺寸•连接线:用于连接单片机和LED点阵显示屏•电源:用于为单片机开发板和LED点阵显示屏供电三、搭建电路将单片机开发板和LED点阵显示屏通过连接线进行连接。

具体连接方法如下:•将单片机的IO口与LED点阵显示屏的对应引脚相连。

根据具体的LED点阵显示屏型号和单片机开发板的引脚分配情况,选择合适的IO口进行连接。

•将单片机的VCC引脚与LED点阵显示屏的VCC脚相连,将GND引脚与LED点阵显示屏的GND脚相连,确保电源供电正常。

四、编程控制编写单片机程序,实现对LED点阵显示屏的控制。

本文以STC89C52单片机为例,演示如何利用C语言编写简单的程序实现LED点阵显示屏的控制。

首先,需要使用单片机开发工具(如Keil、IAR等)创建一个新的工程。

在工程中添加必要的头文件,并定义相关的引脚和变量。

#include <reg52.h>sbit DIN = P1^0; // 数据引脚sbit CS = P1^1; // 片选引脚sbit CLK = P1^2; // 时钟引脚unsigned char code ledData[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};void delay(unsigned int time) {unsigned int i, j;for(i = time; i > 0; i--)for(j = 110; j > 0; j--); // 空循环延时}void sendData(unsigned char dat) {unsigned char i;for(i = 0; i < 8; i++) {CLK = 0; // 上升沿时钟信号DIN = dat & 0x80;dat <<= 1;CLK = 1;}}void display(unsigned char *data) {unsigned char i;CS = 0; // 片选信号有效for(i = 0; i < 8; i++) {sendData(data[i]);}CS = 1; // 片选信号无效}void mn() {while(1) {display(ledData);delay(2000);}}上述代码中,我们定义了三个引脚(DIN、CS、CLK)和一个缓存数组(ledData),分别用来控制LED点阵显示屏的数据引脚、片选引脚和时钟引脚。

基于单片机的LED点阵显示屏的设计

基于单片机的LED点阵显示屏的设计

基于单片机的LED点阵显示屏的设计LED点阵显示屏是一种常见的显示设备,它通过控制各个LED的亮灭来显示文字、图形或动画。

在这篇文章中,我们将介绍基于单片机的LED 点阵显示屏的设计。

一、设计目标设计一个基于单片机的LED点阵显示屏,使其能够显示各种文字、图形和动画。

同时,要求显示屏的显示效果清晰、稳定,能够满足日常使用的需求。

二、设计方案1.硬件设计(1)点阵屏:选择合适的点阵屏作为显示屏的输出设备。

点阵屏的种类有很多,常见的有8x8、16x16和32x32等不同尺寸的点阵屏。

根据实际需求选择合适的尺寸。

(2)单片机:选择一块适合的单片机作为控制器。

单片机的选择需要考虑其计算能力、扩展性和易用性等因素。

(3)扩展模块:根据需要,可以选择添加一些额外的扩展模块,如按键模块、声音模块等,以增加显示屏的功能。

(4)电源模块:为显示屏提供稳定的电源,以保证其正常工作。

2.软件设计(1)驱动程序:编写驱动程序,通过单片机控制各个LED的亮灭。

根据点阵屏的不同类型,编写相应的驱动程序。

(2)显示程序:编写显示程序,将要显示的文字、图形或动画转换成相应的点阵数据,然后通过驱动程序显示在点阵屏上。

(3)用户界面:设计一个用户界面,使用户能够方便地输入要显示的文字、选择图形或动画等,然后通过单片机控制显示屏显示出来。

三、实施步骤1.硬件部分(1)按照设计方案选择合适的点阵屏、单片机和扩展模块,并连接它们。

(2)根据点阵屏的引脚定义,设计相应的电路板,并进行制作。

(3)将单片机和扩展模块焊接到电路板上,并连接好相应的引脚。

(4)连接电源模块,为整个系统提供电源。

2.软件部分(1)根据点阵屏的类型,编写相应的驱动程序。

(2)编写显示程序,将要显示的文字、图形或动画转换成点阵数据。

(3)设计用户界面,编写相应的程序,将用户输入的内容转换成可显示的数据。

(4)将驱动程序、显示程序和用户界面程序上传到单片机。

四、测试与调试完成硬件和软件的设计后,进行测试与调试。

51单片机led闪烁实验原理

51单片机led闪烁实验原理

51单片机led闪烁实验原理单片机是一种集成了处理器、内存以及各种输入输出接口的微型电脑。

51单片机是目前应用最广泛的单片机之一,具有广泛的应用领域和强大的功能。

在学习电子和嵌入式系统的过程中,LED闪烁实验是一项基础的实验,可以帮助我们了解单片机的原理和实际应用。

LED(Light Emitting Diode)是一种晶体管器件,具有发光功能。

在电子产品中,常常用LED作为指示灯或显示器,如电脑电源指示灯、手机屏幕等。

LED的闪烁实验是通过控制单片机的输出端口来实现的。

实验原理很简单,需要使用51单片机、LED、电阻和蜂鸣器等元件。

首先,将单片机的输出端口与LED连接,通过编程控制该输出口的高低电平,从而控制LED的亮灭。

在单片机编程中,可以使用C语言或汇编语言,根据控制单片机输出端口的特定语句和循环语句,来控制LED的闪烁频率和灯亮时间。

在51单片机的编程中,我们需要了解几个关键概念。

首先是端口的概念,51单片机有几个IO口,在编程时需要给这些口标号,方便操作。

其次是输入输出控制,单片机的IO口既可以作为输入口,也可以作为输出口。

在本实验中,我们将LED连接到输出口,通过控制输出口的电平来控制LED的亮灭;再次是时钟的概念,单片机需要时钟信号来计算和执行指令,我们需要初始化时钟,以确保单片机正常工作。

以下是简单的51单片机LED闪烁实验代码示例:```#include <reg52.h>sbit LED = P1^0; // 定义LED连接的引脚void Delay(unsigned int t) //延时函数{unsigned int i, j;for(i = t; i > 0; i--)for(j = 110; j > 0; j--);}void main(){while(1){LED = 0; // 将LED引脚置低电平Delay(1000); // 延时1秒LED = 1; // 将LED引脚置高电平Delay(1000); // 延时1秒}}```以上代码通过控制LED引脚的电平状态实现LED的闪烁。

基于单片机的LED大屏幕显示系统设计

基于单片机的LED大屏幕显示系统设计

基于单片机的LED大屏幕显示系统设计引言:随着科技的不断发展,LED大屏幕在现代生活中得到越来越广泛的应用。

本文将介绍一种基于单片机的LED大屏幕显示系统的设计方案。

一、需求分析1.需要一个显示屏幕较大的系统,以便能够在远距离外也能清晰看到信息。

2.需要一个可以远距离控制显示内容的系统。

3.显示内容可以动态变化,能够显示文字、图片、动画等多种形式。

4.系统需要易于维护和操作。

二、系统设计1.硬件设计为了满足显示屏幕大的需求,我们可以选择一个高分辨率的LED显示屏。

为了控制显示内容,我们可以选择一款强大且易于操作的单片机作为控制主板。

同时,还需要一个电源模块来提供电力。

2.软件设计为了实现动态变化的显示内容,我们需要设计一个用户界面,使用户能够通过输入设备(例如键盘、遥控器等)来输入显示内容。

同时,还需要一个软件模块来实现内容的转换和发送。

单片机需要能够接收和解析输入的指令,并按照指令来动态更新显示内容。

三、详细设计1.硬件设计选择合适的LED显示屏幕,可以根据需求选择合适的尺寸和分辨率。

设计一个控制主板,使用单片机作为核心控制模块,通过与电源模块的配合,提供稳定的电力供应。

同时,还需要与显示屏幕的接口板连接,实现信息的传输。

2.软件设计设计用户界面,可以使用图形界面,使用户能够直观地操作系统。

通过输入设备输入指令,在单片机上设计相应的软件模块,实现接收、解析和处理指令的功能。

根据指令来更新显示内容。

四、系统实现1.硬件实现按照硬件设计方案进行组装和连接。

选择合适的单片机和电源模块,根据显示屏幕的接口要求进行连接,确保电路连接正确无误。

2.软件实现设计用户界面,根据用户的需求和喜好进行界面的设计。

实现并调试单片机的软件模块,确保接收、解析和处理指令的功能正常运行。

五、系统测试在完成系统实现后,需要进行一系列的测试,以确保系统的正常工作和稳定性。

可以进行功能测试、稳定性测试、兼容性测试等,以保证系统的可靠性和稳定性。

基于单片机的LED点阵显示屏的设计报告

基于单片机的LED点阵显示屏的设计报告

基于单片机的LED点阵显示屏的设计报告设计报告:基于单片机的LED点阵显示屏一、设计背景随着科技的不断进步和人们对信息的需求日益增长,LED点阵显示屏逐渐成为一种常见的信息显示方式。

它广泛应用于各种领域,如室内外广告、公告牌、交通信号灯等。

本设计报告旨在介绍一种基于单片机的LED 点阵显示屏的设计方案。

二、设计原理本设计采用了以常用的Arduino单片机为控制核心,结合LED点阵显示屏模块,通过控制单片机的GPIO口,实现对LED点阵显示屏的控制。

三、设计流程1.硬件设计:选择合适的LED点阵显示屏模块,并了解其接口定义和控制方式;根据LED点阵显示屏模块的接口定义,设计相应的电路连接,并进行连线布局;为单片机提供稳定的电源,并确保单片机与LED点阵显示屏之间的数据线路连接正确。

2.软件设计:编写单片机的控制程序,采用合适的编程语言(如C语言);根据LED点阵显示屏的控制方式,编写相应的模块以实现对显示内容的控制,如亮度控制、位选控制等;通过单片机的GPIO口与LED点阵显示屏模块进行数据传输,根据需要的显示内容进行相应的控制。

四、关键技术1.单片机控制:通过单片机的GPIO口与LED点阵显示屏模块进行数据传输,实现对其显示内容的控制。

2.显示内容控制:根据具体需求,编写合适的控制程序,通过控制单片机的GPIO口,实现对LED点阵显示屏模块的亮度、显示内容等进行控制。

3.位选控制:通过控制LED点阵显示屏模块的位选引脚,实现多个LED点阵模块的级联显示,以扩展显示屏的显示面积。

五、实验结果及优化经过系统的实验和调试,基于单片机的LED点阵显示屏实现了预期功能,能够正常显示所需的内容,并且具备一定的亮度控制和位选控制功能。

同时,根据实际应用需求,对设计方案进行优化,如增加红外遥控功能、集成温度传感器等,以提升用户体验和功能扩展性。

六、总结与展望本设计报告介绍了一种基于单片机的LED点阵显示屏的设计方案。

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验

单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。

实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。

提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。

;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 -Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital; P0.1 - Unassigned, Open-Drain, Digital; P0.2 - Unassigned, Open-Drain, Digital; P0.3 - Unassigned, Open-Drain, Digital; P0.4 - Unassigned, Open-Drain, Digital; P0.5 - Unassigned, Open-Drain, Digital; P0.6 - Unassigned, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, Digital; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital; P2.2 - Unassigned, Open-Drain, Digital; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。

单片机课程设计--+16x16点阵LED电子显示屏的设计

单片机课程设计--+16x16点阵LED电子显示屏的设计

单片机课程设计-- 16x16点阵LED电子显示屏的设计第一章系统总体方案设计LED驱动显示采用动态扫描方法, 动态扫描方式是逐行轮流点亮, 这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。

以16×16点阵为例, 把所有同一行的发光管的阳极连在一起, 把所有同一列的发光管的阴极连在一起(共阳的接法), 先送出对应第1行发光管亮灭的数据并锁存, 然后选通第1行使其燃亮一定的时间, 然后熄灭;再送出第2行的数据并锁存, 然后选通第2行使其燃亮相同的时间, 然后熄灭;…第16行之后, 又重新燃亮第1行, 反复轮回。

当这样轮回的速度足够快(每秒24次以上), 由于人眼的视觉暂留现象, 就能看到显示屏上稳定的图形。

该方法能驱动较多的LED, 控制方式较灵活, 而且节省单片机的资源。

显示数据传输采用串行传输的方法, 控制电路可以只用一根信号线, 将列数据一位一位传往列驱动器, 在硬件方面无疑是十分经济的。

但串行传输过程较长, 数据按顺序一位一位地输出给列驱动器, 只有当一行的各列数据都已传输到位之后, 这一行的各列才能并行地进行显示。

对于串行传输方式来说, 列数据准备时间可能相当长, 在行扫描周期确定的情况下, 留给行显示的时间就太少了, 以致影响到LED的亮度。

采用串行传输中列数据准备和列数据显示的时间矛盾, 可以采用重叠处理的方法。

即在显示本行各列数据的同时, 传送下一行的列数据。

为了达到重叠处理的目的, 列数据的显示就需要有锁存功能。

对于列数据准备来说, 它应能实现串入并出的移位功能。

这样, 本行已准备好的数据打入并行锁存器进行显示时, 串行移位寄存器就可以准备下一行的列数据, 而不会影响本行的显示。

系统框图如图一图一点阵显示器硬件系统框图第二章系统硬件电路的设计硬件电路大致上可以分为单片机系统及外围电路、列驱动电路和行驱动电路三部分。

一. 单片机系统及外围电路单片机采用89C51或更高频率的晶振, 以获得较高的刷新频率, 使得显示更稳定。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

② 共阳极接法。把发光二极管的阳极连在一起作为阳极 公共引脚com。使用时阳极公共引脚接+5 V。这样阴极 引脚上加低电平的发光二极管即可导通点亮,而加高 电平的则不点亮。 单个数码管的引脚配置为:
com端为公共端
使用时,共阴极数码管公共端接地,共阳极数码管公共 端接电源。静态显示时,推荐使用10~15mA驱动电流;动态 扫描时,平均电流4~5 mA。由于常规的数码管起辉电流只 有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入 端在5 V电源或高于TTL高电平(3.5 V)的电路信号相接时, 一定要串加限流电阻,以免损坏器件。
分析: 将显示码循环输出到P0
循环指针i 赋值(10)
口即可实现循环显示。 但由于数字0~9的显示 段码没有规律可循,需 要采取查表方式进行操 作:
P0 ←数组[i]
延时 N
循环10次 ? Y
①将显示码按序存放在一个数组中, 顺序号与代表的显示 字符相对应。(如,char led_mod
[ ]={x1,x2,….,xn}
动态显示接口是将所有数码管的段码线对应并联起来接在一个 8位并行口上,而每只数码管的公共端分别由一位I/O线控制。 由并口输出的段码可被所有数码管收到,但只有满足导通条 件的数码管可以被驱动。
P1.7
P1.0 A H A H A H A H
共阴型 数码管
74LS240
……
COM
COM
COM
COM
ULN2003 P3.4 P3.7
段码线接P2口 位码线接P3口
#include<reg51.h> unsigned char duan[]={0x3f,0x06}; unsigned char wei[]={0xfe,0xfd}; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { unsigned char i; While(1) { for(i=0;i<=1;i++) { P3=wei[i]; P2=duan[i]; delay(10); } } }
D7 dp
D6 g
D5 f
D4 e
D3 d
D2 c
D1 b
D0 a
当单片机P1口驱动数码管时,P1口各管脚与数码管各显 示段的连接关系如图所示。
(a) 与共阳极数码管相连 (b) 与共阴极数码管相连 图 单片机并行口与数码管的连接关系
单片机P1口驱动数码管时,无论是驱动共阴极还是共阳 极数码管,P1口各管脚与数码管的连接关系相同,如图所示 ,单片机其它并行口和数码管各显示段的对应连接关系与P1 口相同。
VCC COM COM COM COM
静态显示接口 是一个并行口 接一个数码管。
……
……
……
……
驱动电路
驱动电路
驱动电路
驱动电路
优点:被显示数 据只要送入并行 口后就不再需要 CPU干预,显示 效果稳定。 缺点:占用口资 源较多
H
H
H
R× 8
R× 8
R× 8
P0.0 P0.1
P0.7
P1.0 P1.1
图2 常见的单个LED驱动电路
(2)单个数码管的驱动
将多个LED封装在一起,即可构成笔划式数码管。 数码管内部由七个条形发光二极管和一个小圆点发光二 极管组成,根据各管的亮暗组合成字符。 七段式LED显示器有两种结构:共阴极接法和共阳极接法
① 共阴极接法。把发光二极管的阴极连在一起构成阴极 公共引脚com。使用时阴极公共引脚接地,这样阳极 引脚上加高电平的发光二极管就导通点亮,而加低电 平的则不点亮。
字形编码(段码)的值与数码管公共引脚的接法(共阳极和共阴极 )有关。显示十六进制数的段码值在下表中。
实例:LED数码管显示,原理图如下图所示,使之循环显示 0-9数字。
段码的读取方法:
将段码按显示值大小 顺序存入一个数组中。 使用时,只需将待显 示值最为该数据的下 标变量即可取得相应 的段码。
unsigned char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
...
工作原理: 采用快速切换方式(如10ms),每一时刻只有一只数码管导 通工作。只要数码管点亮的间隔小于人眼的视觉暂留时间 (40ms),人们就会认为数码管是一直点亮的。
多个数码管动态显示时需同时提供相应的段码和位码。 优点:占用资源较少 缺点:占用机时较多(需பைடு நூலகம்CPU随时刷新显示值)
实例:采用共阴极数码管,动态显示数字0、1
3.4 LED数码管原理与编程
1.认识LED数码管
LED显示元件是常见的人机交互输出设备,其作用是指示 中间运行结果与运行状态。LED种类较多,常见的LED如图所示。
2015/10/19
图1 LED实物图
1
(1)单个LED的驱动 常见的单个LED的驱动电路如下图所示电路,(a)图中端 口引脚输出低电平,则LED点亮,R1为限流电阻,避免流过LED 电流过大。(b)图中端口引脚输出低电平,则Q1导通,LED点 亮,R2为限流电阻。
void main(){ while(1) { for(i=0;i<=9;i++) { P0=duan[i]; delay(500); } } }
void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); }
点亮LED显示器有静态和动态两种方法。
②通过循环变量指定待送出的数组元素
参考程序
#include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x 7d,0x07,0x7f,0x6f}; //共阴“0”~“9” uchar i;
P1.7
P2.0 P2.1
P2.7
P3.0 P3.1
R× 8
MCS-51
(a)静态显示
P3.7
H
A B
A B
A B
A B
实例:两个数码管的静态显示接口电路如下图所示。循环 显示0-99数字。
#include<reg51.h> unsigned char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char ge,shi; void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { unsigned char i; While(1) { for(i=0;i<100;i++) { ge=i%10; shi=i/10; P2=duan[ge]; P0=duan[shi]; delay(100); } } }
2.数码管的字形编码与显示方式
(1)数码管的字形编码
数码管的8段正好组成一个字节。当单片机的并行口P0~P3 驱动数码管时,通常要求数据位D0~D7分别与数码管的a、b 、c、…、dp对应相连,即数据位D0驱动a字段,数据位D1驱 动b字段,依此类推,如表1所示。
表1 数据位与各显示段的对应关系
数据位 显示段
实例
数码管动态显示
采用共阴极动态LED显示原理,实现如下功能: SW1向下拨时显示字符“L2”,向上拨时显示字符“H3”。
完整的源程序
#include<reg52.h> #define uint unsigned int #define uchar unsigned char uchar duan[]={0x38,0x5b,0x76,0x4f}; //共 阴"L2H3" uchar wei[]={0xfe,0xfd}; sbit button=P1^7; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void main() { uchar i; while(1) {
{ if(button==0) for(i=0;i<2;i++) P3=wei[i]; P2=duan[i]; delay(10); } else for(i=0;i<2;i++) { P3=wei[i]; P2=duan[i+2]; delay(10); } }
运行效果
相关文档
最新文档