实验三 数码管动态扫描电路设计
数码管动态显示EDA实验三

实验三数码管动态显示姓名:赵佳伟学号:1002100449一、实验目的l、实现实现0~9十个数的动态显示。
2、掌握数码管的工作状态。
二、实验的硬件要求1、输入:CLK时钟信号2、输出:LED灯3、主芯片:ALTERA下载板三、实验内容用VHDL语言输入法设计一个数码管动态显示电路,要求能够使之在0~9循环显示。
四、实验步骤(1)进入windows操作系统,打开MAX+PLUSⅡ10.0。
1、启动File/Project Name菜单,输入设计项目的名字。
点Assign/Device菜单,选择器件(本设计全选用EPM7128) 。
见图2.2.1。
2、启动菜单File/New,选择Text Editor file,打开编程编辑器,进行原理图设计输入。
图2.2.1(2)输入代码(下图2.2.2)3、保存单击保存按钮,扩展名为.vhd,本实验中取名为:p4_5.vhd。
(3)编译启动MAX+PLUS II\COMPILER菜单,按START开始编译,生成.SOF和.POF等文件,以便硬件下载和编程时调用,同时生成.RPT文件,如图2.2.3。
图2.2.3(4)仿真1、创建波形文件:①首先,将设计指定为当前项目。
②创建一个波形文件。
选择菜单MAX+PLUSⅡ\Waveform Editor,打开仿真工具Waveform Editor,或选择新建一个Waveform Editor文件,将创建一个新的无标题波形文件,如图2.2.4所示:③储存波形文件。
选择File\Save As,在File Name框中,输入相应文件名,单击OK 按钮存盘。
④设定时间轴网格大小。
选择菜单Option\Grid Size,输入时间间隔(20ns),单击OK 按钮。
⑤设定时间轴长度。
选择菜单File\End Time并输入文件的结束时间(1s )。
图2.2.42、选择欲仿真的引线端子:①选择菜单Node\Enter Nodes Nodes from SNF出现如图2.2.5所示对话框。
数码管动态显示实训报告

一、实训目的本次实训旨在通过实际操作,让学生掌握数码管动态显示的原理,了解数码管动态扫描显示电路的设计方法,提高学生使用Verilog HDL进行层次化设计电路的能力。
通过实训,学生能够理解并应用动态扫描显示数码管、数据选择器及其信号分配方法,同时熟悉使用可编程芯片(如FPGA/CPLD)控制多位动态扫描数码管的显示。
二、实训环境1. 实训设备:FPGA开发板、数码管、信号源、示波器等。
2. 软件工具:Quartus II、ModelSim等。
3. 实训教材:相关电子设计教材、Verilog HDL编程指南。
三、实训原理数码管动态显示技术是利用人眼的视觉暂留效应,通过快速切换显示不同的数码管,使观察者感觉多个数码管同时显示。
具体原理如下:1. 数码管结构:数码管由若干个LED段组成,通过点亮不同的段来显示数字或字符。
2. 共阳/共阴数码管:数码管分为共阳和共阴两种类型。
共阳数码管的阳极连接在一起,共阴数码管的阴极连接在一起。
3. 动态扫描:通过控制每个数码管的点亮和熄灭,实现多位数码管的动态显示。
4. 数据选择器:用于选择要显示的数字或字符对应的段编码。
四、实训过程1. 设计3位数码管动态扫描显示电路:- 使用Verilog HDL设计数码管显示模块,包括段编码生成、位选控制、时钟分频等。
- 设计数据选择器,用于选择要显示的数字或字符对应的段编码。
- 设计主控制器,用于控制动态扫描的时序。
2. 实现显示功能:- 将学号的后3位数字输入到数码管显示电路中。
- 使用可编程芯片(如FPGA/CPLD)实现电路的编译和下载。
3. 提高性实验:- 增加一个功能切换控制开关,实现数码管显示数字的自动循环移位。
- 设计其他显示功能,如显示不同的字符或图案。
4. 实验测试:- 使用示波器观察数码管显示电路的时序信号,确保电路正常工作。
- 使用Quartus II进行仿真测试,验证电路的功能。
五、实验结果与分析1. 3位数码管动态扫描显示电路:- 成功实现了学号后3位数字的动态显示。
数码管动态扫描显示实验.

实验三定时器和中断实验一、实验目的1、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单显示编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验内容1、使用定时器T0,定时1秒,控制P1口发光管循环点亮。
2、使用定时器T0,定时1秒,控制1个数码管循环显示数字0~9,每秒钟数字加一。
3、使用软件定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
4、使用定时器T0,定时1秒,控制2个数码管循环显示秒数0~59,每秒钟数字加一。
三、实验电路图四、实验说明1、数码管的基本概念(1)段码数码管中的每一段相当于一个发光二极管,8段数码管则具有8个发光二极管。
本次实验使用的是共阴数码管,公共端是1、6,公共端置0,则某段选线置1相应的段就亮。
公共端1控制左面的数码管;公共端6控制右面的数码管。
正面看数码管的引脚、段选线和数据线的对应关系为:图1 数码管封装图图2 数据线与数码管管脚连接关系段码是指在数码管显示某一数字或字符时,在数码管各段所对应的引脚上所加的高低电平按顺序排列所组成的一个数字,它与数码管的类型(共阴、共阳)(2)位码位码也叫位选,用于选中某一位数码管。
在实验图中要使第一个数码管显示数据,应在公共端1上加低电平,即使P2.7口为0,而公共端6上加高电平,即使P2.6口为1。
位码与段码一样和硬件连接有关。
(3)拉电流与灌电流单片机的I/O 口与其他电路连接时,I/O 电流的流向有两种情况:一种是当该I/O 口为高电平时,电流从单片机往外流,称作拉电流;另一种是该I/O 口为低电平时,电流往单片机内流,称为灌电流。
一般I/O 的灌电流负载能力远大于拉电流负载能力,对于一般的51 单片机而言,拉电流最大4mA,灌电流为20mA。
一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。
本实验电路中采用拉电流方式(用共阴数码管)。
数码管动态扫描实验报告

数码管动态扫描实验一、实验目的学习计数器的设计、分析合测试方法。
学习硬件扫描显示电路的设计方法。
二、实验仪器1、PC机2、SW-51PROC单片机综合实验平台三、实验内容编写一段程序,用单片机P0口和P2口的I/O输出去控制8位的数码管显示,实现如下功能:使数码管上显示1、2、3、4、5、6、7、8。
四、实验步骤:1、用Protues设计数码管动态扫描显示电路;2、在KeilC51中编写识别程序,通过后与Protues联合调试;3、启动仿真,观察数码管显示是否正确;4、用Protues设计脉冲计数电路,仿真调试、运行程序并查看效果。
五、电路设计及调试:1、实验电路:2、程序设计与调试:①实验程序:【12345678】#include<reg52.h>#define uintunsigned int#define ucharunsigned charuchar codeDisplsy[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80}; uchar codeTemble[]={0,1,2,3,4,5,6,7};void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}void main(){uchar i;P0=0xff;P1=0;while(1){if(i==8)i=0;P1=Temble[i];P0=~Displsy[i+1];i++;delay(2);}}【脉冲计时】#include<reg52.h>#define uintunsigned int#define ucharunsigned charucharcodeDisplay[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar codeTemble[]={0,1,2,3,4,5,6,7};uchar Flag;uint Num;void delay(uint z){uchar t;while(z--) for(t=120;t>0;t--);}voidTest2(void){TR1 = 1;while(1){Num = TH1;Num = Num << 8;Num |= TL1;P1 = 7;P0 = ~Display[Num%10];delay(3);P1 = 6;P0 = ~Display[Num%100/10];delay(3);P1 = 5;P0 = ~Display[Num%1000/100];delay(3);P1 = 4;P0 = ~Display[Num%10000/1000];delay(3);P1 = 3;P0 = ~Display[Num%100000/10000];delay(3);P1 = 2;P0 = ~Display[Num%1000000/100000];delay(3);P1 = 1;P0 = ~Display[Num%10000000/1000000];delay(3);P1 = 0;P0 = ~Display[Num%100000000/1000000];delay(3);}}void main(){TMOD = 0x50;TH1 = 0x00;TL1 = 0x00;EA = 1;ET1 = 1;TR1 = 0;while(1){Test2();}}②调试:③实验结果:1、数字1~8分别显示在8个数码管上,显示无闪烁。
单片机原理及应用A实验报告-数码管、键盘动态扫描

TF0 = 0x8f;
ge = cnt%10;
shi = cnt%100/10;
bai = cnt%1000/100;
qian = cnt%10000/1000;
/*数码管的扫描,显示四位数值*/
P1 = 0xff;
P2 = wei[0];
P1 = num[ge];
delay(1);
{
delay(1);
if(P35 == 0)
{
cnt = cnt*10 + 9;
if(WEI <= 1000)
WEI = WEI*10;
else
{
WEI = 1;
cnt = 0;
}
}
}
else if(P36 == 0)//加法
{
delay(1);
if(P36 == 0)
{
dat = cnt;
cnt = 0;
数码管、键盘动态扫描
一、实验目的
1、学习实验系统的基本操作,了解在实验系统中进行程序设计、仿真和调试的操作方法和步骤;
2、熟悉Proteus的基本仿真功能;
3、熟悉动态扫描的思想以及矩阵键盘的扫描方法。
二、实验原理
1、数码管的动态扫描利用的是人的视觉暂留效应也称“余辉效应”(人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”)。本来在同一时间里只能控制一个数码管显示,却让人产生几个数码管是同时显示的错觉。实现方法为在很短的时间内切换不同的数码管显示对应的数字。
图(3)实物连接图
图(4)实物工作图
五、体会
单片机实验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
数码管显示和键盘扫描实验资料

实验三LED数码管动态显示及4 X4 键盘控制实验一、实验目的1.巩固多位数码管动态显示方法。
2.掌握行扫描法矩阵式按键的处理方法。
3.熟练应用AT89S52学习板实验装置,进一步掌握keil C51的使用方法。
二、实验内容使用AT89S52学习板上的4位LED数码管和4 X 4矩阵键盘阵列做多位数码管动态显示及行扫描法键盘处理功能实验。
用P0口做数据输出,利用P1做锁存器74HC573的锁存允许控制,编写程序使4位LED数码管按照动态显示方式显示一定的数字;按照行扫描法编写程序对4 X 4矩阵键盘阵列进行定期扫描,计算键值并在数码管上显示。
三、实验系统组成及工作原理1.4位LED数码管和4 X 4矩阵键盘阵列电路原理图2.多位数码管动态显示方式a b c d e f g dp com a b c d e f g dpcoma b c d e f g dpcoma b c d e f g dpcomD0IO(2)IO(1)说明4位共阴极LED动态显示3456数字的工作过程首先由I/O口(1)送出数字3的段选码4FH即数据01001111到4个LED共同的段选线上,接着由I/O口(2)送出位选码××××0111到位选线上,其中数据的高4位为无效的×,唯有送入左边第一个LED的COM端D3为低电平“0”,因此只有该LED的发光管因阳极接受到高电平“1”的g、d、c、b、a段有电流流过而被点亮,也就是显示出数字3,而其余3个LED因其COM端均为高电平“1”而无法点亮;显示一定时间后,再由I/O口(1)送出数字4的段选码66H即01100110到段选线上,接着由I/O 口(2)送出点亮左边第二个LED的位选码××××1011到位选线上,此时只有该LED的发光管因阳极接受到高电平“1”的g、f、c、b段有电流流过因而被点亮,也就是显示出数字4,而其余3位LED不亮;如此再依次送出第三个LED、第四个LED的段选与位选的扫描代码,就能一一分别点亮各个LED,使4个LED从左至右依次显示3、4、5、6。
三维数码管扫描显示实验报告

实验报告实验日期:2013 年10 月9 日学号:姓名:实验名称:三维数码管扫描显示总分:实验设计方案:1.原理图三维数码管扫描显示电路原理:设计出模4计数器、三选一多路选择器和2-3译码器,并由这三个模块和7段译码器设计3位数码管扫描显示电路。
模4计数器:对4取模,输入信号的频率被4分频。
三选一多路选择器:通过控制电路实现3路4位数据的选择输出。
2-3译码器:data输入为00时,译出seg为100;data输入为01时,译出seg为010;其他情况译为001。
2.功能验证波形图:数码管扫描显示电路scan_led3延时时序仿真波形描述:方形波,din0,din1,din2,bsg,qa~qg逻辑关系正确,时序仿真延时。
仿真结论:Bsg逻辑输出:100-010-001-100-010······,逻辑关系正确。
qa~qg逻辑输出:0110000-1101101-1111001-0110000-······,逻辑关系正确。
3.硬件验证芯片分配:FLEX10K-EPF10K20TI144-4管脚分配:clk:125;din2[3..0]:72, 73, 78, 79;din1[3..0]:82, 83, 92, 95;din0[3..0]:86, 87, 88, 89;bsg[2..0]:100, 101, 102;qa~qg:51, 49, 48 ,47, 46, 44, 43.4.实验日志:2013年10月9号Q1:count4编译时出现2error,1warningA1:原因是课本不够清楚,把q[1..0]看成了q[1.0].改了之后error没了。
2013年10月11号Q1:创建各分模块的符号文件.bsf时,不能创建mux4_3_1.bsf?A1:原因是没打开mux4_3_1.vhd文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验箱扫描显示模式时的连接方式
SG[7..1]
S[8..1]
注意: 1. 输入信号高电平有效 2. 为了让实验箱工作在动态扫描显示模式, 必须将DS8使能开关上推。
7 7 SG
段译码
4 S1 3-8 3 4 4 K1 3
7
位驱动器 译码器(高电平输出有效)
3 S8
4位8选1
4 K32 4 ……
位二进制 计数器
CLK
……
动态显示
背景知识----动态显示
动态扫描优点:
– 电路成本低。 – 功耗小
动态扫描缺点:
– 数码管亮度低 – 电路结构复杂,理解比较困难
设计要求
采用层次化设计方法来实现该设计。 将 以 下 几个 模 块分 开 设 计 , 独立完成设计验 证,最后完成顶层设计。
– – – – –
7段译码器 4位8选1数据选择器 计数器 3-8译码器 最后完成顶层设计(顶层设计可以使用原理图,也可 以使用VHDL)
设计扩展三
设计一个32位宽度的二进制计数器 来作为输入信号在数码管上显示出 计数器的计数结果。如图:
参考设计
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(6 DOWNTO 0); -BT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );-END; ARCHITECTURE one OF SCAN_LED IS SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL A : INTEGER RANGE 0 TO 15; BEGIN
段控制信号输出 位控制信号输出
数据选择器,3-8译码器设计进程
P1: PROCESS(CNT8) BEGIN CASE CNT8 IS WHEN "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;
试设计一个数码管动态显示的扫描控制电路。它能 将8路4位二进制数显示在实验箱上的8个数码管上。 要求:
– 当输入为‘0000’——‘1001’时显示为0—9,‘1010’—— ‘1111’时显示ABCDEF字母。显示图象为: – 先将该控制电路分为几个模块,然后用VHDL的结构化描 述方式实现该电路。
实验原理
如图是扫描显示的控制电路示意图,其中ck是扫 描时钟;SEG为7段控制信号,由高位至低位分 别接g、f、e、d、c、b、a 7个段;BT是位选控 制信号,接图5-20a中的8个选通信号:k1、 k2、…k8 。DIN端口输入的8个4为二进制数将能 在8个数码管上显示出来 。
计数器时钟:建议使用 32位输出的 clock2 二进制或十 进制计数器 扫描时钟:建议使用CLOCK0
4
K12—K9
驱动 译码
4
K8—K5
驱动 译码
4
K4—K1
K32—K29 K28—K25 K24—K21 K20—K17
静态显示
背景知识----静态显示
静态扫描优点:
– 结构简单,比较容易理解和设计。 – 数码管亮度高
静态扫描缺点:
– 电路复杂,成本高 – 功耗大
背景知识----动态显示
段驱动器
实验三 数码管动态扫描电路设计
廖磊 2010年4月8日
《《《《特别提示》》》
本次实验要求大家在做实验之前必须要准备好电 子版的程序代码。 本次实验教案不在给出具体的操作视频,因此大 家存在操作问题的要预先解决。 必须要理解设计的工作原理。本次实验将检查大 家对设计的掌握情况,会询问每个同学对程序的 理解。并会根据情况临时要求大家按照特定要求 改写程序。 另外注意:
仿真波形
1
3
5
7
9
b
d
F
管脚锁定关系
实验现象
左
改变CLOCK0的ቤተ መጻሕፍቲ ባይዱ入频率为 1HZ,64HZ,16384HZ等频率,观察显示情 况。
右
实验现象
使能 开关必须 推向上方
DS8
改变 频率 观察 显示 效果
设计扩展一
将参考范例中的数据选择器和 3 - 8 译码器分 为两个独立的进程实现。
设计扩展二
左
4 4 4 4 4
K16—K13
右
4
K12—K9
4
K8—K5
4
K4—K1
K32—K29 K28—K25 K24—K21 K20—K17
实验原理
图5-20 a 所示的是8位数码扫描显示电路,其中每个数码管的 8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在 一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。 被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高 电平,其余选通信号为低电平,这时仅k3对应的数码管显示来 自段信号端的数据,而其它7个数码管呈现关闭状态。根据这 种电路状况,如果希望在8个数码管显示希望的数据,就必须 使得8个选通信号k1、k2、…k8分别被单独选通,并在此同 时,在段信号输入口加上希望在该对应数码管上显示的数据, 于是随着选通信号的扫变,就能实现扫描显示的目的。
– 预习包括必须要清晰的注明为预习报告 – 实验报告按照教师社区的参考范例书写,并且必须注 明学号。
实验目的:
学习硬件扫描显示电路的设计。 掌握VHDL的设计方法 掌握复杂电路的EDA设计方法
背景知识----静态显示
驱动 译码
4
驱动 译码
4
驱动 译码
4
驱动 译码
4
驱动 译码
4
K16—K13
驱动 译码
计数器时钟:建议使用 32位输出的 clock2 二进制计数器 扫描时钟:建议使用CLOCK0
设计扩展四
设计一个 32 位宽度的 BCD 码十进制 计数器来作为输入信号在数码管上 显示出计数器的计数结果。如图:
计数器时钟:建议使用 32位输出的 clock2 十进制计数器 扫描时钟:建议使用CLOCK0
由于实验箱没有32 位开关量输入,所以 预设了8个常量来显 示
计数器进程
P2: PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1; END IF; END PROCESS P2 ;
7段译码电路
P3: PROCESS( A ) BEGIN CASE A IS WHEN 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;