单片机 数码管显示
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数码管的静态显示与动态显示
单片机_两个数码管显示00~99
按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2
接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)//
#include<reg52.h>
sbit P0_0=P0^0; //个位数字
sbit P0_1=P0^1; //十位数字
/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2
接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)
**************************************************************//
{
case 0xfe: num++;if(num==100) num=0; break;
case 0xfd: if(num==0) num=99;else num--;break;
default: break;
}
delay(10); //延时
P0_1=1; //关闭个位显示
}
}
void key_ccan(void)
{
unsigned char ii;
P1=0xff;
ii=P1;
void delay(int k); //Tab为数码管显示值,存入一个数组内
void key_ccan(void); //声明按键扫描函数
unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}unsigned char i,shi,ge,num,count=10; //num为被显示的数字
单片机与基础应用项目4数码管显示控制
22
void main(void) {∥主函数开始 unsigned char cishu;∥声明无符号字符 cishu while(1)∥无限循环 {∥无限循环开始 for(cishu=0;cishu<10;cishu++)∥cishu循 环, { P0=0xfe;∥用P0口选择最右边的一个数码管 P1=tab[cishu];∥用P1口送数字码 delay();∥延时0.5 s delay();∥延时0.5 s,总共延时1 s }∥循环结束
23
2.程序调试 (1)下载程序 (2)调试程序
图4.17 程序效果图
24
任务3 控制4个数码管 一、任务引入
图4.18 4个数码管显示“0123
25
二、任务要求 (1)正确编写程序。 (2)让4个数码管同时显示数字“0123”。
26
三、准备工作 1.器材准备 (1)上一任务电路板一块
图4.19 上一任务电路板
13
(2)源程序
void main(void)∥主函数 {∥主函数开始 unsigned char cishu=0;∥声明无符号变量 cishu while(1)∥无限循环 {∥无限循环开始 if(key==0)∥判断按钮按下没有 {delay();∥延时,跳过按键开始不稳定的状 态 if(key==0)∥再次判断按键是否按下 cishu++;∥按键按下,让变量cishu加1 if(cishu>7)∥如果cishu大于7则从0开始
图4.4 一个数码管显示电路器材图
6
2.工具准备 安装工具一套。
7
四、作业流程图
图4.5 一个数码管控制作业流程图
8
五、作业过程 1.识读电路图
单片机数码管动态显示
动态显示1.掌握LED数码管显示及其一般电路结构;2.掌握LED动态显示程序的一般设计方法。
一、实验内容动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。
二、实验步骤1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。
图1 动态显示实验电路原理图2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。
三、实验要求1.编写一显示程序显示201071;2.显示特殊字符good;3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程序运行结果。
四、参考程序dbuf equ 30h ;置存储区首址temp equ 40h ;置缓冲区首址org 00hmov 30h,#2 ;存入数据mov 31h,#0mov 32h,#1mov 33h,#0mov 34h,#7mov 35h,#1mov r0,#dbufmov r1,#tempmov r2,#6 ;六位显示器mov dptr,#segtab ;段码表首地址dp00: mov a,@r0 ;取要显示的数据movc a,@a+dptr ;查表取段码mov @r1,a ;段码暂存inc r1inc r0djnz r2,dp00disp0: mov r0,#temp ;显示子程序mov r1,#6 ;扫描6次mov r2,#01h ;从第一位开始dp01: mov a,@r0mov p0,a ;段码输出mov a,r2 ;取位码mov p1,a ;位码输出acall delay ;调用延时mov a,r2rl amov r2,ainc r0djnz r1,dp01sjmp disp0segtab: db 3fh,06h,5bh,4fh,66hdb 6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延时子程序aa1: mov r5,0ffhaa: djnz r5,aadjnz r4,aa1retend实验原理MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。
单片机控制数码管动态扫描显示原理
P02 P03 P04 P05 P06
11 P01
P00
7 4 2 110
3
a b c d e f g dp
DPY
a
a
a
a
f g bf g bf g bf g b
e
ce
ce
ce
c
d
d
d
d
dp
dp
dp
dp
DPY 4 -LED
P20 P21 6 C0 P22 8 C2 P23 9 C3
12 C4
LED
U1
一、工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的 工作方式,低四位用于T0,高四位用于T1。其格式 如下:
GATE:门控位。GATE=0时,只要用软件使TCON中的 TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时, 要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为 高电平时,才能启动定时/计数器工作。即此时定时器的启 动条件,加上了INT0/1引脚为高电平这一条件。
VCC GND RXD TXD ALE/ P PSEN
40 20 10 11 30 29
P 14 P 15 P 16 P 17
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
动态显示
动态显示的特点是将所有位数码管的段选线并联在 一起,由位选线控制是哪一位数码管有效。这样一来, 就没有必要每一位数码管配一个锁存器,从而大大地简 化了硬件电路。选亮数码管采用动态扫描显示。所谓动 态扫描显示即轮流向各位数码管送出字形码和相应的位 选,利用发光管的余辉和人眼视觉暂留作用,使人的感 觉好像各位数码管同时都在显示。动态显示的亮度比静 态显示要差一些,所以在选择限流电阻时应略小于静态 显示电路中的。
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告毕业论文
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告毕业论文本篇报告将详细介绍基于单片机的按键控制LED数码管共阴极动态显示电路的设计。
一、引言LED数码管是一种常用的数字显示器件,广泛应用于各种计数器、时钟和计时器等电子设备中。
本设计旨在利用单片机实现对LED数码管的动态显示,并通过按键控制显示的数字。
二、设计方案1.系统结构本系统采用基于单片机的数字显示方案,其中包括一个单片机、数码管显示模块和按键模块。
单片机负责接收按键输入信号,并根据输入信号控制数码管显示相应的数字。
2.系统设计(1)数码管显示模块:该模块由共阴极LED数码管组成,共阴极接地,通过接通不同的端口线来控制数码管显示不同的数字。
(2)按键模块:该模块由多个按键组成,用于用户输入指定的数字。
每个按键接一个IO脚,通过按下不同的按键,触发不同的端口输入。
(3)单片机:本设计选用51单片机作为控制核心,通过IO口与数码管显示模块和按键模块连接。
单片机根据按键输入信号的变化,对数码管进行动态显示。
3.设计过程(1)针对单片机的接线设计:将单片机的IO口分别与数码管显示模块和按键模块连接。
将数码管的共阳极接电源正极,数码管的各段(即a、b、c、d、e、f、g)接单片机的IO脚。
(2)针对单片机软件设计:设计单片机程序实现按键输入的检测和数码管动态显示的控制。
首先初始化IO口,设置按键引脚为输入端口,设置数码管引脚为输出端口。
然后循环检测按键的状态。
当检测到按键被按下时,根据按键的不同选择分别显示不同的数字。
4.功能要求(1)按下不同的按键,数码管能够显示相应的数字,实现动态显示。
(2)按键输入具有去抖功能,避免误触发。
(3)程序运行稳定,能够正确响应按键输入,显示正确的数字。
三、实验结果经过实验验证,本设计实现了按键控制LED数码管共阴极动态显示的功能要求。
按下不同的按键,数码管能够正确显示相应的数字,程序运行稳定,无误触发现象。
数码管原理及显示单片机C编程
数码管显示程序编写
数码管显示原理:通过单片机控制数码管的亮灭状态,实现数字或字符的显示。
数码管显示编程语言:C语言,常用的开发环境有Keil、IAR等。
数码管显示程序的基本结构:包括初始化、显示数据的编码与解码、数码管显示驱动函 数等部分。
数码管显示程序的实现步骤:编写代码、编译链接、下载调试等。
七段数码管
十四段数码管
八段数码管 十六段数码管
数码管的驱动方式
静态驱动:每个数码管需要一个独 立的位选信号,通过位选信号来控 制哪个数码管亮
动态扫描速度:数码管显示的速度 取决于扫描速度,速度越快,人眼 看起来就越连续
添加标题
添加标题
添加标题
添加标题
动态驱动:多个数码管共用一个位 选信号,通过扫描方式逐个点亮数 码管,实显示单片机 C编程实例
数码管静态显示程序
数码管静态显示原理 单片机C编程实例代码 数码管静态显示程序流程图 数码管静态显示程序实现步骤
数码管动态显示程序
数码管动态显示原理 单片机C编程实例 数码管动态显示程序流程 数码管动态显示程序代码
数码管多位显示程序
数码管显示原理
单片机C编程技巧:使用PWM(脉冲宽度调制)技术,通过调节占空比来控制数码管亮 度。
硬件电路设计:需要设计一个适当的硬件电路,以支持数码管亮度控制。
软件编程实现:在单片机C编程中,需要编写相应的程序来实现数码管亮度的控制。
数码管显示速度调节
数码管显示速度调 节的原理
数码管显示速度调 节的方法
数码管显示速度调 节的优缺点
数码管显示速度调 节的实例代码
数码管显示效果优化技巧
数码管显示亮度调整:通过调整单片机的PWM输出,控制数码管的亮度,使其在合适的光线 下更加清晰可见。
普中51单片机按键-数码管显示
普中51单⽚机按键-数码管显⽰基于普中单⽚机按键-数码管显⽰简介1.硬件部分普中单⽚机开发板 数码管 独⽴按键2.软件部分keil软件硬件部分普中单⽚机开发板数码管独⽴按键(这些都是开发板的最基本的配置)软件部分#include "reg52.h" //此⽂件中定义了单⽚机的⼀些特殊功能寄存器typedef unsigned int u16; //对数据类型进⾏声明定义typedef unsigned char u8;/*端⼝引脚定义*/sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit KEY1 = P3^0;sbit KEY2 = P3^1;/*变量定义*/int number;unsigned char KeyNum=0; //被触发的按键编号unsigned char KeyLock1=0;unsigned char KeyLock2=0;unsigned int cnt;/*函数声明部分*/void KEY_Scan();void KEY_Action();void Light_Scan();void delay(u16 i);void Display();void Time0Iint();/*数码管码表*/unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管显⽰0~F的值unsigned char LightBuf[]={0xFF,0xFF,0xFF,0xFF,0XFF};/******************************************************************************** 函数名 : delay* 函数功能 : 延时函数,i=1时,⼤约延时10us*******************************************************************************/void delay(u16 i){while(i--);}/******************************************************************************** 函数名 : Display* 函数功能 : 数码管显⽰部分*******************************************************************************/void Display(){LightBuf[0]=smgduan[number%10];LightBuf[1]=smgduan[number/10%10];LightBuf[2]=smgduan[number/100%10];LightBuf[3]=smgduan[number/1000%10];LightBuf[4]=smgduan[number/10000%10];}/******************************************************************************** 函数名 : Light_Scan()* 函数功能 : 数码管扫描函数,选择显⽰的位置*******************************************************************************/void Light_Scan(){u8 i;for(i=0;i<8;i++){switch(i) //位选,选择点亮的数码管,{case(0):LSA=0;LSB=0;LSC=0;P0=LightBuf[4];break;//显⽰第0位case(1):LSA=1;LSB=0;LSC=0;P0=LightBuf[3];break;//显⽰第1位case(2):LSA=0;LSB=1;LSC=0;P0=LightBuf[2];break;//显⽰第2位case(3):LSA=1;LSB=1;LSC=0;P0=LightBuf[1];break;//显⽰第3位case(4):LSA=0;LSB=0;LSC=1;P0=LightBuf[0];break;//显⽰第4位default: break;}delay(100); //间隔⼀段时间扫描P0=0x00;//消隐}}/******************************************************************************* * 函数名 : KEY_Scan()* 函数功能 : 按键扫描函数*******************************************************************************/ void KEY_Scan(){static unsigned char cnt1 = 0xFF;static unsigned char cnt2 = 0xFF;cnt1 =(cnt1<<1)|KEY1;cnt2 =(cnt2<<1)|KEY2;if(cnt1 != 0x00){KeyLock1 = 0;}else if(KeyLock1==0){KeyNum = 1;KeyLock1 = 1;}if(cnt2 != 0x00){KeyLock2 = 0;}else if(KeyLock2==0){KeyNum = 2;KeyLock2 = 1;}}/******************************************************************************* * 函数名 : KEY_Action()* 函数功能 : 按键执⾏操作部分*******************************************************************************/ void KEY_Action(){switch(KeyNum){case 1:number++; KeyNum = 0; break;case 2:number--; KeyNum = 0; break;default:break;}}/******************************************************************************* * 函数名 :Time0Iint* 函数功能 :定时器0配置,定时器初始化函数*******************************************************************************/ void Time0Iint(){EA=1;TH0 = (65536-2000)/256;//定时2msTL0 = (65536-2000)%256;TMOD &= 0xFC;TMOD = 0x01;ET0 = 1;TR0 = 1;}/******************************************************************************* * 函数名 :void InterruptT0() interrupt 1* 函数功能 : 定时器0中断执⾏部分*******************************************************************************/ void InterruptT0() interrupt 1{TH0 = (65536-2000)/256;//定时2msTL0 = (65536-2000)%256;Light_Scan();KEY_Scan();}/******************************************************************************* * 函数名 : main* 函数功能 : 主函数* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/ void main(){Time0Iint();while(1){Display();KEY_Action();}}参考资料。
单片机实验两位数码管显示报告
一、实验目的1、在之前单键实验和中断控制数码管“静态”显示实验的基础上,把单键判断、数码管显示和中断结合起来编写中断程序实现单键控制一位数码管;2、在实现控制一位数码管显示的基础上用单键控制两位数码管显示。
二、实验所需器材与软件硬件:电脑、传输线、AT89S52单片机软件:编程软件Keil uVision3;读写软件MePro V5.02三、实验程序的及其分析:1、单键控制一位数码管显示主要设计思路:在中断主程序后加入单键判断键按下情况判断语句,把数码管显示程序放在中断子程序中。
当有键按下且有中断请求时,重新给数码管显示偏移地址赋值,从而改变显示内容。
程序:ORG 0000HAJMP MAIN ;转向主程序ORG 001BH ;中断矢量地址AJMP T_INT ;转向中断服务程序MAIN: ;主程序标号MOV R3,#0 ;表偏移地址MOV DPTR,#TAB ;把表头地址赋值给寄存器DPTRMOV TMOD,#10H ;设定定时器工作于模式1MOV TH1,#0FEH ;定时器赋初值MOV TL1,#0EHSETB ET1 ;开中断SETB EASETB TR1 ;启动定时器LOOP1:JNB P1.4, LOOP4AJMP LOOP1LOOP4:ACALL DELAYJNB P1.4, LOOP_ADD 单键按下判断程序LOOP_ADD:INC R3CJNE R3,#10,LOOP8MOV R3,#0LOOP8: AJMP LOOP1T_INT: MOV TH1,#0FEHMOV TL1,#0EHMOV A,R3 中断程序内嵌的数码管显示程序MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BRETITAB:DB 0C0H,0F9H,0A4H,0B0H ,99H,92H,82H,0F8H ;表内容DB 80H,90HDELAY:MOV R5,#64HLOOP5:MOV R7,#0FFHLOOP6:NOPNOP 用于单键按下防抖动的延时程序DJNZ R7,LOOP6DJNZ R5,LOOP5RET2、单键控制两位数码管显示设计思路:用两个寄存器分别存放数码管显示的个位和十位,并且在数码管显示程序中用移位指令对数码管的位码进行移位,使每次执行中断程序时显示一位数,循环两次中断程序后“静态”显示两位数字。
51单片机-数码管显示
} void delay(int x) {
int i,j; for(i=0;i<x;i++)
for(j=1;j<120;j++); }
LED字型显示代码表
段符号
十六进制代码
显示 dp
g
f
e
d
c
b
a 共阴极 共阳极
0
0
1
0
2
0
3
0
4
0
5
0
6
0
7
0
8
0
9
0
A0
b
0
C0
d
0
E0
F
0
H0
P0
0
1
1
1
1
1
1
3FH
C0H
0
0
0
0
1
1
0
06H
F9H
1
0
1
1
0
1
1
5BH
A4H
1
0
0
1
1
1
1
4FH
B0H
1
1
0
0
1
Hale Waihona Puke 1066H
99H
1
1
0
1
1
0
1
6DH 92H
1
1
1
1
1
0
1
7DH
1. 静态显示的特点
静态显示就是单片机将所要显示的数据送出去后,数码管始终显示 该数据(不变),到下一次显示时,再传送一次新的显示数据。
单片机控制数码管显示不同数字的原理
单片机控制数码管显示不同数字的原理English:The principle of controlling a LED display to show different numbers using a microcontroller involves multiplexing. In this process, the microcontroller rapidly turns on and off each segment of the LED display to show the desired number. For a 7-segment LED display, there are 7 segments and an additional 8th segment for the decimal point. By controlling the on and off state of each segment, different numbers can be displayed. The microcontroller sends the appropriate signal to the LED display based on the number to be shown, and by cycling through each digit quickly, the human eye perceives the displayed numbers as continuously lit. This technique allows for a single LED display to show multiple numbers in rapid succession, providing the illusion of multiple digits being displayed simultaneously.Translated content:使用单片机控制LED显示器显示不同数字的原理涉及多路复用。
数码管静态显示实验,单片机实验报告
数码管静态显示实验,单片机实验报告数码管静态显示实验一.实验目的 1.熟悉数码管的功能和使用。
2.熟悉延时子程序的编写和使用。
3.初步熟悉单片机软硬件设计方法。
二.实验仪器计算机、Keil 编程环境、普中下载软件、单片机开发实验仪。
三.实验原理与内容P0 口做输出口,接一个共阳极数码管,要求循环显示。
共阳极数码管字形表(0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,-共17 个字形码)0C0H,0FCH,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0 A1H,86H,8EH,0BFH。
四 . 实验线路及原理五 . 注意事项1.安装实验仪时,先接通讯串口线,再开电源开关。
2.实验过程中,在进行接插线操作时,必须先关闭电源。
六 . 实验步骤1、主机连线说明:JP10 单片机0 P0 口(8 8 位)JP3 共阳极数码管七 . 实验步骤2.打开 Keil 编程软件编写程序,并进行汇编产生HEX 文件。
(1)流程图(2)汇编源程序ORG 00H LJMP MAIN ;初始位置直接跳转MAIN 主程序START; MOV R2,#0 ;赋值R2=0 MOV R5,#17;赋值 R5=17 MAIN: MOV DPTR,#TAB;将 TAB 地址传送给数据指针MOV A,R2 ;赋值累加器 A=0 MOVC A,@A+DPTR;将数组第 A+1 的数据赋值 A MOV P0,A ;赋值 P0 数据的数据INC R2 ;R2 加一LCALL DELAY ;调用延时子程序DJNZ R5,MAIN ;R5 减一不为0 跳转主程序MAIN JMP START ;跳转 START RET DELAY: MOV R0,#5 ;延时子程序DL2: MOV R7,#200 DL1: MOV R6,#250DJNZ R6,$ DJNZ R7,DL1 DJNZ R0,DL2 TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0 A1H,86H,8EH, END (1) C 语言源程序#include #define uint unsigned int Uint table [ ]= (0xC0,0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xBF )Void delay (int z) { int x,y; for (x=z;x>0;x--) for (y=100;y>0;i++) } Void main ( ) {int i ;While (1) {for (i=0;i<17;i++) { P0=table [i]; delay (1000) // 延时 } } } 3.点击普中下载软件,检查设置是否正确,然后下载到实验仪的单片机中。
单片机实验报告二-数码管显示实验
单片机实验报告二-数码管显示实验摘要:本实验使用单片机控制数码管的显示,在实验过程中通过学习单片机的GPIO口的编程,调试程序、调节电路来达到正确的显示效果。
最终按照要求实现了单片机控制数码管的计数器。
关键词:单片机、数码管、GPIO口、计数器一、实验介绍数码管是一种介于机械仪表和液晶显示器之间的电子显示器件,广泛应用于计时器、计数器、仪表等电子产品中。
本实验旨在通过单片机控制数码管的显示来加深对GPIO口的使用和调试程序的理解,同时了解数码管的原理。
本实验主要分为两部分:数码管显示基础实验和数码管控制开关实验。
通过这两部分的实验可以了解数码管的工作原理和单片机的基本控制方式。
二、实验原理2.1 数码管的基本原理数码管显示器将数字显示为一组符号,例如“0”到“9”。
表示不同数字的符号被编码成一个数字码。
七段数码管用一个七段数码字母来表示数字,如下表所示:| 数字 | a | b | c | d | e | f | g || ---- | - | - | - | - | - | - | - || 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 || 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 || 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 || 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 || 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 || 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 || 6 | 0 | 0 | 1 | 1 | 1 | 1 | 1 || 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 || 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 || 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |通过控制数码管的七个LED灯的亮灭,可以实现不同符号显示。
单片机数码管显示原理
单片机数码管显示原理数码管是一种常见的数字显示器件,它可以用来显示数字、字母、符号等信息。
在单片机应用中,数码管常用于显示各种数据,如温度、电压、时间等。
本文将介绍单片机数码管显示的原理。
一、数码管的基本结构数码管是由多个发光二极管(LED)组成的,每个发光二极管都可以发出不同颜色的光。
常见的数码管有共阳极和共阴极两种类型。
共阳极数码管的阳极连接在一起,共阴极数码管的阴极连接在一起。
数码管的结构如下图所示:二、数码管的工作原理数码管的工作原理是通过控制各个发光二极管的亮灭来显示数字、字母、符号等信息。
以共阳极数码管为例,当某个数字需要显示时,单片机会将该数字对应的发光二极管的阳极接通,使其发出光亮。
其他数字对应的发光二极管的阳极则被断开,使其不发光。
这样就可以显示出需要的数字。
三、单片机控制数码管显示的方法单片机控制数码管显示的方法有两种:直接驱动和间接驱动。
1. 直接驱动直接驱动是指单片机的输出端口直接连接到数码管的各个发光二极管上,通过控制输出端口的电平来控制数码管的亮灭。
直接驱动的优点是控制简单,缺点是需要消耗大量的I/O口资源。
2. 间接驱动间接驱动是指单片机的输出端口连接到数码管的驱动芯片上,由驱动芯片来控制数码管的亮灭。
间接驱动的优点是可以节省I/O口资源,缺点是需要额外的驱动芯片。
四、数码管显示的应用数码管广泛应用于各种电子设备中,如计算器、电子钟表、温度计、电压表等。
在单片机应用中,数码管常用于显示各种数据,如温度、电压、时间等。
通过单片机控制数码管的亮灭,可以实现各种数字显示功能。
单片机数码管显示原理是通过控制各个发光二极管的亮灭来显示数字、字母、符号等信息。
单片机控制数码管显示的方法有直接驱动和间接驱动两种。
数码管广泛应用于各种电子设备中,是一种非常实用的数字显示器件。
单片机数码管静态显示及定时器和中断应用
例 利用定时/计数器T1的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 解:1、计算计数初值X: 由于晶振为12 MHz,所以机器周期Tcy为1 s。 所以: N=t/ Tcy =10000/1=10000 X=65536-10000=55536=D8F0H 即应将D8H送入TH0中,F0H送入TL0中 2、求T1的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。 :定时/计数模式选择位。 =0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。TX实验板用共阴LED显示器,根据电路连接图显示16进制数的编码已列在下表。
单片机数码管显示-消影问题
单⽚机数码管显⽰-消影问题看郭天祥的单⽚机书中数码管部分,使⽤ P0=0xff 的⽅法可以消除段选数据对位选的⼲扰,另外使⽤我下⾯的⽅法可以达到同样的效果。
但即便这样数码管仍有影⼦,这种状况是,当前数码管有下⼀个数码管的影⼦,或者当前数码管有前⼀个数码管的影⼦。
分析⼀下产⽣原因,当我们点亮⼀个数码管后,总要先将段选或者位选改为下⼀个数码管的值,⽽不能同时改变。
当先改变段选时,那么当前数码管就会有短暂的时间显⽰下⼀个数码管的数字。
当先改变位选时,下⼀个数码管就会有短暂的时间显⽰当前数码管的数字。
那么解决⽅法是,先将段选置0送⼊锁存器,改变位选的值为下⼀个数码管,最后再改变段选值。
同理另⼀种⽅法是,先将位选赋值 0xff 即关闭所有数码管,改变段选值,最后改变位选值。
另外⼀种勉强可以的⽅法是,增加延时时间,这样正常数字显⽰时间就相对影⼦数字的短暂时间变长,看起来影⼦就变得暗了,但延时太长导致数码管闪烁,所以这种⽅法不建议,郭天祥书中的⽰例程序使⽤这种⽅法。
只贴出前2种⽅法的代码。
#include <reg52.h>#include <intrins.h>sbit we=P2^7;sbit du=P2^6;unsigned char code table[] = {0x3f , 0x06 , 0x5b , 0x4f,0x66 , 0x6d , 0x7d , 0x07,0x7f , 0x6f , 0x77 , 0x7c,0x39 , 0x5e , 0x79 , 0x71,0x00};void show();void delayms(unsigned time);unsigned char num[6]={0,0,14,13,0,12};unsigned char count=0;unsigned char nums=0;unsigned char numm=0;void main(){EA=1;ET0=1;TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;TR0=1;show();}void t0_time() interrupt 1{TH0=(65536-45872)/256;TL0=(65536-45872)%256;count++;if(count%20==0){count=0;nums++;if(nums==60){nums=0;numm++;num[2]=numm%10;num[3]=numm/10;}num[0]=nums%10;num[1]=nums/10;}}void show(){unsigned char i;while(1)for(i=0;i<6;i++){P0=0;du=1;du=0;P0=~(0x20>>i);we=1;we=0;P0=table[num[i]];du=1;du=0;delayms(1);}}void delayms(unsigned time) {unsigned i,j;for(i=time;i>0;i--)for(j=110;j>0;j--);}interrupt.c第⼆种void show(){unsigned char i;while(1)for(i=0;i<6;i++){P0=0xff;we=1;we=0;P0=table[num[i]];du=1;du=0;P0=~(0x20>>i);we=1;we=0;delayms(1);}}interrupt.c。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LED动态显示
R 1K
P07 8
P06 7
P05 6
P04 5
P03 4
P02 3
P01 2
P00 1
3 P07
5 P06
10 P05
1 P04
2 P03
4 P02
7 P01
11 P00
a b c d e f g dp
DPY
a
a
a
a
用时公共阳极接+5V,每个发光二极管的阴极 通过电阻与输入端相连。 (2) 共阴极接法。 发光二极管的阴极连在一起构成公共阴极,使 用时公共阴极接地。每个发光二极管的阳极通 过电阻与输入端相连。
10
第七章 单片机与键盘、显示接口
LED数码管显示段码
为了显示字符,为LED提供显示段码(或称字 形代码),组成一个“8”字形字符的7段,再加 上1个小数点位,共计8段。
第七章 单片机与键盘、显示接口
1 第七章 单片机与键盘、显示接口
7.2 单片机与LED显示器接口
2
第七章 单片机与键盘、显示接口 3
第七章 单片机与键盘、显示接口 4
第七章 单片机与键盘、显示接口
数码计数显示在生活中的应用极其广泛,如交通信号 指示、仪器仪表计数显示等, LED数码管体积小、重量轻,并且功耗低,是一种理 想的显示单片机数据输出内容的器件。
LED动态显示
(一)功能要求
基本要求 动态数码计数显示器能显示完整的双位学号。
29
第七章 单片机与键盘、显示接口
(二) 任务分析 要完成此任务,主要需解决如下四方面的问题: 1. 为什么要采用数码管动态显示; 2. LED动态显示的工作原理; 3. LED数码管与单片机动态显示接口电路的设计方法; 4. LED数码管动态显示程序的设计方法;
优点是占用机时少,显示稳定可靠。 缺点是当显示的位数较多时,占用I/O口较多。
在动态显示系统中,微处理器或控制器定时地对各个显示器进 行扫描,显示器件分时轮流工作。 优点是硬件少,占用I/O口少。
缺点是占用机时长,只要不执行显示程序,就立刻停止显示。
19
abcdef g
7 6 4 2 1 9 10 5
24
第七章 单片机与键盘、显示接口
void main() {
uchar m=0; while(1) { if(m==16) m=0; P1=table[m++]; delay(1000); } }
//显示从"0"开始
//如当m=16时,回到0,重新开始。 //循环一次,m+1. //延时显示数码管
31
第七章 单片机与键盘、显示接口
显示的数据为双位学号,必须采用二个数码管分别显示学号的 个位和十位; 采用静态显示的方案,分别对个位和十位的数码管单独采用位 控制和段控制,进行位控制需要二位单片机I/O端口,而段控制 则需要十六位单片机I/O端口。 在很多设备中,显示的数据可能达到4位、6位、8位甚至更多, 如果依然采用静态显示的方法,所需的I/O端口可达到几十位之 多; I/O端口的数量是有限的,大部分的I/O端口还具有第二功能, 如89C51中的P3、P2、P0。
25
第七章 单片机与键盘、显示接口
void delay(uint k) //延时 {
uchar a,b; for(;k>0;k--)
for(b=120;b>0;b--) for(a=2;a>0;a--);
}
26
第七章 单片机与键盘、显示接口
小结: 静态显示方式 每一位显示器的字段控制是独立的,每一位的显示
例: 显示班级学号的个位数
固定地显示某一个数(即班级学号的个位数); 只要I/O口输出一个字符编码,同时让公共端固定保持 高电平,则数码管将显示对应的字符。 假设某位同学的学号个位数为“5”; 则显示该数的程序如下 :
MAIN:
MOV P1,#92H ; 将字符编码92H输出到P1口,显示“5”
9
10
11
12
13
14
15
16
P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8
INT1 13 INT0 12
T1 15 T0 14
31
19 18
9
RD 17 WR 16
U1
P10
P00
P11
P01
P12
P02
P13
P03
P14
P04
P15
P05
P16H
79H
86H
71H
8EH
73H
8CH
3EH
C1H
31H
CEH
6EH
91H
38H
C7H
FFH
00H
00
FFH
……
……
12
第七章 单片机与键盘、显示接口
7.2.2 硬件译码和软件译码 为了显示某个数或字符,就要点亮对应的段,需要译码。 译码有硬件译码和软件译码。 由七段译码/驱动器74LS47完成BCD码转换为对应的七段字 型码(简称段码) 。 硬件译码电路的计算机开销时间较小,但硬件开支大。 与硬件电路相比,软件译码显示电路省去硬件译码器,其译 码工作由软件来完成。 微处理器有较强的逻辑控制能力,采用软件译码并不复杂。 采用软件译码不仅可使硬件电路简化,而且其译码逻辑可随编 程设定,不受硬件译码逻辑的限制。 使用较多的是软件译码方式。
13
第七章 单片机与键盘、显示接口
图 硬件译码显示电路(共阳极接法)
图 软件译码显示电路(共阴极接法)
14
第七章 单片机与键盘、显示接口
15 第七章 单片机与键盘、显示接口
共阳极
16
7.2.3 静态显示和动态显示 LED静态显示
第七章 单片机与键盘、显示接口
17
第七章 单片机与键盘、显示接口
5V
器都需要配一个8位输出口来输出该字位的段码。
如果显示位数为N,则需要N×8个输出口。一般片
内I/O口不足供应,需要在片外扩充。 以三个LED字符显示器组成的三位静态显示电路为
例,需要在片外扩充3×8个输出口去控制。
27
89C51
第七章 单片机与键盘、显示接口
3位LED静态显示电路
28
第七章 单片机与键盘、显示接口
32
第七章 单片机与键盘、显示接口
如果采用静态显示的方案,将占有太多 的I/O资源,甚至根本无法实现。 必须采用其它的显示方案,既数码管的 动态显示。
33
第七章 单片机与键盘、显示接口
(四)LED数码管动态显示的工作原理 如果在多位数码管显示数据时,将各数码管相同的段并联 在一起,如所有的a段都连在一起,既共用段控制端口,这 样每增加一个数码管,只需要增加一个位控制端口即可,从 而大量地减少了I/O端口的占用。 图中数码管DLED1和数码管DLED2连接的各段分别连接 在一起,共用段控制端口P1,而位控制由端口P2.7和P2.6分 别控制,从而大量减少了I/O端口的占用。
34
DLED1
第七章 单片机与键盘、显示接口
提供给LED显示器的显示段码为1个字节。 各段码位的对应关系如下:
段码位 D7 D6 D5 D4 D3 D2 D1 D0 显示段 dp g f e d c b a
11
第七章 单片机与键盘、显示接口
从管脚输入不同的8位二进制编码,可显示不同的数字或字符。 共阴极和共阳极的字段码互为反码 。
显示字符 0 1 2 3 4 5 6 7 8 9 A B
共阴极字段码 共阳极字段码
3FH
C0H
06H
F9H
5BH
A4H
4FH
B0H
66H
99H
6DH
92H
7DH
82H
07H
F8H
7FH
80H
6FH
90H
77H
88H
7CH
83H
显示字符 C D E F P U T Y L 8.
“灭” ……
共阴极字段码 共阳极字段码
19 18
INT1 INT0
T1 T0
EA/VP
X1 X2
AT89C 51
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
P2 . 7
9 RESET
17 16
RD WR
RXD TXD ALE/P PSEN
10 11 30 29
静态显示接口电路
f g bf g bf g bf g b
e ce ce ce c
d
d
d
d
dp
dp
dp
dp
DPY 4-LED
P20 6 C0 P21 8 C2 P22 9 C3 P23 12 C4
LED
18
7.2.3 静态显示和动态显示
第七章 单片机与键盘、显示接口
在静态显示中, 每位显示器都有各自的锁存器、译码器(采 用软件译码时译码器可省去),以锁存各自待显示数字的BCD 码。静态显示系统的每次显示能够保持不变,仅在待显数字需 要改变时,才更新其锁存的内容。
CLR P2.7
; 共阳极,P2.7输出低电平,
; 则公共端(8脚)保持高电平
HERE: SJMP HERE ; 循环等待。
22
第七章 单片机与键盘、显示接口
数码管静态显示实例
23
第七章 单片机与键盘、显示接口
数码管静态显示实例
#include <reg51.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar code table[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳极数码管段码表