实验三 数码管动态扫描电路设计
数码管动态显示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、学习51单片机内部定时器的使用方法。
2、掌握中断处理程序的方法。
3、掌握数码管与单片机的连接方法和简单编程方法。
4、学习和理解数码管动态扫描的工作原理。
二、实验原理:对于一组数码管动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。
所谓动态扫描显示即轮流向各位数码管送出字型码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示的要差一些,所以在选择限流电阻式应略小于静态显示电路中的。
三、实验内容1、使用定时器T0,采用定时中断的方式使数码管稳定显示不同的数字。
2、使用定时器T0,采用定时查询的方式使数码管稳定显示不同的数字。
3、编写延时函数,采用延时的方式,使数码管稳定显示不同的数字。
#include <reg51.h>unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; unsigned char i=0;void main(){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;EA=1;ET0=1;TR0=1;P0=0xff;P2=0xff;while(1);}void time0_int(void) interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;P2=wei[i];P0=duan[i];i++;if(i==8){i=0;}}#include"reg51.h"weix[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; duanx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; void main(){char i;TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;for(;;){if(TF0){TF0=0;TH0=(65536-10000)/256;TL0=(65536-10000)%256;P2=weix[i];P0=duanx[i];i++;if(i==8){i=0; }}}}延时#include <reg51.h>unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; void delay(unsigned int i){unsigned int m,n;for(m=i;m>0;m--)for(n=10;n>0;n--);}void main(){unsigned char num=0;;while(1){P2=wei[num];P0=duan[num];num++;delay(15);if(num==8)num=0;}}。
扫描驱动显示电路设计(设计性实验)
实验三扫描驱动显示电路设计(设计性实验)一、实验目的1.了解实验箱中8位七段数码管显示模块的工作原理。
2.熟悉VHDL 硬件描述语言及设计专用数字集成电路的自顶向下的设计思想。
3.掌握利用CPLD/FPGA设计8位七段数码管扫描显示驱动电路的方法。
二、实验设备1.计算机(配置为:P4 CPU 128M内存);2. MAX+plusⅡ开发工具软件;3. EL教学实验箱;4.万用表;5. DS 5022M型双踪数字示波器;三、扫描原理为了减少8位显示信号的接口连接线,实验箱中的数码显示采用扫描显示工作模式。
即8位数码管的七段译码输入(a,b,c,d,e,f,g)是并联在一起的,而每一个数码管是通过一个3位选择sel[2..0]来选定的。
sel与数码管之间是一3-8译码的关系,即sel为“000”时,选中第一个数码管,sel为“111”时,选中第八个数码管。
四、设计任务本实验要求在给定子模块程序的基础上,画出设计原理图。
自行编写顶层模块程序,完成扫描显示驱动电路的设计,实现在8个数码管上轮流显示字符0-F的功能。
五、设计要求1.要求在Max+plusⅡ平台上用VHDL语言编写顶层模块程序,调试、仿真成功后,下载至ALTER EPM7128SLC84-15芯片,再利用外接电路实现以上设计功能。
2.扫描驱动显示电路有2个输入端(clk,reset),14个输出端(a,b,c,d,e,f,g)和(y0,y1,y2,y3,y4,y5,y6,y7),全部为TTL电平,管脚分配任意,如下图所示。
3.根据芯片特点,管脚分配时将时钟信号分配给83脚,复位信号分配给1脚,使能信号分配给84脚。
六、实验报告要求1.给出设计源程序、仿真结果、说明设计思路。
2.改变输入时钟信号的频率,观察实验结果如何改变。
3.字符扫描显示亮度与扫描频率的关系,且让人眼感觉不出闪烁现象的最低扫描频率是多少1、程序:library ieee;use ieee.std_logic_1164.all;entity c4 isport(clk,reset: in std_logic;a,b,c,d,e,f,g: out std_logic;y: out std_logic_vector(1 downto 0));end c4;architecture beha of c4 iscomponent counter16port(clk,clr: in std_logic;count: out std_logic_vector(3 downto 0));end component;component mport(datain: in std_logic_vector(3 downto 0);a,b,c,d,e,f,g: out std_logic);end component;component yima3port(x: in std_logic_vector(1 downto 0);y: out std_logic_vector(1 downto 0));end component;signal cont: std_logic_vector(3 downto 0);signal sel3: std_logic_vector(1 downto 0);begind1:counter16 port map(clk=>clk,clr=>reset,count=>cont);d2:m port map(datain=>cont,a=>a,b=>b,c=>c,d=>d,e=>e,f=>f,g=>g);d3:yima3 port map(x=>cont(1 downto 0),y=>y);end beha;library ieee;use ieee.std_logic_1164.all;entity yima3 isport( x: in std_logic_vector(1 downto 0);y: out std_logic_vector(1 downto 0));end yima3 ;architecture beha of yima3 isbeginy<=x;end beha;library ieee;use ieee.std_logic_1164.all;entity m isport(datain: in std_logic_vector(3 downto 0); a,b,c,d,e,f,g: out std_logic);end m;architecture beha of m issignal dataout: std_logic_vector(6 downto 0); begina<=dataout(6);b<=dataout(5);c<=dataout(4);d<=dataout(3);e<=dataout(2);f<=dataout(1);g<=dataout(0);process(datain)begincase datain iswhen "0000"=> dataout<="1111110";--0when "0001"=> dataout<="0110000";--1when "0010"=> dataout<="1101101";--2when "0011"=> dataout<="1111001";--3when "0100"=> dataout<="0110011";--4when "0101"=> dataout<="1011011";--5when others=> dataout<="XXXXXXX";end case;end process;end beha;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter16 isport(clk,clr: in std_logic;count: out std_logic_vector(3 downto 0);sel: out std_logic_vector(1 downto 0)); end counter16;architecture beha of counter16 issignal cnt: std_logic_vector(3 downto 0);beginprocess(clk,clr)beginif clr='0'thencnt<="0000";elsif clk='1' and clk'event thencnt<=cnt+'1';end if;count<=cnt;end process;end beha;2、程序编译3、仿真编译及仿真结果。
数码管动态扫描实验报告
数码管动态扫描实验报告数码管动态扫描实验报告引言:数码管是一种常见的显示器件,广泛应用于电子设备中。
动态扫描技术是一种常见的驱动数码管的方法。
本实验旨在通过动态扫描技术实现数码管的显示,并对其原理进行深入研究。
一、实验目的本实验的主要目的是掌握数码管的动态扫描原理,并通过实践验证其可行性。
具体目标如下:1. 理解数码管的基本工作原理;2. 熟悉动态扫描技术的实现方法;3. 掌握使用单片机驱动数码管的方法;4. 通过实验验证动态扫描技术的可行性。
二、实验器材与原理1. 实验器材:- 单片机开发板;- 4位共阳数码管;- 连接线。
2. 实验原理:数码管是由多个发光二极管组成的,每个发光二极管对应一个数字或符号。
共阳数码管的阳极连接在一起,而阴极分别与单片机的IO口相连。
动态扫描技术是通过快速切换数码管的显示,从而形成连续的显示效果。
具体原理如下:- 单片机通过IO口输出高电平或低电平控制数码管的显示;- 通过快速切换数码管的显示,使得人眼感觉到数码管同时显示多个数字。
三、实验步骤1. 连接电路:将4位共阳数码管的阳极分别连接到单片机的IO口,阴极连接到GND。
确保连接正确,避免短路或接反。
2. 编写程序:使用单片机开发板的编程软件,编写程序控制数码管的显示。
通过循环控制IO 口输出高低电平,实现动态扫描的效果。
3. 上传程序:将编写好的程序上传到单片机开发板中,确保程序能够正确运行。
4. 运行实验:将单片机开发板连接到电源,观察数码管的显示效果。
通过动态扫描技术,数码管会以一定的频率显示不同的数字。
四、实验结果与分析通过实验,我们成功实现了数码管的动态扫描显示。
数码管以一定的频率切换显示不同的数字,形成了连续的显示效果。
通过改变程序中的循环次数和延时时间,我们可以调整数码管显示的速度和亮度。
动态扫描技术的优点是可以通过少量IO口驱动多个数码管,节省了硬件资源。
同时,由于数码管的刷新速度较快,人眼无法察觉到闪烁的现象,使得显示效果更加平滑和稳定。
数码管动态扫描显示实验综述
实验三定时器和中断实验一、实验目的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。
一般在数码管显示电路中采用灌电流方式(用共阳数码管),可以得到更高的亮度。
本实验电路中采用拉电流方式(用共阴数码管)。
实验三 LED数码显示管实验
实验三LED数码显示管实验一、实验目的熟悉LED数码显示器的显示过程(共阴极,静态)。
二、实验内容1.编写程序,依次闪动显示“dais88”、“good”。
2.“8”向右循环移位。
三、程序流程四、实验程序1.CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 31E0HS9: JMP START9ZXK EQU 0FFDCHZWK EQU 0FFDDHLED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ; 0~9显示代码表DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0DEH,0F3H; A~F,P.,字符显示代码表BUF DB ?,?,?,?,?,?START9: MOV CX,0005H ;"dais 88" ON/OFFLED,COUNTA90: PUSH CXA91: MOV BX,OFFSET BUFMOV AX,0A0DHMOV [BX],AXADD BX,2MOV AX,0501HMOV [BX],AXADD BX,2MOV AX,0808HMOV [BX],AXMOV CX,0050H ;ONLED,TIMEA92: PUSH CX ;显示dias 88,延时CALL DISPOP CXLOOP A92MOV CX,0003HMOV AX,1010HA93: MOV [BX],AX ;输出字形码0FFH,清屏INC BXINC BXLOOP A93MOV CX,0020H ;OFFSET,TIMEA94: PUSH CXCALL DISPOP CXLOOP A94POP CXLOOP A90 ;显示dias 88,5次;-------------------MOV CX,0005H ;"good" ON/OFFLED-COUNT A99: PUSH CXA95: MOV BX,OFFSET BUFMOV AX,0009HMOV [BX],AXADD BX,2MOV AX,0D00HMOV [BX],AXADD BX,2MOV AX,1010HMOV [BX],AXMOV CX,0050H ;ONLED-TIMEA96: PUSH CXCALL DISPOP CXLOOP A96MOV CX,0003HMOV AX,1010HMOV BX,OFFSET BUFA97: MOV [BX],AXINC BXINC BXLOOP A97MOV CX,0020H ;OFFSET-TIMEA98: PUSH CXCALL DISPOP CXLOOP A98POP CXLOOP A99JMP START9;--------------------------DIS: MOV CL,20HDIS1: MOV AL,[BX]PUSH BXMOV BX,OFFSET LEDXLATPOP BXMOV DX,ZXKOUT DX,ALMOV AL,CLMOV DX,ZWKOUT DX,ALPUSH CXMOV CX,0100HDELAY: LOOP $POP CXCMP CL,01HJZ EXITINC BXSHR CL,1JMP DIS1EXIT: MOV AL,00HMOV DX,ZWKOUT DX,ALRETCODE ENDSEND S92. ;LED “8”字循环演示程序CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODE;=========================================== ORG 1000HLED8: MOV CL,20HMOV AL,80H ;8字型码MOV DX,0FFDCHOUT DX,ALMOV DX,0FFDDHLED0: MOV AL,CLOUT DX,AL ;选通LED位型码PUSH CXCALL DLL ;延时POP CXCMP CL,01HJZ LED8SHR CL,1JMP LED0DLL: MOV BX,0020H ;延时DL1: DEC BXCMP BX,0000JZ DL3MOV CX,04FFHLOOP $JMP DL1DL3: RET;=========================CODE ENDSEND LED8六、扩展练习1.修改程序,显示6个“P.”后清屏;2.修改程序,显示“123456”后清屏。
数码管动态扫描
数码管动态扫描31子情境内容利用动态扫描让四位数码管稳定的显示1234。
32 子情境目标1掌握单片机控制四位数码管的动态扫描技术包括程序设计和电路设计本任务的效果是让四位数码管稳定的显示1234。
2用PROTEUS进行电路设计和实时仿真33 知识点链接1数码管动态扫描动态扫描的定义以及与静态显示的区别动态显示的特点是将所有位数码管的段选线s一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选利用发光管的余辉和人眼视觉暂留作用使人的感觉好像各位数码管同时都在显示。
2总线的应用元器件与总线的连线P0口的接线采用总线方式详细如图517所示。
①选择总线按钮②绘制总线与普通电线的绘制方法一样选择合适的起点、终点单击。
如果终点在空白处左键双击结束连线。
画总线的时候为了和一般的导线区分我们一般喜欢画斜线来表示分支线。
此时我们需要自己决定走线路径只需在想要拐点处单击鼠标左键即可。
在画斜线时需要关闭线路自动路径功能才好绘制。
Proteus的线路自动路径功能简称WAR当选中两个连接点后WAR将选择一个合适的路径连线。
WAR 可通过使用标准工具栏里的“WAR”命令按钮来关闭或打开也可以在菜单栏的“Tools”下找到这个图标。
③给与总线连接的导线贴标签PART LABELS 与P0口相连的线标签名依次为P00—P06本电路中的P0口的上拉电阻通过总线与P0口相连数码管也是通过总线与P0口相连这些都需要标注以表明正确的电气连接。
单击绘图工具栏中的导线标签按钮使之处于选中状态。
将鼠标置于图形编辑窗口的欲标标签的导线上跟着鼠标的指针就会出现一个“×”号表明找到了可以标注的导线单击鼠标左键弹出编辑导线标签窗口如图516所示。
在“string”栏中输入标签名称如p00单击“OK”按钮结束对该导线的标签标定。
同理可以标注其它导线的标签如图516所示。
注意在标定导线标签的过程中相互接通的导线必须标注相同的标签名。
数码管动态显示的三种实验
/****************************************************************************** ** 实验名: 动态显示数码管实验* 使用的IO : 数码管使用P0,P2.2,P2.3,P2.4键盘使用P1* 实验效果: 按矩阵键盘分别显示在数码管上面显示十六进制的0到F。
* 注意:******************************************************************************* /#include<reg51.h>//#include<intrins.h>#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char KeyValue;//用来存放读取到的键值unsigned char KeyState; //记录按键的状态,0没有,1有unsigned char DisplayData[8];//用来存放要显示的8位数的值unsigned char Num;//用来存放中断的时候显示的第位数值void Delay50us(); //延时50usvoid KeyDown(); //检测按键函数void DigDisplay(); //动态显示函数void TimerConfiguration();//定时器初始化设置/****************************************************************************** ** 函数名: main* 函数功能: 主函数* 输入: 无* 输出: 无******************************************************************************* /void main(void){TimerConfiguration();KeyState=0; //初始化按键状态while(1){KeyDown();if(KeyState==1){DisplayData[7]=DisplayData[6];DisplayData[6]=DisplayData[5];DisplayData[5]=DisplayData[4];DisplayData[4]=DisplayData[3];DisplayData[3]=DisplayData[2];DisplayData[2]=DisplayData[1];DisplayData[1]=DisplayData[0];DisplayData[0]=DIG_CODE[KeyValue];KeyState=0;}// DigDisplay();}}/****************************************************************************** ** 函数名: TimerConfiguration* 函数功能: 定时器初始化* 输入: 无* 输出: 无******************************************************************************* /void TimerConfiguration(){TMOD=0X02;//选择为定时器0模式,工作方式2,仅用TRX打开启动。
动态扫描显示电路实验的设计与实现
从无到有:动态扫描显示电路实验的设计与实现动态扫描显示电路是一种常见的电子数字显示技术,其原理是通过快速切换LED单元,从而在观察者眼中呈现出一组数字、字母或符号。
对于初学者而言,常常难以理解其设计和实现过程。
下面将介绍如何从无到有,完成一款具有生动效果的动态扫描显示电路。
一、材料准备1. 数字电路芯片:CD4017B、CD4060B或CD4059B2. LED单元,数量视设计而定。
建议使用3mm或5mm大小的LED。
3. 电源电容:10uF、100uF或470uF电容器。
建议使用50V及以上的规格。
4. 电阻器:220R、1k或10k电阻器,数量视设计而定。
5. 面包板或印制电路板。
6. 其他辅助器件:按钮、开关、电源头等组件。
二、电路设计1. 先了解CD4017B芯片的工作原理。
该芯片是一种低功耗CMOS数码集成电路,具有10位二进制计数器和十个输出端口。
2. 将LED单元连接到芯片对应的输出端口上。
根据需要,可在输出端口前串联电阻器进行电流调节,提高LED的寿命。
3. 通过连接按钮或开关控制器,将CD4017B芯片与CD4060B或CD4059B锁相环组合起来。
锁相环负责调节输出频率,使得LED单元在显示时呈现出连续、动态的效果。
4. 完成电路板的设计和布局。
对于初学者而言,建议使用面包板进行调试,待电路稳定后再将其焊接至印刷电路板上。
三、实验过程1. 将准备好的材料按照电路设计图进行连接。
2. 将电路接入电源头。
确定连接正确、正常工作。
3. 通过按下按钮或开关,观察电路中各个LED单元的状态变化。
调整输出频率使LED单元显示更加流畅。
4. 对电路进行优化,并记录其中的问题、瓶颈及解决方案。
5. 可以在此基础上继续扩展,如添加蜂鸣器、数字显示屏等元件,并将其整合到一起,构建出完整的数字电路系统。
本实验旨在帮助初学者掌握基本的数字电路原理,并能够熟练地设计、调试出具有生动、实用的动态扫描显示电路。
数码管动态扫描实验报告
则一秒运行次数为1000ms/16ms约为63次。
2、请说明数码管的消隐如何实现
答:在程序中加入P0=0xff或者P0=1即可。比如在以下显示学号程序中要实现学号的亮灭
(灭即当作消隐)过程。
while(1)
{ uchar j;
LEDCLK=0;
LEDDIN=0;
_nop_();
LEDCLK=1;
for(j=0;j<8;j++)
void delaபைடு நூலகம்_ms(uint tms)//延时函数
{
uchar i;
while(tms--)
for(i=123;i>0;i--)
}
main() //以下为主函数
{
uchar i;
for(i=0;i<8;i++) //用for语句产生八个正脉冲完成初始化过程
{
LEDCLK=0; LEDDIN=1; _nop_(); LEDCLK=1;}
delay_ms(2); //延时2ms达到动态效果
LEDCLK=0;
LEDDIN=1;
_nop_();
LEDCLK=1}
}
2、实验实物图
说明:如图所示实验结果显示我的学号--------实验成功。
实验操作成绩(百分制)__________实验指导教师签字:__________
三、实验结果与讨论:
本次实验较成功。通过本次实验,我理解了数码管动态显示原理;理解了数码管动态显示电路
的设计方法;基本掌握了数码管动态显示程序的设计方法。在实验中,我还懂得了要让小数点显示,
- 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;