七段数码管显示实验

合集下载

实验报告 - - 实验七 - 八段数码管显示实验

实验报告 -  - 实验七 - 八段数码管显示实验

实验报告 - - 实验七 - 八段数码管显示实验EDA实验报告之实验七八段数码管显示实验1、实验目的1)了解数码管动态显示的原理。

2)了解用总线方式控制数码管显示2、实验要求:利用实验仪提供的显示电路, 动态显示一行数据.提示:把显示缓冲区(例如可为60H~65H作为缓冲区)的内容显示出来,当修改显示缓冲区的内容时,可显示修改后的内容(为键盘扫描、显示实验做准备)。

3、实验说明本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。

显示共有6位,用动态方式显示。

8位段码、6位位码是由两片74LS374输出。

位码经MC1413或ULN2021倒相驱动后,选择相应显示位。

本实验仪中 8位段码输出地址为0X004H,位码输出地址为0X002H。

此处X是由KEY/LED CS 决定,参见地址译码。

做键盘和LED实验时,需将KEY/LED CS 接到相应的地址译码上。

以便用相应的地址来访问。

例如,将KEY/LED CS接到CS0上,则段码地址为08004H,位码地址为08002H。

七段数码管的字型代码表如下表:a ----- f| |b | | ----- | g | e| |c -----d 。

h显示字形 g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 10 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 5bh 3 1 0 01 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 01 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h b1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h d 1 0 11 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 0 0 0 1 71h4、原理图及连线5、实验内容1) 使用仪器、仪表,开发平台型号本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,示波器,若干连线,串行数据线。

Lab5 七段数码管显示设计

Lab5 七段数码管显示设计

1
1
1
0
1
1
1
A
11
1
0
1
1
0
0
1
1
1
1
1
b
12
1
1
0
0
1
0
0
1
1
1
0
C
13
1
1
0
1
0
1
1
1
1
0
1
d
14
1
1
1
0
1
0
0
1
1
1
1
E
15
1
1
1
1
0
0
0
0
0
0
0 灭灯
2. 动态扫描显示原理
2
北京中教仪装备技术有限公司
数码管动态扫描显示,是将所用数码管的相同段(a~g 和 p)并联在一起,通过选位通 信号分时控制各个数码管的公共端,循环依次点亮各个数码管。当切换速度足够快时,由于 人眼的“视觉暂留”现象,视觉效果将是六个数码管同时显示,选通信号的时序关系如图 5-4 所示。
四、 实验内容
根据七段数码管的显示原理,用 VHDL 语言编写七段数码显示管的源程序。 要求设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分: 1. 显示数据的设置:程序设定 4 位数码管从左至右分别显示 1、2、3、4; 2. 动态扫描:实现动态扫描时序,这部分是难点,也是重点。参看动态扫描显示原理,
图 5-1 7 段数码管显示原理
该四位数码管与 FPGA 之间通过 8 位拨码开关(JP1)进行连接,当 DIP 开关全部拨到 上方时(板上标示为:7SEGLED),FPGA 的相应 IO 引脚和四位 7 段数码管连接,7 段数码

七段数码管显示实验报告

七段数码管显示实验报告

七段数码管显示实验报告实验目的:本实验的目的是通过控制7段数码管的亮灭状态来显示不同的数字和字母。

实验原理:7段数码管常用于显示数字和字母,每个数码管由7个LED灯组成,分别表示A、B、C、D、E、F、G等7个段。

通过控制这些LED灯的亮灭状态,就可以显示不同的数字和字母。

在实际应用中,通常需要使用一个译码器来根据输入的数字或字母输出相应的控制信号。

常用的译码器有7447、DM9368等。

这些译码器通常都是BCD码到7段数码管的译码器。

在本实验中,我们将使用7447译码器来控制7段数码管的亮灭状态。

7447译码器具有4个输入线和7个输出线,每个输入线上的BCD码可以转换成相应的控制信号,用于控制数码管的7个LED 灯。

实验材料:1.7段数码管2.7447译码器3.电路板4.电压源5.连接线实验步骤:1.将7447译码器插入电路板上相应的插槽中,并将数码管连接到电路板上。

2.将电压源连接到电路板上,并调节电压和电流值。

3.根据所需显示的数字或字母,设置相应的BCD码输入信号。

4.打开电源,观察数码管是否能够正确显示。

实验结果:通过本实验,我们可以成功控制7段数码管的亮灭状态,实现了数字和字母的显示。

同时,我们也了解了7447译码器的原理和使用方法。

实验小结:本实验是电子技术的基础实验之一,通过实验我们深入了解了7段数码管和7447译码器的原理和应用,同时也锻炼了我们的动手能力和实验技能。

在实际应用中,7段数码管和译码器常常被用于数字显示、计数器、时钟、温度计等电子设备中,具有广泛的应用前景。

EDA实验三七段数码管显示译码

EDA实验三七段数码管显示译码

实验三:七段数码管显示译码一、实验目的:1 设计并实现一个7段数码管控制接口,要求:在输入四位数据为0~15时,数码管显示0~F;2设计并实现一个两位7段数码管控制接口,实现输入八位二进制,结果由两位7段数码管显示功能。

3 熟悉ISE9.1软件中电路的设计仿真及综合实现方法;4 熟悉下载方法及实验系统调试方法。

二、实验原理七段数码管显示译码程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hex2led ISPORT(hex : IN STD_LOGIC_VECTOR(3 downto 0);ledout : OUT STD_LOGIC_VECTOR(6 downto 0));END hex2led;ARCHITECTURE rtl OF hex2led ISSIGNAL led :STD_LOGIC_VECTOR(6 downto 0);BEGINledout<= NOT led;WITH hex SELECTled<="1111001" when "0001","0100100" when "0010","0110000" when "0011","0011001" when "0100","0010010" when "0101","0000010" when "0110","1111000" when "0111","0000000" when "1000","0010000" when "1001","0001000" when "1010","0000011" when "1011","1000110" when "1100","0100001" when "1101","0000110" when "1110","0001110" when "1111","1000000" when others;END rtl;三、实验处理激励代码:tb : PROCESSBEGINhex<="0000";wait for 50 ns;for i in 0 to 15 loophex<=hex+1;wait for 50 ns;end loop;功能仿真图时序仿真图(图中黄线可以看出延时)延时报告:Data Sheet report:All values displayed in nanoseconds (ns) Pad to PadSource Pad |Destination Pad| Delay | hex<0> |ledout<0> | 5.963| hex<0> |ledout<1> | 5.963| hex<0> |ledout<2> | 5.963| hex<0> |ledout<3> | 5.958| hex<0> |ledout<4> | 5.963| hex<0> |ledout<5> | 5.958| hex<0> |ledout<6> | 5.958| hex<1> |ledout<0> | 5.963| hex<1> |ledout<1> | 5.963| hex<1> |ledout<2> | 5.963| hex<1> |ledout<3> | 5.958| hex<1> |ledout<4> | 5.963| hex<1> |ledout<5> | 5.958| hex<1> |ledout<6> | 5.958| hex<2> |ledout<0> | 5.963| hex<2> |ledout<1> | 5.963| hex<2> |ledout<2> | 5.963| hex<2> |ledout<3> | 5.958| hex<2> |ledout<4> | 5.963| hex<2> |ledout<5> | 5.958| hex<2> |ledout<6> | 5.958| hex<3> |ledout<0> | 5.963| hex<3> |ledout<1> | 5.963| hex<3> |ledout<2> | 5.963| hex<3> |ledout<3> | 5.958| hex<3> |ledout<4> | 5.963| hex<3> |ledout<5> | 5.958| hex<3> |ledout<6> | 5.958| ---------------+---------------+---------+可编程器件、拨码开关、与发光二极管关系#PACE: Start of PACE I/O Pin AssignmentsNET "hex<0>" LOC = "N17" ;NET "hex<1>" LOC = "H18" ;NET "hex<2>" LOC = "L14" ;NET "hex<3>" LOC = "L13" ;NET "ledout<0>" LOC = "B4" ;NET "ledout<1>" LOC = "A4" ;NET "ledout<2>" LOC = "D5" ;拨码开关状态数码管显示D1D2D3D4下下下下0下下下上1下下上下2下下上上3下上下下4下上下上5下上上下6下上上上7上下下下8上下下上9上下上下A 上下上上B 上上下下C 上上下上D 上上上下E 上上上上FNET "ledout<3>" LOC = "C5" ;NET "ledout<4>" LOC = "A6" ;NET "ledout<5>" LOC = "B6" ;NET "ledout<6>" LOC = "E7" ;设计表格记录实验结果,并分析其结果的正确性。

实验六 七段LED数码管显示实验

实验六   七段LED数码管显示实验

实验六七段LED数码管显示实验
一、实验目的
学习LED显示器的使用方法。

二、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。

三、实验内容
输出LED的位选码和段选码,在七段LED显示器上循环显示8字。

四、实验原理介绍
显示器的段选码由8255A的PA口提供,显示器的位扫描信号由8255A的PB 口提供给共阴极LED数码管的公共端。

五、实验步骤
1、实验连线
将LED数码管右侧的短路快取下。

8255A的PA0~PA7分别连LED-A~LED-DP,8255A的PB0~PB5分
别连接LED1~LED6,8255CS连CS0。

2、编写调试并运行程序,在LED显示器上显示8字并循环,调
整延时程序,观察运行结果。

六、实验提示
1、各端口地址:
PA口:04A0H
PB口:04A2H
PC口:04A4H
控制口:04A6H
2、LED显示的方法为动态显示。

七、实验报告要求
1、画出程序框图。

2、编写并整理经过运行,证明是正确的源程序,并加以注释。

七段数码显示器显示实验报告

七段数码显示器显示实验报告

单片机原理及接口技术实验报告实验项目:姓名:专业:班级:学号:一、实验名称七段数码显示器显示实验(SPI通信方式)二、实验设备PC机1台,CEPARK畅学系列实验装置1套三、实验目的1.熟悉I/O口作为数字量输出的初始化;2.熟悉共阳极与共阴极两种数码管的工作原理;3.学会软硬件的设计和调试方法;4.根据七段数码管的特性,对应出每个数字引脚输出的16进制码,然后编写程序。

四、实验要求1.将0-9这十个数字按顺序依次在数码管上显示出来,时间间隔为0.5S;2.熟悉延时函数的使用(可用for循环自己写一个延时函数);3.掌握PIC16F877A芯片及电子元件的使用方法;4.实现单片机软件与硬件的结合,将理论知识应用于实践。

五、理论原理1.LED七段数码显示器由8个发光二极管组成显示字段,根据部发光二极管的连接形式不同,LED有共阴极和共阳极两种(原理图如下图1所示)。

(实验板采用的LED为共阳极的连接方式)图1.单个共阳极数码管原理图2.接口说明:接口编号为JP44,需要一个8位端口(A~G、DP)去控制,因此提供给LED的字形码也是8位的。

数码管各段编号如下图2所示:图2.数码管各段编号3.LED七段数码显示器各字段与控制端口位的对应关系如下表1所示:控制端口位D7 D6 D5 D4 D3 D2 D1 D0 字段名dp g f e d c b a 4.共阳极LED七段数码显示器字形代码如下表2所示:字形显示编码字形显示编码0 C0H 9 90H1 F9H A 88H2 A4H b 83H3 B0H C C6H4 99H d A1H5 92H E 86H6 82H F 8EH7 F8H .(小数点)7FH8 80H -(负号)BFH六、实验容步骤1.接线说明核心板RD口接底板JP15,具体为:RD0-A,RD1-B,RD2-C,RD3-D,RD4-E,RD5-F,RD6-G,RD7-DP2.创建项目打开MPLAB IDE v8.90 →选择Project,进入Project Wizard,进入下面的界面,单击下一步。

组合电路——7段数码管显示驱动电路设计报告

组合电路——7段数码管显示驱动电路设计报告

实验一、组合电路——7段数码管显示驱动电路设计一、实验目的了解EDA实验箱7位八段数码管显示模块的工作原理,设计标准扫描驱动电路模块,以备后面实验用。

二、硬件要求主芯片为Cyclone V E,型号为EP4CE22F17C8,7位八段数码管显示器,四位拨码开关。

三、实验内容用四位拨码开关产生8421BCD码,用CPLD分别产生7段数码管扫描驱动电路,然后进行仿真,观察波形,正确后编程下载实验测试。

四、实验原理1、72、动信号a,b,c,d,e,f,g。

通过调节四位拨码开关的状态,数码管应显示与之对应的字符。

五、实验连线输入:将芯片管角a0~a3分别接4个拨码开关;输出:将芯片管角led7s0~7分别接到数码管7段驱动信号a、b、c、d、e、f、g上。

六、实验源程序:decl7s.vhdlibrary ieee;use ieee.std_logic_1164.all;entity decl7s isport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0));end;architecture one of decl7s isbeginprocess(a)begincase a iswhen "0000" => led7s<="0111111"; when "0001" => led7s<="0000110"; when "0010" => led7s<="1011011"; when "0011" => led7s<="1001111"; when "0100" => led7s<="1100110"; when "0101" => led7s<="1101101"; when "0110" => led7s<="1111101"; when "0111" => led7s<="0000111"; when "1000" => led7s<="1111111"; when "1001" => led7s<="1101111"; when "1010" => led7s<="1110111"; when "1011" => led7s<="1111100"; when "1100" => led7s<="0111001"; when "1101" => led7s<="1011110"; when "1110" => led7s<="1111001"; when "1111" => led7s<="1110001"; when others => null;end case;end process;end;七、波形仿真结果。

七段数码管动态显示控制

七段数码管动态显示控制

实验二七段数码管动态显示控制一、实验目的利用AT89S52和使用两位数码管显示器,循环显示两位数00-99。

其中P2.0和P2.1端口分别控制数码管的个位和十位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过驱动三极管给数码管相应的位供电,这时只要P3口送出数字的显示代码,数码管就能正常显示数字。

二、实验要求1、使用两位数码管显示器,循环显示两位数00-99;2、具有电源开关和指示灯,有复位键;3、数码管动态显示,即扫描方式,每一位每间隔一段时间扫描一次。

字符的亮度及清晰度与每位点亮的停留时间和每位显示的时间内轮换导通次数有关。

三、实验电路四、实验器材AT89S52;动态扫描显示;共阳极数码管;电阻五、实验原理说明图1 AT89S52引脚图图2 共阳极七段数码管引脚图1AT89S52引脚图,说明如下:按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O 口、控制和复位等。

1.多功能I/O口AT89S52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O线。

每根线可以单独用作输入或输出。

①P0端口,该口是一个8位漏极开路的双向I/O口。

在作为输出口时,每根引脚可以带动8个TTL输入负载。

当把“1”写入P0时,则它的引脚可用作高阻抗输入。

当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。

在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。

②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机实验报告实验九七段数码管显示实验一、实验目的1.学习七段数码管的工作原理;2.学习数码管与8051单片机的接口方法;3.掌握动态扫描显示技术。

二、实验原理如图4.9-1所示,LED数码管由7个发光二极管组成,此外,还有一个圆点型发光二极管(在图中以dp表示),用于显示小数点。

通过七段发光二极管亮共阴极接法共阳极接法图4.9-1暗的不同组合,可以显示多种数字、字母以及其它符号。

LED数码管中的发光二极管共有两种连接方法:1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。

使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。

实验中使用的LED显示器为共阴极接法2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极。

使用时公共阳极接+5V。

这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。

为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。

七段发光二极管,再加上一个小数点位,共计八段。

因此提供给LED显示器的字形代码正好一个字节。

若a、b、c、d、e、f、g、dp 8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7,则用共阴极LED数码管显示十六进制数时所需的字形代码如表4.9-1所示。

表4.9-1 共阴极LED 数码管字形代码 字型 共阴极字形代码 字型 共阴极字形代码字型共阴极字形代码0 3FH 6 7DH C 39H 1 06H 7 07H d 5EH 2 5BH 8 7FH E 79H 3 4FH 9 6FH F 71H 4 66H A 77H 灭 00H 56DHb7CH*实际上试验中使用的是共阳极数码管,这里就不一一列出。

2、动态显示按图4.9-2(b )连接线路,通过交替选中LED1和LED0循环显示两位十进制数。

七段数码管段码连接不变,位码驱动输入端S1、S0接8255A C 口的PC1、PC0,通过C 口的这两位交替输出1和0,以便交替选中LED1和LED0,从而实现两位十进制数的交替显示。

请编程实现在两个LED 数码管上循环显示00 99,程序流程图如图4.9-3(b)所示。

(a) 静态显示程序流程图 (b) 动态显示程序流程图 图4.9-3 十位数的段码至A 口 个位数的段码至A 口 开始 开始返回DOS 返回DOS 延时并修改要显示的数字三、实验电路图第一部分电路图:第二部分电路图:四、实验设备微型计算机、单片机仿真器、实验仪、示波器(各一台);实验连线(若干)。

五、实验内容*由于汇编语言程序中已经做了相应的注释,C语言的编程原理与之相同处不再做重复注释,仅作个别注释,请见谅。

1.编程在8位数码管上面显示“12345678”8个数字,每经过1秒8个数字循环左移一位显示。

依次为:1234578、23456781、34567812.......汇编语言程序代码:O RG 0000HSTART:M OV R4,#00HFLASH:M OV R2,#01HM OV R0,#30HM OV DPTR,#TABFLA ;把字形表首地址给外部寻址寄存器LOPFLA:M OV A,R2 ;输出位型M OV P2,AM OV A,@R0M OVC A,@A+DPTR ;在程序段中查表得到字形M OV P1,A ;输出字形M OV R3,#0D JNZ R3,$ ;循环等待延时M OV P1,#0FFH ;关显示M OV A,R2 ;位型左移一位R L AM OV R2,AI NC R0 ;下一个字形C JNE R0,#38H,GOONM OV R0,#30HGOON:C JNE A,#01H,LOPFLA ;若已经显示一遍则初始化I NC R4C JNE R4,#7FH,GOON1M OV A,30H ;显示表左移更新M OV 30H,31HM OV 31H,32HM OV 32H,33HM OV 33H,34HM OV 34H,35HM OV 35H,36HM OV 36H,37HM OV 37H,AM OV R4,#00HGOON1:A JMP FLASHTABFLA: ;字形表D B 0C0H,0F9H,0A4H,0B0H,99HD B 92H,82H,0F8H,80H,90H,88HD B 83H,0C6H,0A1H,86H,8EHENDC语言程序代码:#include<reg51.h>data unsigned char disadd _at_ 0x30;const unsigned char LED_TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};data unsigned char j;void delay(){u nsigned char i=0xFF;w hile(i--){;}}void change_s(){u nsigned char *k;u nsigned char m;k=&disadd;m=*k; //显示表移位*k=*(k+1);*(k+1)=*(k+2);*(k+2)=*(k+3);*(k+3)=*(k+4);*(k+4)=*(k+5);*(k+5)=*(k+6);*(k+6)=*(k+7);*(k+7)=m;j=0x00; //计数值初始化}main(){u nsigned char i;u nsigned char disbit;u nsigned char *disnum,*n;S P=0x40;j=0x00;n=&disadd;*(n)=0x01; //显示设置初值为1~8 *(n+1)=0x02;*(n+2)=0x03;*(n+3)=0x04;*(n+4)=0x05;*(n+5)=0x06;*(n+6)=0x07;*(n+7)=0x08;w hile(1){disbit=0x01;disnum=&disadd;for(i=0;i<8;i++){P2=0x00;P1=LED_TAB[*disnum];P2=disbit;delay();disbit=disbit<<1;disnum++;}j++;if(j==0x3f){change_s(); //调用显示表移位子程序}}}2.用8255的PA口作为段码输出口,编写程序,利用定时器T0作为时间基准控制电子钟走时,电子钟的格式为:XX—XX—XX分钟—秒钟—百分秒汇编语言程序代码:C OM_ADD XDATA 0F003HP A_ADD XDATA 0F000HP B_ADD XDATA 0F001HP C_ADD XDATA 0F002HO RG 0000HA JMP STARTO RG 000BHA JMP T0INTO RG 0030HSTART:M OV SP,#60H ;设置堆栈M OV TMOD,#01H ;设置定时器T0的控制字M OV TH0,#0F0H ;设置定时器计数初值M OV TL0,#07FHM OV R7,#00H ;显示寄存器置初值M OV R6,#00HM OV R5,#00HM OV R4,#00HM OV R3,#00HM OV R2,#00HM OV 32H,#16 ;设置显示分隔符M OV 35H,#16S ETB ET0 ;允许中断(T0内部中断)S ETB EAS ETB TR0 ;开始计数CONTINUE:M OV 37H,R7 ;进位判断,R7表示百分之一秒(之后的以此类推)M OV 36H,R6C JNE R6,#0AH,NOREACHM OV R6,#00HM OV 36H,R6I NC R5M OV 34H,R5C JNE R5,#0AH,NOREACHM OV R5,#00HM OV 34H,R5I NC R4M OV 33H,R4C JNE R4,#06H,NOREACHM OV R4,#00HM OV 33H,R4I NC R3M OV 31H,R3C JNE R3,#0AH,NOREACHM OV R3,#00HM OV 31H,R3I NC R2M OV 30H,R2C JNE R2,#06H,NOREACHM OV R2,#00HM OV 30H,R2NOREACH:A CALL DISPLAY ;调用显示子程序A JMP CONTINUE;中断子程序T0INT:I NC R7 ;R7表示百分之一秒(之后的以此类推)C JNE R7,#0AH,NOREACH_SM OV R7,#00HI NC R6NOREACH_S:M OV TH0,#0F0H ;计数完一次后再次置计数初值M OV TL0,#07FHR ETI;数码管显示子程序DISPLAY:M OV R1,#01H ;位型输出指针M OV R0,#30HM OV DPTR,#COM_ADDM OV A,#80HM OVX @DPTR,ALOPFLA:M OV DPTR,#PB_ADDM OV A,R1M OVX @DPTR,AM OV DPTR,#TABFLAM OV A,@R0M OVC A,@A+DPTR ;在程序段中查表得到字形M OV DPTR,#PA_ADDM OVX @DPTR,AM OV A,#00HWAIT:D EC AC JNE A,#00H,WAIT ;等待延时M OV DPTR,#PA_ADDM OV A,#0FFHM OVX @DPTR,A ;关显示M OV A,R1 ;位型左移一位R L AM OV R1,AI NC R0 ;下一个字形C JNE A,#01H,LOPFLA ;若已经显示一遍则初始化R ETTABFLA:D B 0C0H,0F9H,0A4H,0B0H,99HD B 92H,82H,0F8H,80H,90H,88HD B 83H,0C6H,0A1H,86H,8EHD B 0BFHENDC语言程序代码:#include<reg51.h>#define TIMEINT 0x01#define TIMEH 0xf0#define TIMEL 0x7fxdata unsigned char con_address _at_ 0xf003;xdata unsigned char pa _at_ 0xf000;xdata unsigned char pb _at_ 0xf001;xdata unsigned char pc _at_ 0xf002;data unsigned char disadd _at_ 0x30;const unsigned char LED_TAB[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};data unsigned char r2,r3,r4,r5,r6,r7; //显示变量设置为全局变量void delay(){u nsigned char i=0xFF;w hile(i--){;}}void timer0(void) interrupt 1 using 1 //中断子程序{r7++;i f(r7==0x0A){r7=0x00;r6++;}T H0=TIMEH;T L0=TIMEL;}void display() //显示子程序{u nsigned char i;u nsigned char disbit;u nsigned char *disnum;disbit=0x01;disnum=&disadd;for(i=0;i<8;i++){pb=0x00;pa=LED_TAB[*disnum];pb=disbit;delay();disbit=disbit<<1;disnum++;}}main(){u nsigned char *n;S P=0x40;c on_address=0x80;T MOD=TIMEINT;T H0=TIMEH;T L0=TIMEL;n=&disadd;r7=0x00;r6=0x00;r5=0x00;r4=0x00;r3=0x00;r2=0x00;*(n+2)=16;*(n+5)=16;E T0=1;E A=1;T R0=1;w hile(1){*(n+7)=r7; //显示进位判断*(n+6)=r6;if(r6==0x0A){r6=0x00;*(n+6)=r6;r5++;*(n+4)=r5;if(r5==0x0A){r5=0x00;*(n+4)=r5;r4++;*(n+3)=r4;if(r4==0x06){r4=0x00;*(n+3)=r4;r3++;*(n+1)=r3;if(r3==0x0A){r3=0x00;*(n+1)=r3;r2++;*n=r2;if(r6==0x06){r2=0x00;*n=r2;}}}}}display();}}六、实验小结通过本次试验,我基本上掌握了数码管显示的程序流程,学会编写一些程序调用相应的相应的子程序,显示所需内容,了解了动态扫描显示的程序执行过程,结合定时器的设置和中断的返回,来实现最基本的百分秒显示,从而完成时钟显示,由此,结合前面所学的知识,巩固了数码管显示的知识,增强了我的程序调试能力,为下一步的学习打下了坚实基础。

相关文档
最新文档