实验5___8位数码管扫描显示电路设计[1]
8位共阴数码管实验报告

8位共阴数码管实验报告一、引言数码管是一种常见的数字显示器件,广泛应用于各种电子设备中。
8位共阴数码管是一种常见的数码管类型,本实验旨在通过实际操作,了解8位共阴数码管的原理和使用方法,并通过编程控制,实现数字的显示。
二、实验原理1. 共阴数码管原理共阴数码管是一种常见的数码管类型,它由8个LED发光二极管组成。
在共阴数码管中,所有的LED的阴极都是连接在一起的,而阳极则分别连接到控制芯片的不同引脚上。
当某个LED的阳极接通时,与之对应的数字就会在数码管上显示出来。
2. 数码管的控制为了控制数码管显示不同的数字,我们需要通过控制芯片的引脚电平来控制数码管的阳极。
具体来说,我们可以通过将某个引脚拉低,使得与之相连的数码管的阳极接通,从而显示对应的数字。
三、实验材料和器件•Arduino开发板•8位共阴数码管•杜邦线四、实验步骤1. 连接电路将Arduino开发板和8位共阴数码管通过杜邦线连接起来。
具体的连接方式如下:- 将数码管的共阴极连接到Arduino开发板的GND引脚。
- 将数码管的8个阳极分别连接到Arduino开发板的数字引脚2-9。
2. 编写程序打开Arduino开发环境,编写以下程序代码:int digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};int digits[10][7] = {{1, 1, 1, 1, 1, 1, 0}, // 数字0的显示编码{0, 1, 1, 0, 0, 0, 0}, // 数字1的显示编码{1, 1, 0, 1, 1, 0, 1}, // 数字2的显示编码{1, 1, 1, 1, 0, 0, 1}, // 数字3的显示编码{0, 1, 1, 0, 0, 1, 1}, // 数字4的显示编码{1, 0, 1, 1, 0, 1, 1}, // 数字5的显示编码{1, 0, 1, 1, 1, 1, 1}, // 数字6的显示编码{1, 1, 1, 0, 0, 0, 0}, // 数字7的显示编码{1, 1, 1, 1, 1, 1, 1}, // 数字8的显示编码{1, 1, 1, 1, 0, 1, 1} // 数字9的显示编码};void setup() {for (int i = 0; i < 8; i++) {pinMode(digitPins[i], OUTPUT);}}void loop() {for (int i = 0; i < 10; i++) {displayNumber(i);delay(1000);}}void displayNumber(int number) {int *digit = digits[number];for (int i = 0; i < 7; i++) {digitalWrite(digitPins[i], digit[i]);}}3. 烧录程序将编写好的程序通过USB线烧录到Arduino开发板中。
8位数码扫描显示电路设计实验

实验一基本组合电路设计(1)实验目的:熟悉 Quartus U的文本输入设计法和原理图输入设计法,学习简单组合电路以及多层次电路的设计、仿真和硬件测试。
(2)实验内容:I.利用Quartus U完成2选1多路选择器的文本编辑输入。
【参考程序】:ENTITY mux21a ISPORT ( a, b, s: IN BIT;y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s = ' O' THEN y <= a ;ELSE y<= b ;END IF;END PROCESS;END ARCHITECTURE one ;n .将实验I中的2选1多路选择器生成一个元件 mux21a利用原理图输入设计方法实现图1-1的双2选1多路选择器,并将此文件放在同一目录中。
最后进行编译、仿真,并对其仿真波形作出分析说明。
川.对U进行引脚锁定及硬件下载测试。
建议选择实验电路模式5,用键1(PIOO, 引脚号为1)控制sO;用键2(PIO1,引脚号为2)控制s1; a3、a2和a1分别接clock5(引脚号为16)、clockO (引脚号为93)和clock2 (引脚号为17);输出信号outy接扬声器spker (引脚号为129)。
通过短路帽选择clock5接1024Hz 信号,clock0接256Hz信号,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2、控制s0、s1,可使扬声器输出不同音调)。
(3)实验报告:1.实验U的原理图。
2•实验U的仿真波形报告分析说明。
3.实验川硬件测试的详细实验说明。
图1-1 双2选1多路选择器实验_二基本时序电路设计(1)实验目的:熟悉Quartus U的VHDL文本设计过程,学习简单时序电路的设计、仿真和硬件测试。
八位数码管扫描显示电路的设计

《EDA技术及应用》课程设计报告题目:八位数码管扫描显示电路的设计院(系):机电与自动化学院专业班级:电气自动化技术学生姓名:学号:指导教师:20 年6月10日至20 年6月23日华中科技大学武昌分校4、课程设计使用设备(1)EDA及SOPC综合实验平台;(2)导线若干;(3)PC机;(4)Quartus II开发工具软件。
目录摘要................................................................1.课程设计题目及要求 (1)1.1设计题目 (1)1.2L E D显示器的动态扫描驱动电路 (1)1.3设计方案论证 (1)2.L E D显示器动态扫描驱动电路各单元电路设计 (3)2.1计数器与译码器的设计 (3)2.2一位共阳极L E D动态驱动电路设计 (4)2.3七段数码管的设计 (5)3.L E D显示器动态扫描系统设计 (7)3.1整体电路图及工作原理 (7)3.2V H D L程序设计 (7)3.3电路参数计算 (10)4.Q u a r t u s运行调试 (12)4.1时序仿真 (12)4.2硬件逻辑验证 (13)4.3调试结果分析 (13)4.4调试中出现的问题及解决方法 (14)5.设计总结 (15)6.参考文献 (16)摘要本文通过一个3-8译码器电路,将输入的4位2进制数转换为与LED显示对应的8位段码,位码就是LED的显示使能端,对于共阳级的LED而言,高电平使能。
要使8个数码管动态扫描显示,就是把所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。
使用Quartus II6.0软件设计一个VHDL程序并对设计方案进行仿真,再硬件调试经检测输出正确的设计要求结果。
关键词:动态扫描Quartus II6.0 VHDLAbstractIn this paper, through a 3-8 decoder circuit, the input of four hexadecimal number into 2 and eight LED display the corresponding section of code, a codeis the LED display can make side, for the LED with Yang level, high level canmake. To makeeight digital tube dynamic scans showed that is all the samesegment digital tube connected in parallel, through the gating signal time-sharing control public side, the digital tube loop light multiple digital tube, and use the eye of the phenomenon of persistence of vision, as long as the scanning frequency is more than 50 hz, will see the flicker phenomenon. Using Quartus II6.0 a VHDL program design and the software design simulation, and hardware debugging through testing output correct design requirementsKey words: dynamic scanning Quartus II6.0 VHDL1. 课程设计题目及要求1.1设计题目八位数码管扫描显示电路的设计设计主要内容:本课题要求掌握使用Quartus II设计数字系统的设计思路和设计方法。
实验五 八位数码扫描显示电路设计

实验五八位数码扫描显示电路设计[实验目的]1、熟悉7段数码显示译码器设计;2、学习硬件扫描显示电路的设计。
*[实验仪器]PC机、EDA实验箱一台Quartus II 6.0软件[实验内容](1) 实验内容1:说明例7-1中各语句的含义,以及该例的整体功能。
对该例进行编辑、编译、综合、适配、仿真,给出仿真波形。
实验方式:若考虑小数点,SG的8个段分别与PIO49、PIO48、…、PIO42(高位在左)、BT的8个位分别与PIO34、PIO35、…、PIO41(高位在左);电路模式不限。
将GW48EDA 系统左下方的拨码开关全部向上拨,时钟CLK可选择clock0,通过跳线选择16384Hz信号。
引脚锁定后进行编译、下载和硬件测试实验。
(2) 实验内容2:修改例7-1的进程P1中的显示数据直接给出的方式,增加8个4位锁存器,作为显示数据缓冲器,使得所有8个显示数据都必须来自缓冲器。
缓冲器中的数据可以通过不同方式锁入,如来自A/D采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等。
[实验原理]图3-4所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
[参考设计文本描述] 图3-4 8位数码扫描显示电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED ISPORT ( CLK : IN STD_LOGIC;SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段控制信号输出BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出END;ARCHITECTURE one OF SCAN_LED ISSIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A : INTEGER RANGE 0 TO 15;BEGINP1:PROCESS( CNT8 )BEGINCASE CNT8 ISWHEN "000" => BT <= "00000001" ; A <= 1 ;WHEN "001" => BT <= "00000010" ; A <= 3 ;WHEN "010" => BT <= "00000100" ; A <= 5 ;WHEN "011" => BT <= "00001000" ; A <= 7 ;WHEN "100" => BT <= "00010000" ; A <= 9 ;WHEN "101" => BT <= "00100000" ; A <= 11 ;WHEN "110" => BT <= "01000000" ; A <= 13 ;WHEN "111" => BT <= "10000000" ; A <= 15 ;WHEN OTHERS => NULL ;END CASE ;END PROCESS P1;P2:PROCESS(CLK)BEGINIF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1;END IF;END PROCESS P2 ;P3:PROCESS( A ) –-译码电路BEGINCASE A ISWHEN 0 => SG <= "0111111"; WHEN 1 => SG <= "0000110";WHEN 2 => SG <= "1011011"; WHEN 3 => SG <= "1001111";WHEN 4 => SG <= "1100110"; WHEN 5 => SG <= "1101101";WHEN 6 => SG <= "1111101"; WHEN 7 => SG <= "0000111";WHEN 8 => SG <= "1111111"; WHEN 9 => SG <= "1101111";WHEN 10=> SG <= "1110111"; WHEN 11 => SG <= "1111100";WHEN 12=> SG <= "0111001"; WHEN 13 => SG <= "1011110";WHEN 14=> SG <= "1111001"; WHEN 15 => SG <= "1110001";WHEN OTHERS =>NULL ;END CASE ;END PROCESS P3;END;[实验报告要求]1、写出实验源程序,画出仿真波形;2、分析实验结果,以及它们的硬件测试实验结果写进实验报告。
8段数码管显示实验

八段数码管的显示实验是一个程序语句长,编程设计的结构相对复杂的实验。
但是电类专业目一般在第4个实验就要编制八段数码管程序,因为该实验是其它后续大量实验的基础。
该实验是否能掌握,成为整个单片机实验课程能学习取得效果的转折点。
这样一个复杂的实验指望在2个学时的实验课上掌握是不可能的,采用如下的步骤和方法逐步推进会事半功倍!1.首先将八段数码管的实验箱电路在理论课程中作为例题出现,并且应该成为典型例题!图9-12是某实验箱的键盘和数码显示的部分电路,试回答下列问题:(1.)试写出8255的PA\PB\PC\及控制寄存器的地址;(2.)设置8255的控制寄存器,并初始化8255(88H);(3.)试写出键盘扫描程序一般应具有的功能;(4.)试编写在两位数码管上显示数字20编程思路(2段码为A4;0段选码为C0);(5).试写出用手按下键盘后,在八段数码管上显示对应键值的思路。
2. 实验课程内容必须分解2.1 首先完成能够在数码管上显示一个字符2.2 其次要求在数码管上能显示两个字符,动态显示2.3 最后要求在数码管上轮流显示0~F.3.教师应该提供2.1实验的参考程序作为引导,否则实践证明2个学时后编程程序的不超过10%4.附件 2.1程序cs8255 equ 0ffffh ;8255命令控制口outseg equ 0fffch ;字形控制口outbit equ 0fffdh ;字位/键扫控制口LEDBuf equ 60h ;显示缓冲Num equ 70h ;显示的数据DelayT equ 75h ;延迟参数org 0mov dptr,#CS8255mov a,#88h ;命令字:A,B口输出movx @dptr,a ;8255初始化FillBuf: mov a,#00hanl a,#0fhmov dptr,#LEDMapmovc a,@a+dptr ;数字转换成显示码mov @r0,a ;显示在码填入显示缓冲mov r2,#10000000b;从左边开始显示Loop:mov dptr,#OUTBITclr amovx @dptr,a ;关所有八段管mov a,@r0mov dptr,#OUTSEGmovx @dptr,amov dptr,#OUTBITmov a,r2movx @dptr,a ;显示一位八段管sjmp $LedMap: db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h ;八段管显示码db 080h,090h,088h,083h,0c6h,0a1h,086h,08ehend。
八段数码管显示实验

八段数码管显示实验实验一八段数码管显示实验一、实验目的:1、介绍数码管动态显示的原理。
2、介绍74ls164拓展端口的方法。
二、实验要求:利用实验仪提供更多的表明电路,动态显示一行数据。
三、实验电路:这里只是表明草图,详尽原理参看第一章的1.1.15“8155键显出模块”。
四、实验说明:1、本实验仪提供更多了8段码数码管led表明电路,学生只要按地址输入适当数据,就可以同时实现对显示器的掌控。
表明共计6十一位,使用动态方式表明。
8段数码管就是由8155的pb0、pb1经74ls164“串转并”后输入获得。
6十一位位码由8155的pa0口输入,经ua2021逆向驱动后,挑选适当表明位。
74ls164是串行输入并行输出转换电路,串行输入的数据位由8155的pb0控制,时钟位由8155的pb1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74ls164中,向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输入地址为0e102h,时钟位输入地址为0e102h,位选通输入地址为0e101h。
本实验牵涉至了8155i0/ram拓展芯片的工作原理以及74ls164器件的工作原理。
六、实验步骤:1、将keil仿真器上40芯排线一端和实验箱上51cpu板上的40芯排针连接起来,将仿真器相连接的usb或串口线与pc机对应的usb或串口连接起来,关上实验箱电源。
2、进入keil软件界面,点击项目/打开项目在c:\keil\uv2\次1服务设施实验例程中挑选实验一,内有asm和c51两种程序,步入asm文件夹关上led项目文件进入如图所示界面页面“调试/启动/暂停调试”,步入调试界面,页面“调试/运转”可以看见8段数码管交错表明0—七、实验程序:outbitequ0e101h;位掌控口clk164equ0e102h;段控制口(接164时钟位)dat164equ0e102h;段控制口(接164数据位)inequ0e103h;键盘读入口ledbufequ60h;显示缓冲numequ70h;显示的数据delaytequ75h;org0000hljmpstartledmap:;八段管表明码db3fh,06h,5bh,4fh,66h,6dh,7dh,07hdb7fh,6fh,77h,7ch,39h,5eh,79h,71hdelay:;延时子程序movr7,#0delayloop:djnzr7,delayloopdjnzr6,delayloopretdisplayled:movr0,#ledbufmovr1,#6;共6个八段管movr2,#00100000b;从左边已经开始表明loop:movdptr,#outbitmova,#00hmovx@dptr,a;第一关所有八段管mova,@r0movb,#8;送164dlp:rlcamovr3,amovacc.0,canla,#0fdhmovdptr,#dat164movx@dptr,amovdptr,#clk164orla,# 02hmovx@dptr,aanla,#0fdhmovx@dptr,amova,r3djnzb,dlpmovdptr,#outbitmova,r2movx@dptr,a;显示一位八段管movr6,#1calldelaymova,r2;表明下一位rramovr2,aincr0djnzr1,loopmovdptr,#outbitmova,#0movx@dptr,a;关所有八段管retstart:movdptr,#0e100hmova,#03hmovx@dptr,amovsp,#40hmovnum,#0mloop:incnummova,nummovb,amovr0,#ledbuffillbuf:mova,banla,#0fhmovdptr,#ledmapmovca,@a+dptr;数字转换成显示码mov@r0,a;显示在码填入显示缓冲incr0incbcjner0,#ledbuf+6,fillbufmovdelayt,#30dispagain:calldisplayled;显示djnzdelayt,dispagainljmpmloopend。
8位数码扫描显示电路设计
EDA与VHD1语言课程实验报告实验名称:班级:学号:姓名:实验日期:8位数码扫描显示电路设计2012.10.27实验五8位数码扫描显示电路设计一、实验目的:学习硬件扫描显示电路的设计。
二、实验原理:图1所示是8位数码扫描显示电路。
图1中g~a为数码管段信号输入端,每个数码管的七个段(g、f、e、d、c、b、a)都分别连在一起;k1~k8 为数码管的位选信号输入端。
8个数码管分别由8个位选信号k1、k2、…k8来选通,被选通的数码管才显示数据,未选通的数码管关闭。
如在某一时刻,k3为高电平,其余选通信号均为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
因此,如果希望在8个数码管上显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
AAAAAAAAK1 K2 K3 K4 K5 K6 K7 K3图1 8位数码扫描显示电路三、实验内容1:用VHDL语言设计8位数码扫描显示电路,显示输出数据直接在程序中给出。
1、程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan play ISPORT( CLK:IN STD_LOGIC;SI:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);BI:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ;ARCHITECTURE bhv OF scan play ISSIGNAL S: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK) --产生动态扫描显示的控制信号VARIABLE SIO: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE BIO:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF CLK'EVENT AND CLK='1' THENIF BIO < 8 THEN BIO:=BIO+1; ELSE BIO:=(others=>'0');END IF;IF SIO < 8 THEN SIO:=SIO+1; ELSE SIO:=(others=>'0');END IF;END IF;S<=SIO;B<=BIO;END PROCESS;PROCESS(S)BEGINCASE S ISWHEN "0000"=> SI<="00000001";WHEN "0001"=> SI<="00000010";WHEN "0010"=> SI<="00000100";WHEN "0011"=> SI<="00001000";WHEN "0100"=> SI<="00010000";WHEN "0101"=> SI<="00100000";WHEN "0110"=> SI<="01000000";WHEN "0111"=> SI<="10000000";WHEN OTHERS=> SI<="00000000"; END CASE;END PROCESS;PROCESS(B)BEGINCASE B ISWHEN "0000"=> BI<="0111111";WHEN "0001"=> BI<="0000110";WHEN "0010"=> BI<="1011011";WHEN "0011"=> BI<="1001111";WHEN "0100"=> BI<="1100110";WHEN "0101"=> BI<="1101101";WHEN "0110"=> BI<="1111101";WHEN "0111"=> BI<="0100111";WHEN "1000"=> BI<="1111111";WHEN "1001"=> BI<="1101111";WHEN "1010"=> BI<="1110111";WHEN "1011"=> BI<="1111100";WHEN "1100"=> BI<="0111001";WHEN "1101"=> BI<="1011110";WHEN "1110"=> BI<="1111001";WHEN OTHERS=> BI<="1110001"; END CASE; END PROCESS; END bhv;注意:编程下载之前,将扬声器下方的 JDSP 跳线开关跳至“ close ”任意电 路模式皆可。
八位数码管动态扫描案例原理与测试说明
“八位数码管动态扫描”案例原理与测试说明
1程序设计目标及程序运行效果说明
本程序是动态扫描所有的数码管,从左到右8个数码管分别显示1、2、3、4、5、6、7、8。
2程序相关电路及工作原理说明
2.1 LED数码管电路
2.2 LED数码管引脚定义
2.3 工作原理
P0口的8位输出分别控制1个LED数码管的7段和一个小数点;而P2.3经反相器U4C控制74HC138的使能信号E3,结合P2.0、P2.1、P2.2这3个位选控制信号确定8个LED数码管中的哪个被点亮;电阻R15~R22为限流电阻。
当段选为高、使能信号有效时,对应的LED管将会发光。
通过以一定频率扫描位选信号,修改段选信号进行数码管点亮一段时间,从而给人视觉上几个数码管几乎同
时显示的效果。
3测试方法
(1)用STC ISP默认设置,打开工程中的HEX并下载
(2)下载后观察现象为:从左到右8个数码管分别显示1、2、3、4、5、6、7、8。
(3)本案例无需辅助操作。
八段数码管显示实验
八段数码管显示实验报告一.设计目的1.掌握数码管动态显示的原理;2.学会用总线方式控制数码管显示;3.熟悉利用单片机驱动数码管的电路及编程原理。
二.设计内容利用实验箱提供的显示电路,设计一个能够动态显示一行数据的系统。
实验箱一般提供了6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
能够正常显示数据之后,请改变一下数字的变化速度或者LED显示的方向。
三.实验原理1.原理:当用总线方式驱动八段显示管时,请将八段的驱动方式选择开关拨到“内驱”位置;当用I/O方式驱动八段显示管时,请将开关拨到“外驱”位置。
本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
本实验仪中 8位段码输出地址为0X004H,位码输出地址为 0X002H。
此处X 是由KEY/LED CS 决定,参见地址译码。
做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LED CS 接到CS0上,则段码地址为08004H,位码地址为08002H。
七段数码管的字型代码表如下表:2. 3.程序OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口IN equ 08001h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序mov r7, #0DelayLoop:djnz r7, DelayLoopdjnz r6, DelayLoopretDisplayLED:mov r0, #LEDBufmov r1, #6 ; 共6个八段管mov r2, #00100000b ; 从左边开始显示Loop:mov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管mov a, @r0mov dptr, #OUTSEGmovx @dptr,amov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #01call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管 retStart:mov sp, #40hmov Num, #0MLoop:inc Nummov a, Nummov b, amov r0, #LEDBufFillBuf:mov a, banl a, #0fhmov dptr, #LEDMapmovc a, @a+dptr ; 数字转换成显示码mov @r0,a ; 显示在码填入显示缓冲inc r0inc bcjne r0, #LEDBuf+6, FillBufmov DelayT,#30DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopend四.设计步骤1.根据任务书中的系统性能要求,设计实验流程框图;2.学习课程设计相关的原理知识,特别是数码管动态显示的原理;3.对设计出的流程框图,使用汇编语言完成源代码的编写;4.在实验箱配套软件上完成汇编程序的初步调试;5.连接实验箱,完成系统功能性测试;6.完成课程设计报告,报告内容包括:a、程序设计流程框图;b、说明设计的依据;c、记录程序测试的过程;d、说明实验过程中遇到的问题和解决的方法。
实验六 8位数码管扫描显示
实验六 8位数码管扫描显示一、实验目的:1、了解7段数码管的工作原理; 2、学会用于VHDL语言进行程序设计。
二、实验原理:在本实验中,按一下key0,完成复位功能, clk5选择1Hz,clk3选择的频率越高越好。
LED的显示模块原理:LED有段码和位码之分,所谓段码就是让LED显示出8.的八位数据,一般情况下要通过一个译码电路,将输入的4位2进制数转换为与LED显示对应的8位段码。
位码也就是LED的显示使能端,对于共阴级的LED而言,低电平使能(在本实验箱中所有的LED均位共阴级的),在本实验中设计了一个3位的循环计数器,将计数结果输入到3-8译码器74ls138,译码结果输出即可依次使能每个LED。
例如:要让8个LED同时工作,显示数据,就是要不停的循环扫描每一个LED,并在使能每一个LED的同时,输入所需显示的数据对应的8位段码。
虽然8个LED是依次显示,但是受视觉分辨率的影响,看到的现象是8个LED同时工作。
三、实验连线:1、将EP2C5适配板左下角的JTAG用十芯排线和万用下载区左下角的SOPC JTAG 口连接起来,万用下载区右下角的电源开关拨到 SOPC下载的一边2、实验板右下方频率源 CLK1接任意频率作为扫描频率。
3、将实验板左端的JP103全部用短路帽接上(共八个)。
四、实验内容与步骤:(程序:EP2C5\scan_seg8\scan_seg8.sof)1、打开Quartus II 6.0软件,点击“File→OpenP roject”出现如下的对话框(图6.1),选中scan_seg8,点打开即可;图6.12、点击“Tools-Programmer”后出现如下图下载对话窗口,3、点”Edit→Add File………”出现如下对话框(图6.2),在图6.3对话框中,选中EP2C5/scan_seg8/scan_seg8.sof项目后点击打开,回到Programmer对话框, 在下载对话窗口中“选中Program/ Configure”,点击Start”即进行下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八位数码管扫描显示电路的设计
实验五 8位数码管扫描显示电路设计
一、预习内容
1、什么是扫描显示;
2、怎样实现数码显示;
3、写出原理草图,写出源程序。
二、实验目的
1、进一步熟悉用VHDL进行EDA设计方法;
2、本实验与实验4的不同之处在八个数码管都要显示;
3、进一步了解EDA实验箱的基本功能;
三、实验器材
PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)、导线若干
四、实验要求
1、用VHDL设计一个扫描显示电路,并在实验箱上的八个数码管能同时显示自
己的学号。
(23408148)
2、在完成1的基础上,显示自己的学号加100.
五、实验原理与内容
实验原理:
1> 每个数码管的8个段:hgfedcba(h是小数点)都分别连在一起, 8个数码管分别由8个选通信号k1.k2.。
k8选择,被选通的数码管(高电平)显示数据,其余关闭。
如在某一时刻,k3为高电平,其余为低电平,这时仅k3对应的数码管显示来自段信号端的数据,其余的都关闭。
据此,就必须使8个选通信号分别被单独选通,并同时在段信号输入口加上希望显示的数据,就能实现功能。
2> Clk 是扫描时钟,SG 为7段控制信号,由高位之低位分别接gfedcba7个段,BT是位选控制信号。
Cnt8是一个3位计数器,做扫描计数信号,由进程P2生成。
进程P3是7段译码查表输出程序,进程P1 是对8个数码管选通的扫描程序。
例如当CNT8=001时,K2对应的数码管被选通,同时A被赋值2,再由进程P3译码输出1001111,显示在数码管上即为2,。
当cnt8扫变时,将能在8个数码管上显示23408148.
3> 本次试验不显示小数点,可把SG段控制信号向量变为8位(最高位代表小数点),并在最高位设置成恒0低电平。
图4-1 动态数码扫描显示硬件电路原理图
六、实验步骤
1、调出调出预先编好的的源程序,检查是否正确;
在quartus 中新建一个工程命名为SCAN_LED,将预先编辑好的程序复制入vhdl文件中,保存并命名为SCAN_LED。
2、编译、仿真程序;
点击start complilation按钮进行全程仿真没有错误后开始进行硬件仿真,首先进行引脚锁定,按照实验讲义中的器件引脚选择模式6,锁定引脚后如下图所示。
3、引脚锁定完成后,开始下载生成的sof文件,会发现数码管开始显示23408148,实验成功。
七、实验报告
1、写出实验源程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
----------------------------------------------------------
ENTITY SCAN_LED IS
PORT ( clk : IN STD_LOGIC;
SG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --段控制信号输出 BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); --位控制信号输出 END SCAN_LED;
---------------------------------------------------------- ARCHITECTURE one OF SCAN_LED IS
SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL A : INTEGER RANGE 0 TO 9;
BEGIN
P1: PROCESS( CNT8 )
BEGIN
CASE CNT8 IS
WHEN "000" => BT <= "00000001" ;A <= 2 ;
WHEN "001" => BT <= "00000010" ;A <= 3 ;
WHEN "010" => BT <= "00000100" ;A <= 4 ;
WHEN "011" => BT <= "00001000" ;A <= 0 ;
WHEN "100" => BT <= "00010000" ;A <= 8 ;
WHEN "101" => BT <= "00100000" ;A <= 1 ;
WHEN "110" => BT <= "01000000" ;A <= 4 ;
WHEN "111" => BT <= "10000000" ;A <= 8 ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS P1;
P2: PROCESS(clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN CNT8 <= CNT8 + 1;
END IF;
END PROCESS P2 ;
P3: PROCESS( A ) --译码电路
BEGIN
CASE A IS
WHEN 0 => SG <= "00111111"; WHEN 1 => SG <= "00000110";
WHEN 2 => SG <= "01011011"; WHEN 3 => SG <= "01001111";
WHEN 4 => SG <= "01100110"; WHEN 5 => SG <= "01101101";
WHEN 6 => SG <= "01111101"; WHEN 7 => SG <= "00000111";
WHEN 8 => SG <= "01111111"; WHEN 9 => SG <= "01101111";
WHEN 10 => SG <= "01110111"; WHEN 11 => SG <= "01111100";
WHEN 12 => SG <= "00111001"; WHEN 13 => SG <= "01011110";
WHEN 14 => SG <= "01111001"; WHEN 15 => SG <= "01110001";
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS P3;
END one;
2、实验结果:
将生成的sof文件通过下载线下载到实验箱中,正确显示了自己的学号。
改变时钟频率,可以得到不同的效果,如低频率时数码管逐个显示,高频率时数码管逐个显示频率很快,变成了同时显示。
3、心得体会:
1》本次实验要想成功,首先需要知道以下知识:位控制端是控制哪个数码管显示。
段控制端输入根据每个数码管的7个段输入的电平高低而发亮,显示所需要的数据
2》本实验用到3个进程,进程P1 是对8个数码管选通的扫描程序,进程P2做扫描计数信号,进程P3是7段译码查表输出程序。
这给初学者一个启发,在编写复杂的程序时,也可以按照这种方式实现。
3》通过改变段选值可以使数码管显示不同的数值。
所以显示自己的学号加100,只需要把程序A值改变即可。
4》通过改变clock0的频率可产生不同的显示效果。
八、问题及思考
扫描在视频显示中的应用:
扫描显示是通过把画面划分成很多很多帧来实现的。
每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。
刷新频率越快,由于人眼的视觉停留,就会得到想要的结果。
这就像是拍摄电影一样,在拍摄武打动作时,实际中两人的动作是很慢的,但播放时,人为的把速度放快,才得到了我们日常生活中喜欢的那种快动作效果。