数码管动态扫描显示01234567
数码管 动态显示原理
数码管动态显示原理
数码管的动态显示原理是通过快速地切换数字的显示段来实现连续的数字显示。
数码管通常由7个显示段构成,分别代表数字0-9的不同显示形式。
这些段也被称为a、b、c、d、e、f和
g段。
在动态显示过程中,每个数字被逐个切换显示的时间非常短,通常为几毫秒。
这个时间非常短,以至于人眼无法察觉数字的切换。
因此,当多个数码管以高速切换显示数字时,人眼会感觉到所有数码管上的数字同时显示。
要实现动态显示,需要使用一个计数器来控制切换显示的时间。
这个计数器通常是一个定时器,它会以一定的频率触发中断,每次中断时触发一次显示切换。
通过不断增加计数值,可以控制不同数字的显示时间。
为了显示一个多位数,需要使用多个数码管并连接到控制器上。
控制器会根据待显示的数字,将适当的段信号发送到对应的数码管上。
通过在不同的数码管上切换显示,就可以实现多位数的动态显示。
动态显示的基本原理如下:
1. 设置初始的数码管选择位,使其对应第一个数码管。
2. 将第一个数码管对应的段信号置为显示的数字。
3. 延时一段时间,使人眼无法察觉到数字的切换。
4. 将第一个数码管的段信号置为低电平(或不显示的状态)。
5. 设置下一个数码管的选择位,使其对应下一个数码管。
6. 重复2-5步骤,直至所有数码管都完成一轮显示。
7. 返回第一步,重复整个过程,以实现连续的动态显示。
通过以上步骤的循环,不断切换显示的数字会给人一种连续而平滑的显示效果。
这就是数码管动态显示的基本原理。
简述七段数码管动态扫描显示原理
简述七段数码管动态扫描显示原理
七段数码管动态扫描显示原理是指通过对七段数码管的各段进行逐个刷新,以实现数字、字母和符号等信息的显示。
七段数码管由7个LED灯组成,分别代表数字0~9和字母A~F等,可以通过控制各个LED的亮灭状态来显示不同的字符。
动态扫描显示原理是通过快速地在各个数码管之间切换显示内容,使得人眼无法察觉到切换的过程,从而产生连续的显示效果。
具体实现过程如下:
1. 将需要显示的数字或字符转换为相应的LED点亮状态,通过控制各个数码管的引脚来实现。
2. 通过控制锁存器的输入使得数据在锁存器中存储。
3. 通过控制锁存器的输出使得数据从锁存器输出到数码管的控制引脚上。
4. 通过控制位选锁存器的输出,选择显示的数码管。
5. 通过控制位选锁存器的使能引脚,控制数码管的亮灭状态。
6. 循环执行上述步骤,不断刷新各个数码管的显示内容,使得整个显示效果连续而流畅。
7. 根据需要的显示速度和亮度,可以调整刷新频率和亮灭时间的设置。
通过这种动态扫描的方式,只需要控制一部分引脚,就能够实现多
个七段数码管的显示,从而减少了所需的引脚数量和控制复杂度,提高了显示的效率和可靠性。
任务六:数码管动态显示0~7.
任务六:数码管动态显示0~7(1电路图XTAL1XTAL2XTAL1XTAL2XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD 633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A 1326P2.6/A1427U1AT89C51Q2PNPQ3PNPQ4PNPQ5PNPQ6PNPQ7PNPQ8PNPQ1PNPR11kR21k R31k R41k R51k R61kR71k R81kR94.7k R104.7k R114.7k R124.7k R134.7k R144.7kR154.7kR16 4.7kR172k该电阻仿真有, 实际没有!C110uFC230PFX1CRYSTAL 12MHzR20200R21900此值在实际中为8.2KC330PF(2流程图(3程序ORG 00HLJMP MAIN ORG 30HMAIN: MOV P2,#0FFH ;初始化 MOV P0,#0FFH MOV R0,#00H MOV R1,#0FEHLOOP: MOV A,R0MOV DPTR,#TAB;指向表格首地址 MOVC A,@A+DPTR MOV P0,#0FFHMOV P0,A ;把A 的内容移入P2中 MOV P2,R1 LCALL DELAY MOV A,R1 RL A MOV R1,A INC R0 CJNE R0,#8,LOOP ;此数字为表格数值个数 MOV R0,#00H LJMP LOOP TAB: ;数码管段码表 DB 0C0H,0F9H,0A4H,0B0H DB099H,092H,082H,0F8H DB 080H,090H,088H,083H DB 0C6H,0A1H,086H,08EH DELAY:MOV R7,#4;延时10MS 子程序 D1:MOV R6,#123 NOPD2:DJNZ R6, D2 DJNZ R7,D1 RET END说明:此电路为实验板电路,其P0口控制段码端,P2口控制位码端,程序中加粗几句为位码控制移动程序,利用中间量A 移动位码,循环点亮数码管。
数码管动态数字显示
LED数码管动态显示共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。
原理示意图:从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。
这样才能显示的。
例:如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可,编码方法如下表:程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符。
5双位数码管显示控制程序START: MOV R0,#0 ;清零MOV DPTR,#TABLE ;指定查表起始地址LOOP: ACALL DISPLAY ;调用子程序DISPLAY INC R0 ;R0加1CJNE R0,#100,LOOP ;R0未到100则转换JMP START ;跳转DISPLAY: MOV A,R0 ;把R0里的数据送入A MOV B,#10 ;把10送入BDIV AB ;a b相除MOV 20H,A ;十位送入20HMOV 21H,B ;个位送入21HMOV R3,#50 ;把50送入R3LOOP1: MOV A,21H ;取个位数ACALL CHANG ;调用子程序CHANG CLR P2.4 ;开个位显示ACALL DLY ;调用子程序DLYSETB P2.4 ;关闭个位显示MOV A,20H ;取十位数6ACALL CHANG ;调用子程序CHANGCLR P2.5 ;开十位显示ACALL DLY ;调用子程序DLYSETB p2.5 ;关闭十位显示DJNZ R3,LOOP1 ;循环50次RET ;子程序返回CHANG: MOVC A,@A+DPTR ;查表MOV P0,A ;查表结果送入P0RET ;子程序返回DLY: MOV R6,#20 ;典型延时子程序延时D1: MOV R7,#248 ;10msDJNZ R7,$DJNZ R6,D1RETTABLE: DB 0C0H,0F9H,0A4H ;表数据共阳极数码管显示代码 DB 0B0H,99H,92H,82HDB 0F8H,80H,90HEND。
控制八只数码管动态扫描显示0~7
#define uchar unsigned char;//无符号字符型占八位数,表示范围0~255
sbit dula=P2^6;//申明U1锁存器锁存端段选
void main()
{
TMOD=0X01;//设置定时器0为工作方式1(M1M0为01)
TH0=(65536-200)/256;//装初值12.00M晶振定时0.1ms数为200,求商
TL0=(65536-200)%256;//装初值12.00M晶振定时0.1数为200,求余
EA=1;//开总中断
num1++;
}
wela=1;
P0=wetable[num3];
wela=0;
num3++;
if(num3==7)
num3=0;
}
}
}
void zhongduan () interrupt 1//中断定时
{
TH0=(65536-200)/256;//重装初值,12.00M晶振定时0.1数为200,求商
TL0=(65536-200)%256;//装初值12.00M晶振定时0.1s数为200,求余
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)//程序停止在这里,开始大循环
{
if(num1==10)//控制八只数码管动态扫描显示0~7
{
num1=0;
dula=1;
P0=dutable[num2];
dula=0;
num2++;
数码管流动显示12345678
学号天津城建大学嵌入式系统及应用课程设计设计说明书数码管流动显示12345678起止日期:2015 年11月15日至2015 年11月27 日学生姓名班级成绩指导教师(签字)计算机与信息工程学院2015年11 月27 日课程设计报告书题目: 数码管流动显示12345678学生姓名:学生学号:院名:专业:任课教师:目录摘要 (II)第一章课设总述 (1)1.1单片机概述 (1)1.3课题研究的目的和意义 (1)1.4课题的主要研究工作 (1)第二章系统硬件介绍及设计 (2)2.1AT89C51简介 (2)1.2数码管7SEG-COM-AN-BLUE介绍(7段数码管) (3)2.2硬件电路图 (4)2.3元件清单 (4)第三章系统软件设计 (5)3.1程序描述 (6)3.2程序流程图 (6)第四章系统调试 (7)4.1在PROTEUS中仿真 (7)参考文献 (7)摘要1.内容:利用动态扫描让八位数码管稳定的显示1、2、3、4、5、6、7、82.目标:(1)掌握单片机控制八位数码管的动态扫描技术,包括程序设计和电路设计,本任务的效果是让八位数码管稳定的显示12345678。
(2)用PROTEUS进行电路设计和实时仿真3.知识点链接(1)数码管动态扫描(动态扫描的定义以及与静态显示的区别)动态显示的特点是将所有位数码管的段选线s一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
(2)总线的应用元器件与总线的连线P0口的接线采用总线方式,详细如电路图1所示。
①选择总线按钮②绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。
如果终点在空白处,左键双击结束连线。
画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。
此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。
数码管动态扫描显示(定时中断),显示数字0-7
code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//显示位码
static unsigned char n = 0;//显示位计数,0-7
TR1 = 0;
TH1 = 0xFC;//对应定时时间(每位显示持续时间):0xfc66,1ms; 0xdc00,10ms; 0x0000,71.1ms
includereg51h包含8051的sfr寄存器定义头文件includeabsacch扩展并行接口所需的绝对地址访问库函数defineleddigxbyte0x9000位数码管显示器的位选输出控制defineledsegxbyte0x8000位数码管显示器的段码字形码输出控制definekeyinxbyte0x8000codeunsignedchardispseg显示段码0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5f0x790x710x400x000xff
/*
数码管动态扫描显示(定时中断),显示数字0-7
*/
#include <reg51.h>//包含8051的SFR寄存器定义头文件
#include <absacc.h>//扩展并行接口所需的绝对地址访问库函数
#define LED_digXBYTE[0x9000]//8位数码管显示器的位选输出控制
#define LED_seg XBYTE[0x8000]//8位数码管显示器的段码(字形码)输出控制
key_value = 1;
break;
case ~0x02:
key_value = 2;
break;
七段数码管动态显示程序
七段数码管动态显示程序七段数码管动态显示程序2009-04-20 19:20:06| 分类:计算机阅读1288 评论1 字号:大中小订阅; 七段数码管动态显示程序; 四位数码管固定显示"1234";************************************************* ACC EQU [05H] ;定义专用寄存器ACCTBLP EQU [07H] ;定义专用寄存器TBLPPCL EQU [06H] ;定义专用寄存器PCLPA EQU [12H] ;定义专用寄存器PAPAC EQU [13H] ;定义专用寄存器PACPB EQU [14H] ;定义专用寄存器PBPBC EQU [15H] ;定义专用寄存器PBCPC EQU [16H] ;定义专用寄存器PCPCC EQU [17H] ;定义专用寄存器PCCDISP_RAM EQU [78H] ;查表得到显示代码DISP_RAM1 EQU [79H] ;数码管1显示内容寄存器DISP_RAM2 EQU [7AH] ;数码管2显示内容寄存器DISP_RAM3 EQU [7BH] ;数码管3显示内容寄存器DISP_RAM4 EQU [7CH] ;数码管4显示内容寄存器DISP_NUM1 EQU [7DH] ;每个数码管显示时延时寄存器DISP_NUM2 EQU [7EH] ;一次调用显示时延时寄存器NUM1 EQU 20H ;每个LED显示时延时参数NUM2 EQU 30H ;一次调用显示时延时参数;---------------------------------------- ORG 000HJMP START ;芯片上电,程序开始执行地址ORG 004HRETI ;外中断子程序开始地址ORG 008HRETI ;定时器0中断子程序开始地址ORG 00CHRETI ;定时器1中断子程序开始地址ORG 020HSTART:MOV A,00HMOV PAC,A ;设置PA口为输出口MOV PCC,A ;设置PC口为输出口SET PA ;PA口为高,关LED数码管CLR PC ;PC口为低,关四个三极管MAIN:MOV A,01HMOV DISP_RAM1,A ;数码管1显示"1"MOV A,02HMOV DISP_RAM2,A ;数码管2显示"2"MOV A,03HMOV DISP_RAM3,A ;数码管3显示"3"MOV A,04HMOV DISP_RAM4,A ;数码管4显示"4"MAIN1:CALL DISPLAY ;调显示子程序JMP MAIN1 ;反复循环.;*****************************************; DISPLAY [DISP_RAM1]==> LED1 [DISP_RAM2]==> LED2 ; [DISP_RAM3]==> LED3 [DISP_RAM4]==> LED4;*****************************************DISPLAY PROC ;显示子程序MOV A,NUM2MOV DISP_NUM2,A ;四个数码管循环显示的次数.LOOP:MOV DISP_NUM1,A ;数码管1 显示的延时时间设置.MOV A,04HMOV PC,A ;PC.2=1,数码管1的VDD接通MOV A,DISP_RAM1MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP1:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP1 ;延时功能SET PA ;关显示CLR PC.2 ;PC.2=0,数码管1的VDD断开MOV A,NUM1MOV DISP_NUM1,A ;数码管2 显示的延时时间设置MOV A,08HMOV PC,A ;PC.3=1,数码管2的VDD接通MOV A,DISP_RAM2MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP2:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP2 ;延时功能SET PA ;关显示CLR PC.3 ;PC.3=0,数码管2的VDD断开MOV DISP_NUM1,A ;数码管3 显示的延时时间设置.MOV A,10HMOV PC,A ;PC.4=1,数码管3的VDD接通MOV A,DISP_RAM3MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP3:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP3 ;延时功能SET PA ;关显示CLR PC.4 ;PC.4=0,数码管3的VDD断开MOV A,NUM1MOV DISP_NUM1,A ;数码管4 显示的延时时间设置.MOV A,20HMOV PC,A ;PC.5=1,数码管4的VDD接通MOV A,DISP_RAM4MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP4:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP4 ;延时功能SET PA ;关显示CLR PC.5 ;PC.5=0,数码管4的VDD断开DEC DISP_NUM2 ;循环显示次数-1SZ DISP_NUM2 ;判断循环结束否?JMP LOOP ;没结束,跳去LOOP,继续循环RET ;循环结束,子程序返回.DISPLAY ENDP;****************************************; WORK1;****************************************WORK1 PROC ;WORK1功能模块,留给学习者自己加RETWORK1 ENDP;****************************************; WORK2;****************************************WORK2 PROC ;WORK2功能模块,留给学习者自己加RETWORK2 ENDP;************************************************************** **; 表格区,0~9对应的显示代码.;************************************************************** **ORG 0F00H; 0 1 2 3 4 5 6 7 8 9 TABLE: DW 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;************ ****************************************************END。
数码管流动显示12345678
学号天津城建大学嵌入式系统及应用课程设计设计说明书数码管流动显示12345678起止日期:2015 年11月15日至2015 年11月27 日学生姓名班级成绩指导教师(签字)计算机与信息工程学院2015年11 月27 日课程设计报告书题目: 数码管流动显示12345678学生姓名:学生学号:院名:专业:任课教师:目录摘要.................................................................................................................................... 第一章课设总述. (1)1.1单片机概述 (1)1.3课题研究的目的和意义 (1)1.4课题的主要研究工作 (1)第二章系统硬件介绍及设计 (2)2.1AT89C51简介 (2)1.2数码管7SEG-COM-AN-BLUE介绍(7段数码管) (3)2.2硬件电路图 (4)2.3元件清单 (4)第三章系统软件设计 (5)3.1程序描述 (6)3.2程序流程图 (6)第四章系统调试 (7)4.1在PROTEUS中仿真 (7)参考文献 (7)摘要1.内容:利用动态扫描让八位数码管稳定的显示1、2、3、4、5、6、7、82.目标:(1)掌握单片机控制八位数码管的动态扫描技术,包括程序设计和电路设计,本任务的效果是让八位数码管稳定的显示12345678。
(2)用PROTEUS进行电路设计和实时仿真3.知识点链接(1)数码管动态扫描(动态扫描的定义以及与静态显示的区别)动态显示的特点是将所有位数码管的段选线s一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
(2)总线的应用元器件与总线的连线P0口的接线采用总线方式,详细如电路图1所示。
数码管动态显示原理
数码管动态显示原理数码管是一种常见的数字显示器件,广泛应用于各种计数、计时、测量等场合。
它采用了七段显示技术,能够显示0-9的数字以及一些字母。
在实际应用中,我们经常会看到数码管动态显示各种数字、字母和符号,那么数码管是如何实现动态显示的呢?接下来,我们将深入探讨数码管动态显示的原理。
数码管动态显示的原理是利用人眼视觉暂留效应,通过快速切换不同的数字片段,使其在人眼中产生连续的图像,从而实现动态显示的效果。
具体来说,数码管的每个数字片段都由LED或其他发光二极管组成,当需要显示某个数字时,控制电路会依次点亮对应的数字片段,然后迅速切换到下一个数字片段,以此类推,最终形成连续的数字显示效果。
在实际电路中,数码管的动态显示原理通常是通过微控制器或者集成电路来实现的。
微控制器会根据需要显示的数字,控制对应的数字片段逐个点亮,并在一定的时间内完成所有数字片段的切换,这样就能够形成连续的动态显示效果。
而集成电路则会根据外部输入的控制信号,来控制数字片段的点亮和切换,实现动态显示的功能。
除了数字的动态显示,数码管还可以实现字母、符号等其他图形的动态显示。
这是因为数码管的每个数字片段都可以独立控制,因此可以通过合理的控制顺序和时间,实现各种图形的动态显示效果。
在实际应用中,数码管动态显示原理被广泛运用于各种计数器、计时器、温度计、电子钟表等设备中。
通过动态显示,不仅能够节省显示器件的数量,还能够提高显示效果,增强用户体验。
同时,数码管动态显示原理也为数字显示技术的发展提供了重要的思路和方法,推动了数字显示技术的不断创新和进步。
总的来说,数码管动态显示原理是利用人眼视觉暂留效应,通过快速切换不同的数字片段,实现连续的动态显示效果。
这一原理在微控制器和集成电路的控制下得到了广泛的应用,并在各种电子设备中发挥着重要作用。
随着数字显示技术的不断发展,数码管动态显示原理也将不断完善和拓展,为数字显示技术的创新和应用提供更多可能性。
EDA流水灯,数码管显示01234567,加减计数,
练习1.两位的循环彩灯,自定义的循环彩灯2.用另外的方式实现按键控制数码管加减3.设计一个在四个数码管上,显示拨码开关给定的值。
1、设计一个流水灯。
原理图设计:(8位流水灯)程序设计:(16位流水灯)module led_s(rst,clk,leds);input rst,clk;output [15:0] leds;reg [15:0] leds;reg [3:0]count;always @(posedge clk)beginif (rst)count <=16 'h00_00;elsebeginif(count==4'hf)count <=16 'h00_00;elsecount <=count+1;endendalways @(count)begincase(count)0: leds<= 16 'b0000_0000_0000_0001;1: leds<= 16 'b0000_0000_0000_0010;2: leds<= 16 'b0000_0000_0000_0100;3: leds<= 16 'b0000_0000_0000_1000;4: leds<= 16 'b0000_0000_0001_0000;5: leds<= 16 'b0000_0000_0010_0000;6: leds<= 16 'b0000_0000_0100_0000;7: leds<= 16 'b0000_0000_1000_0000;8: leds<= 16 'b0000_0001_0000_0000;9: leds<= 16 'b0000_0010_0000_0000;10: leds<=16 'b0000_0100_0000_0000;11: leds<=16 'b0000_1000_0000_0000;12: leds<=16 'b0001_0000_0000_0000;13: leds<=16 'b0010_0000_0000_0000;14: leds<=16 'b0100_0000_0000_0000;15: leds<=16 'b1000_0000_0000_0000;default: leds<=16 'hxxxx;endcaseendendmodule2、设计一个加减计数器,计数器的值在一位数码管上显示出来。
任务六:数码管动态显示0~7.
任务六:数码管动态显示0~7(1电路图XTAL1XTAL2XTAL1XTAL2XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD 633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A 1326P2.6/A1427U1AT89C51Q2PNPQ3PNPQ4PNPQ5PNPQ6PNPQ7PNPQ8PNPQ1PNPR11kR21k R31k R41k R51k R61kR71k R81kR94.7k R104.7k R114.7k R124.7k R134.7k R144.7kR154.7kR16 4.7kR172k该电阻仿真有, 实际没有!C110uFC230PFX1CRYSTAL 12MHzR20200R21900此值在实际中为8.2KC330PF(2流程图(3程序ORG 00HLJMP MAIN ORG 30HMAIN: MOV P2,#0FFH ;初始化 MOV P0,#0FFH MOV R0,#00H MOV R1,#0FEHLOOP: MOV A,R0MOV DPTR,#TAB;指向表格首地址 MOVC A,@A+DPTR MOV P0,#0FFHMOV P0,A ;把A 的内容移入P2中 MOV P2,R1 LCALL DELAY MOV A,R1 RL A MOV R1,A INC R0 CJNE R0,#8,LOOP ;此数字为表格数值个数 MOV R0,#00H LJMP LOOP TAB: ;数码管段码表 DB 0C0H,0F9H,0A4H,0B0H DB099H,092H,082H,0F8H DB 080H,090H,088H,083H DB 0C6H,0A1H,086H,08EH DELAY:MOV R7,#4;延时10MS 子程序 D1:MOV R6,#123 NOPD2:DJNZ R6, D2 DJNZ R7,D1 RET END说明:此电路为实验板电路,其P0口控制段码端,P2口控制位码端,程序中加粗几句为位码控制移动程序,利用中间量A 移动位码,循环点亮数码管。
在数码管上显示0-7
//7段数码管测试实验:以动态扫描方式在8位数码管“同时”显示0-7//实验的目的是向用户介绍多个数码管动态显示的方法。
//动态显示的方法是,按一定的频率轮流向各个数码管的COM端送出低电平,同时送出对应的数据给各段module led_0_7 (clk,rst,dataout,en);input clk,rst;output[7:0] dataout; //数码管的段码输出output[7:0] en; //数码管的位选使能输出reg[7:0] dataout; //各段数据输出reg[7:0] en;reg[15:0] cnt_scan;//扫描频率计数器reg[4:0] dataout_buf;always@(posedge clk or negedge rst)beginif(!rst) begincnt_scan<=0;endelse begincnt_scan<=cnt_scan+1;endendalways @(cnt_scan)begincase(cnt_scan[15:13])3'b000 :en = 8'b1111_1110;3'b001 :en = 8'b1111_1101;3'b010 :en = 8'b1111_1011;3'b011 :en = 8'b1111_0111;3'b100 :en = 8'b1110_1111;3'b101 :en = 8'b1101_1111;3'b110 :en = 8'b1011_1111;3'b111 :en = 8'b0111_1111;default :en = 8'b1111_1110;endcaseendalways@(en) //对应COM信号给出各段数据begincase(en)8'b1111_1110:dataout_buf=0;8'b1111_1101:dataout_buf=1;8'b1111_1011:dataout_buf=2;8'b1111_0111:dataout_buf=3;8'b1110_1111:dataout_buf=4;8'b1101_1111:dataout_buf=5;8'b1011_1111:dataout_buf=6;8'b0111_1111:dataout_buf=7;default:dataout_buf=8;endcaseendalways@(dataout_buf)begincase(dataout_buf)4'b0000:dataout=8'b1100_0000;4'b0001:dataout=8'b1111_1001;4'b0010:dataout=8'b1010_0100;4'b0011:dataout=8'b1011_0000;4'b0100:dataout=8'b1001_1001;4'b0101:dataout=8'b1001_0010;4'b0110:dataout=8'b1000_0010;4'b0111:dataout=8'b1111_1000;4'b1000:dataout=8'b1000_0000;4'b1001:dataout=8'b1001_1000;4'b1010:dataout=8'b1000_1000;4'b1011:dataout=8'b1000_0011;4'b1100:dataout=8'b1100_0110;4'b1101:dataout=8'b1010_0001;4'b1110:dataout=8'b1000_0110;4'b1111:dataout=8'b1000_1110;endcaseendendmodule。
单片机数字显示说明
实验5 数码管动态扫描显示01234567原理图:8个数码管它的数据线并联接到JP5,位控制由8个PNP型三级管驱动后由JP8引出。
数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
我们分别把他命名为A,B,C,D,E,F,G,H。
搞懂了这个原理, 我们如果要显示一个数字2, 那么A,B,G,E,D这5个段的发光管亮就可以了。
也就是把B,E,H(小数点)不亮,其余全亮。
根据硬件的接法我们编出以下程序。
当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。
LOOP:CLR P2.7;选中最后的数码管SETB P0.7;B段不亮SETB P0.5;小数点不亮SETB P0.1;C段不亮CLR P0.2;其他都亮CLR P0.3CLR P0.4CLR P0.6CLR P0.0JMP LOOP;跳转到开始重新进行END把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。
也许你会说:显示1个2字就要10多行程序,太麻烦了。
显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮为1(高电平)是灭。
从高往低排列,(p0.7_p0.0)写成二进制为01111110,把他转化为16进制则为A2H。
我们可以根据硬件的接线把数码管显示数字编制成一个表格,以后直接调用就行了。
显示p0.7C p0.6Ep0.5小数点p0.4Dp0.3Gp0.2Ap0.1Fp0.0BHEX代码0 0 0 1 0 1 0 0 0 28H1 0 1 1 1 1 1 1 0 7EH2 1 0 1 0 0 0 1 0 A2H3 0 1 1 0 0 0 1 0 62H4 0 1 1 1 0 1 0 0 74H5 0 1 1 0 0 0 0 1 61H6 0 0 1 0 0 0 0 1 21H7 0 1 1 1 1 0 1 0 7AH8 0 0 1 0 0 0 0 0 20H9 0 1 1 0 0 0 0 0 60H有了这个表格上面显示一个2的程序则可简化为LOOP:CLR P2.7;选中左边的数码管MOV P0,#0A2H;送数字2的代码到P0口JMP LOOP;跳转到开始重新进行END原理图中把所有数码管的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
七段数码管的动态扫描显示实验报告
实验四七段数码管的动态扫描显示一、实验目的1.进一步熟悉QuartusII软件进行FPGA设计的流程;2.掌握利用宏功能模块进行常用的计数器, 译码器的设计;3.学习和了解动态扫描数码管的工作原理的程序设计方法;二、实验原理及过程实验板上面常用的4为联体的共阳极7段数码管。
其接口电路是把所有数码管的8个笔划段a-h同名端连接起来, 而每一个数码管由一个独立的公共极COM端控制。
对于这种结构的数码管, 采用动态显示的方法是最为广泛的一种显示方式之一。
在轮流点亮的过程中每位显示器的点亮时间都极为短暂, 但由于人的视觉暂留现象以及发光二极管的余晖效应, 尽管实际上每个显示器并非同时点亮, 但只要扫描的速度足够快(如达到30Hz以上), 给人的印象就是一组稳定的显示数据, 不会有闪烁感。
1、本次实验要求在实验板上实现显示00000000-99999999的十进制计数器。
使用的是宏模块产生一个16位的二进制计数器counter()作为4个数码管的显示数据;编写一个分频模块div, 其输出作为计数器counter()的时钟信号;编写数码管驱动模块segmain, 完成7段译码和扫描显示控制2、建立工程, 并建立顶层图。
3、设计计数时钟设计一分频器, 对50Mhz分频输出到计数器, 让计数器以较慢速度递增。
建立.v文件, 输入以下代码module int_div(clk,div_out);input clk;output reg div_out;reg[31:0] clk_div;parameter CLK_FREQ='D50_000_000;parameter DCLK_FREQ='D10;always@(posedge clk)beginif(clk_div<CLK_FREQ/DCLK_FREQ)clk_div<=clk_div+1;elsebeginclk_div<=0;div_out=~div_out;endendendmodule输入完成后, 将该文件设为顶层文件, 并分析该设计文件, 用于检查设计错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 数码管动态扫描显示01234567
原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。
相关原理:
数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
我们分别把他命名为
A,B,C,D,E,F,G,H。
搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。
也就是把B,E,H(小数点)不亮,其余全亮。
根据硬件的接法我们编出以下程序。
当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。
LOOP:
CLR P2.7 ;选中最后的数码管
SETB P0.7 ;B段不亮
SETB P0.5 ;小数点不亮
SETB P0.1 ;C段不亮
CLR P0.2 ;其他都亮
CLR P0.3
CLR P0.4
CLR P0.6
CLR P0.0
JMP LOOP ;跳转到开始重新进行
END
把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。
也许你会说:显示1个2字就要10多行程序,太麻烦了。
显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮
为1(高电平)是灭。
从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。
我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。
有了这个表格上面显示一个2的程序则可简化为:
LOOP:
CLR P2.7 ;选中左边的数码管
MOV P0,#0A2H ;送数字2的代码到P0口
JMP LOOP ;跳转到开始重新进行
END
原理图中把所有数码管的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个PNP的三极管,来控制这8位哪一位工作,例如上面的例子中我们选中的是P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只需要把程序CLR P2.7改为CLR P2.0即可。
在这里就有了一个矛盾, 所有数码管的8个笔划段a-h同名端连在一起, 那么在一个屏幕上如何显示0,1,2,3,4,5这样不同的数字呢? 的确,在这样的接法中,同一个瞬间所有的数码管显示都是相同的, 不能显示不同的数字。
在单片机里,首先显示一个数, 然后关掉.然后显示第二个数,又关掉, 那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
例如数码管显示01234567这么8个数,在单片机中实际的工作流程如下:先打开P2.0,送0, 然后关掉P2.0,打开P2.1送1, 再关掉P2.1,打开P2.2送2 , 依次向下,由于速度足够快, 那么我们将连续的看到01234567这8个数。
程序运行照片:
1、接8位数码管的数据线。
将数码管部份的数据口 JP5接到CPU部份的P0口JP51.
2、接8位数码管的显示位线。
将数码管部份的显示位口 JP8接到CPU部份的P2口JP52.
程序流程图:
汇编语言参考程序:
ORG 0000H
AJMP MAIN
ORG 0080H
MAIN:
CLR P2.0 ;选中第一个数码管MOV P0,#28H ;显示0
LCALL DELAY ; 调用延时MOV P0,#0FFH ;关显示
SETB P2.0
CLR P2.1 ;选中第二个数码管MOV P0,#7EH ;显示1
LCALL DELAY
MOV P0,#0FFH
SETB P2.1
CLR P2.2 ;选中第三个数码管MOV P0,#0A2H ;显示2
LCALL DELAY
MOV P0,#0FFH
SETB P2.2
CLR P2.3 ;选中第四个数码管MOV P0,#62H ;显示3
LCALL DELAY
MOV P0,#0FFH
SETB P2.3
CLR P2.4 ;选中第五个数码管MOV P0,#74H ;显示4
LCALL DELAY
MOV P0,#0FFH
SETB P2.4
CLR P2.5 ;选中第六个数码管
MOV P0,#61H ; 显示5
LCALL DELAY
MOV P0,#0FFH
SETB P2.5
CLR P2.6 ;选中第七个数码管MOV P0,#21H ; 显示6
LCALL DELAY
MOV P0,#0FFH
SETB P2.6
CLR P2.7 ;选中第八个数码管MOV P0,#7AH ; 显示7
LCALL DELAY
SETB P2.7
MOV P0,#0FFH
AJMP MAIN ;重新开始DELAY: ;延时子程序
MOV R7,#2
D1: MOV R6,#25
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
c语言参考程序:
#include<reg51.h> //头文件
#define uchar unsigned char //宏定义,为方便编程
#define uint unsigned int
#define DIGI P0 //宏定义,将P1口定义为数码管
#define SELECT P2 //宏定义,将P2定义为数码管选择口
uchar digivalue[]=
{0x28,0x7e,0x0a2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
//显示的数字数组,依次为0,1,..,9
uchar select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //选择数码管数组,依次选择1,2,..,8
void delay() //延迟函数,决定数码管跳变的间隔时间
{
uchar ii=200; //若发现数码管闪烁,调节这里即可
while(ii--);
}
char code SST516[3] _at_ 0x003b; //仿真器插入代码
main() //主函数
{
uchar i=0;
while(1)
{
for(i=0;i<8;i++) //8个数码管轮流显示{
SELECT=select[i]; //选择第i个数码管DIGI=digivalue[i]; //显示i
delay();
}
}
}。