八段数码管显示实验
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位数码管扫描显示
实验六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同时⼯作。
三、实验程序原程序作如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY SCAN_SEG8 ISPORT(CLK3,CLK5 :IN STD_LOGIC;RST :IN STD_LOGIC;SEG_DA:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);SEG_SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END SCAN_SEG8;ARCHITECTURE ADO OF SCAN_SEG8 ISSIGNAL SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4,SEG_BUF0:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SEG_CNT :STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL SEG_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL CLK:STD_LOGIC;BEGINPROCESS (CLK5)BEGINIF CLK5'EVENT AND CLK5='1' THENCLK<=NOT CLK;END IF;END PROCESS;PROCESS(CLK5,RST)BEGINIF CLK5'EVENT AND CLK5='1' THENIF CLK='1' THENSEG_BUF1<= "0001";SEG_BUF2<= "0010";SEG_BUF3<= "0011";SEG_BUF4<= "0100";SEG_BUF5<= "0101";SEG_BUF6<= "0110";SEG_BUF7<= "0111";SEG_BUF8<= "1000";ELSESEG_BUF0<=SEG_BUF8;SEG_BUF8<=SEG_BUF7;SEG_BUF7<=SEG_BUF6;SEG_BUF6<=SEG_BUF5;SEG_BUF5<=SEG_BUF4;SEG_BUF4<=SEG_BUF3;SEG_BUF3<=SEG_BUF2;SEG_BUF2<=SEG_BUF1; SEG_BUF1<=SEG_BUF0; END IF;END IF;END PROCESS;PROCESS (CLK3,RST)BEGINIF CLK3'EVENT AND CLK3='1' THENIF RST='1' THENSEG_CNT<="000";ELSESEG_CNT<=SEG_CNT+1;END IF;END IF;END PROCESS;SEG_SEL<=SEG_CNT;PROCESS (SEG_CNT, SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4,SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8) BEGIN CASE SEG_CNT ISWHEN O"0" => SEG_TEMP<=SEG_BUF1;WHEN O"1" => SEG_TEMP<=SEG_BUF2;WHEN O"2" => SEG_TEMP<=SEG_BUF3;WHEN O"3" => SEG_TEMP<=SEG_BUF4;WHEN O"4" => SEG_TEMP<=SEG_BUF5;WHEN O"5" => SEG_TEMP<=SEG_BUF6;WHEN O"6" => SEG_TEMP<=SEG_BUF7;WHEN O"7" => SEG_TEMP<=SEG_BUF8;WHEN OTHERS=> SEG_TEMP<="XXXX";END CASE;END PROCESS;PROCESS(SEG_TEMP)BEGINCASE SEG_TEMP ISWHEN "0000" => SEG_DA<="00111111";WHEN "0001" => SEG_DA<="00000110";WHEN "0010" => SEG_DA<="01011011";WHEN "0011" => SEG_DA<="01001111";WHEN "0100" => SEG_DA<="01100110";WHEN "0101" => SEG_DA<="01101101";WHEN "0110" => SEG_DA<="01111101";WHEN "0111" => SEG_DA<="00000111";WHEN "1000" => SEG_DA<="01111111";WHEN "1001" => SEG_DA<="01101111";WHEN "1010" => SEG_DA<="01110111";WHEN "1011" => SEG_DA<="01111100";WHEN "1100" => SEG_DA<="00111001";WHEN "1101" => SEG_DA<="01011110";WHEN "1110" => SEG_DA<="01111001";WHEN "1111" => SEG_DA<="01110001";WHEN OTHERS => NULL;END CASE;END PROCESS;END ADO;四、实验步骤1、打开Quartus II,选择“File”菜单下的“New Project Wizard”,建⽴Project及顶层实体的名称为SCAN_SEG8,期间,选择的⽬标芯⽚为EP2C5Q208C8N;2、选择“File”菜单下的“New”命令,在“New”窗⼝中选择“VHDL Files”,输⼊程序,进⾏编译;3、选择“File”菜单中的“New”项,在“New”窗⼝中选择“Other Files”中的“Vector Waveform File”项,打开空⽩的波形编辑器,输⼊所有的信号节点,给输⼊随机赋值,保存,单击⼯具栏上的快捷⽅式,进⾏波形仿真;4、打开“Assignments”菜单下的“Pins”命令,打开引脚锁定窗⼝,进⾏引脚锁定,再次对VHDL Files进⾏编译;5、连接EDA实验箱,将EP2C5适配板左下⾓的JTAG⽤⼗芯排线和万⽤下载区左下⾓的SOPC JTAG ⼝连接起来,万⽤下载区右下⾓的电源开关拨到 SOPC下载的⼀边,将JPLED1短路帽右插,JPLED的短路帽全部上插,请将JP103的短路帽全部插上。
《FPGA设计与应用》数码管显示实验一
《FPGA设计与应用》数码管显示实验一、实验目的和要求
1.学习动态数码管的工作原理;
2.实现对EGO1开发板四位动态数码管的控制;
二、实验内容
实现对EGO1开发板四位动态数码管的控制,使其能够正常工作;
三、实验要求
在EGO1开发板上显示想要的数字。
四、操作方法与实验步骤
1、八段数码管的动态显示原理:
2、数码管显示的设计共分3个模块:
(1)数码管封装模块
(2)数码管设计模块
(3)顶层模块
数码管动态显示的MODULE实现:
模块顶层设计——显示4个(位)十进制数
逻辑实现:
确定当前显示的位
确定当前“位”需要显示的“数”:
将“数”翻译成相应的“段码”
仿真测试台代码编写与仿真测试定义时间标尺:
定义测试Moudle
实例化被测Moudle
定义激励信号与响应信号
构造激励信号:
五、实验数据记录和处理实验代码如下:
设计文件:(部分)
仿真文件:
约束文件:
六、实验结果与分析网表结构:
仿真图像:
实物图:
七、讨论和心得
通过这次实验,我学会了数码管的动态显示,每一个数码管共用一套电路,显示时只需控制哪一个数码管进行显示。
虽然一次只能控制单独一个数码管进行显示,但可以快速切换数码管显示,利用人眼的”视觉暂留"来“同步”进行显示。
最后我明白了我们不要遇到一点困难就退缩,就去向老师同学寻求帮助,自己是自己最好的老师,只有我们靠自己的不断修改出正确结果,才会对这个知识掌握的更加透彻。
八段数码管显示实验总结
八段数码管显示实验总结以下是一篇关于八段数码管显示实验总结的文章,旨在详细介绍实验的步骤和结果。
引言:在现代电子技术领域中,七段数码管是一种常见的数字显示装置,常用于计时器、电子表、计数器等设备中。
而八段数码管则是七段数码管的进化版,它增加了一个小数点显示位,可以显示更多的数码和字符。
本篇文章将围绕八段数码管显示实验展开,介绍实验过程及实验结果。
第一步:材料准备进行八段数码管显示实验前,需要准备以下材料:1. 八段数码管:这是实验中的核心组件,用于显示数字和字符。
2. 转接板:用于连接八段数码管和单片机,实现电路的连接。
3. 单片机:本实验中我们选择XXXX型号的单片机,它具备足够的输入输出引脚,方便实验开展。
4. 面包板:用于搭建电路,连接各个组件。
5. 连接线:用于连接数码管、转接板和单片机。
第二步:电路连接1. 将转接板插入面包板中心位置,确保其稳固。
2. 将八段数码管插入转接板对应位置,并通过连接线将其与转接板上的引脚相连。
3. 将单片机插入转接板上的插槽,并通过连接线将其与转接板上的引脚相连。
4. 连接线的连接需要按照电路连接图进行,确保连线正确无误。
第三步:程序编写1. 打开XXXX软件,创建一个新的工程。
2. 在新的工程中,编写程序代码来控制八段数码管显示。
可以根据自己的需求,编写数字、字符等不同的显示内容。
3. 在程序代码中,通过设置不同的数位选择引脚和段选引脚的高低电平来实现不同位上的显示。
第四步:烧录程序1. 将单片机与电脑通过USB线连接。
2. 打开软件,选择对应的单片机型号和烧录方式。
3. 将程序烧录至单片机中,确保烧录成功。
第五步:实验结果在将程序烧录到单片机后,即可观察八段数码管的显示结果。
根据实验编写的程序,数码管将会显示相应的数字和字符。
可以通过改变程序代码中的内容,实现不同的显示效果。
比如,可以设置不同的数值、字符以及使用动态显示等功能。
结论:通过本次实验,我们成功地搭建了一个八段数码管的显示电路,并利用单片机编写了相应的程序进行控制。
用汇编语言实现八段数码管显示
用汇编语言实现八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。
2. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明1.本实验仪提供了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 。
位选通信号 (0x002H)段码输出 (0x004H)数据总线七段数码管的字型代码表如下表:五、程序框图程序代码OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口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 ;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,#0DispAgain:call DisplayLED ;djnz DelayT,DispAgain ljmp MLoopend。
硬件实验十--八段数码管显示
硬件实验十 八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。
2. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明1.本实验仪提供了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 。
位选通信号 (0x002H)段码输出 (0x004H)数据总线连线 连接孔1 连接孔2 1 KEY/LED_CS CS0七段数码管的字型代码表如下表:五、程序框图程序代码OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口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 ;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,#0DispAgain:call DisplayLED ;djnz DelayT,DispAgain ljmp MLoopend硬件实验十一 键盘扫描显示实验一、实验要求在硬件实验十的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在六位数码管上显示出来。
实验七 八段数码管显示
实验七八段数码管显示
1.实验目的:
了解数码管动态显示的原理。
2.实验要求:
利用实验仪提供的显示电路,动态显示一行数据.
3.实验说明:
本实验仪提供了8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
本实验仪中 8位段码输出地址为0X004H,位码输出地址为 0X002H。
此处X是由CS40 决定,参见地址译码。
做键盘和LED实验时,需将CS40孔接到相应的地址译码上。
以便用相应的地址来访问。
例如,将CS40孔接到CS0上,则段码地址为08004H,位码地址为08002H。
4.实验器材:
(1)G2100 实验平台 1 台(2)LabMON51 仿真器 1 台
(3)计算机 1 台(4)实验连线若干
5.程序框图:
6.实验电路:
七段数码管的字型代码表如下表:
7.实验步骤:
(1)把第“40”号模块“键盘显示”的片选信号CS40孔接第“36”号模块“片选信
号”YS0(08000-08FFFH )孔。
(2)编程并调
试。
单片机实验八段数码管显示
“验证式"? 实验十一八段数码管显示;文件名(A11.ASM)OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164时钟位) DA T164 equ 0e102h ; 段控制口(接164数据位) IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;ljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 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, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DA T164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov 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。
实验二、8段数码管显示实验
0 0 0 1 1 1 1 1 1 3FH 1 1 1 1 1 1 0 0 FCH
40H
C0H
1 0 0 0 0 0 1 1 0 06H 0 1 1 0 0 0 0 0 60H
79H
F9H
2 0 1 0 1 1 0 1 1 5BH 1 1 0 1 1 0 1 0 DAH
24H
A4H
3 0 1 0 0 1 1 1 1 4FH 1 1 1 1 0 0 1 0 F2H
7406 OC门 X 3
+5V
上拉 电阻 ×14
AT89C51
共阴 数码管
位 P1.5 P1.4
选 P1.3 P1.2
线 P1.2 P1.0
数码管驱动
动态显示驱动(采用DTLED_6显示驱动芯片) 将所有数码管通过分时轮流控制各个数码管的的COM(公共
端)端(相当于直连的位选端),就使各个数码管轮流受控显示。
6. 多种封装形式:PDIP24,SOC24 两种。
DTLED_6芯片——串行输入时序
DTLED_6芯片一帧串行输入数据格式
dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8 小数点 - 数码管1- 数码管2- 数码管3- 数码管4- 数码管5- 数码管6-ID识别码-BZ识别码 00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-
特点:编程较简单,但占用I/O口线多,一般适用 于显示位数较少的场合。
⑵ 动态显示方式,在某一瞬时显示一位,依次循环 扫描,轮流显示,由于人的视觉滞留效应,人们看 到的是多位同时稳定显示。
八段数码管滚动显示程序设计
八段数码管滚动显示程序设计实验三八段数码管滚动显示程序设计一、实验目的1.掌握数码管动态显示的原理;2.掌握74LS164扩展端口的方法;3.掌握数码管滚动显示的方法。
二、实验内容1.验证参考程序中的实验(显示数字0-5);2.修改程序:(1)使6个数码管从左到右重复滚动的显示一定的信息,比如:日期2008-3-20;(2)滚动显示的速度可以修改。
三、实验器材PC机一台, 仿真器一台, 实验箱一台, 导线若干。
四、实验原理图显示共有6位,采用动态显示,8段数码管是由8155的PB0、PB1经过74LS164串转并后输出得到,6位位码由8155的PA0口输出,经UA2003反向驱动后,选择相应的显示位。
实验中数据输出口地址为0e102h,时钟为输出地址为0e102h,位选通输出地址位0e101h。
实验原理图见图4-1。
图4-1 实验原理图五、实验步骤1.按照实验一中的建立工程的步骤,建立本实验内容相应的工程;2.运用调试工具,调试软件,观察现象;3.调试修改程序观察现象。
六、参考程序/* “验证式"?实验十一八段数码管显示 */#include#define LEDLen 6 //6个数码灯//以下定义8155为PA、PB为基本I/o模式,PC为输出模式#define mode 0x03;/* 8155的命令状态口寄存器地址 */#define CAddr XBYTE[0xe100]/* 8155的PA口地址,用于数码灯的位控制 */#define OUTBIT XBYTE[0xe101]/* 8155的PB口地址,其PB0和PB1用于74Ls164串行输入,控制数码管的段 */#define CLK164 XBYTE[0xe102]#define DAT164 XBYTE[0xe102] /* 段控制口(接164数据位) */ /* 键盘读入口 */#define IN XBYTE[0xe103]/* 显示缓冲 */unsigned char LEDBuf[LEDLen];/* 八段管显示码共阴极字符显示*/code unsigned char LEDMAP[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };void Delay(unsigned char CNT){unsigned char i;while (CNT-- !=0)for (i=100; i !=0; i--);}void DisplayLED(){unsigned char i, j;unsigned char Pos;unsigned char LED;/* 6个数码管从左边开始显示,0010 0000 */Pos = 0x20;for (i = 0; i < LEDLen; i++){/* 六个数码管位控制为零,实现关所有八段管 */OUTBIT = 0;//数码管需要显示的段数据LED = LEDBuf[i];//8155通过PB0和PB1向74Ls164送段数据,串行输入,74Ls164并行输出到数码管段for (j = 0; j < 8; j++){//每个数据有8位,开始检测每一位的情况,先检测高位if(LED & 0x80) DAT164 = 1;else DAT164 = 0;//必须PB1(CLK164)由低位向高位跳变,才能PB0(DAT164)发送一位数据CLK164 = CLK164|0x02;//CLK164置0CLK164 = CLK164&0xfd;//为下一位发送做准备LED <<= 1;}OUTBIT = Pos; /* 显示一位八段管 */ Delay(1);Pos >>= 1; /* 显示下一位 */}OUTBIT = 0; /* 关所有八段管 */}void main(){unsigned char i = 0;unsigned char j;CAddr = mode;while(1){//保证数组里面的数据在0~15中间循环 LEDBuf[0] = LEDMAP[ i & 0x0f]; LEDBuf[1] = LEDMAP[(i+1) & 0x0f]; LEDBuf[2] = LEDMAP[(i+2) & 0x0f]; LEDBuf[3] = LEDMAP[(i+3) & 0x0f];LEDBuf[4] = LEDMAP[(i+4) & 0x0f];LEDBuf[5] = LEDMAP[(i+5) & 0x0f];i++;for(j=0; j<30; j++)DisplayLED(); /* 延时 */}}七、实验现象当程序正常烧入并全速运行后,发现数码管的显示是从左到右滚动显示,并且显示的值是“0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f”轮流显示,通过延时可以调节滚动的快慢。
用汇编语言实现八段数码管显示
用汇编语言实现八段数码管显示一、实验要求利用实验仪提供的显示电路,动态显示一行数据.二、实验目的1. 了解数码管动态显示的原理。
2. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明1.本实验仪提供了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 。
位选通信号 (0x002H)段码输出 (0x004H)数据总线七段数码管的字型代码表如下表:五、程序框图程序代码OUTBIT equ 08002h ; 位控制口OUTSEG equ 08004h ; 段控制口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 ;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,#0DispAgain:call DisplayLED ;djnz DelayT,DispAgain ljmp MLoopend。
八段数码管显示实验
实验一 八段数码管显示实验一、实验目的:1、了解数码管动态显示的原理。
2、了解74LS164扩展端口的方法。
二、实验要求:利用实验仪提供的显示电路,动态显示一行数据。
三、实验电路:这里只是显示草图,详细原理参见第一章的1.1.15 “8155键显模块”。
四、实验说明:1、本实验仪提供了8段码数码管LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,采用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经uA2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。
2六、实验步骤:1、将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
2、进入KEIL软件界面,点击项目/打开项目在C:\KEIL\UV2\次1配套实验例程中选择实验一,内有ASM和C51两种程序,进入ASM 文件夹打开LED项目文件进入如图所示界面点击“调试/启动/停止调试”,进入调试界面,点击“调试/运行”可看到8段数码管交替显示0—F七、实验程序:OUTBIT equ 0e101h ; 位控制口CLK164 equ 0e102h ; 段控制口(接164时钟位)DAT164 equ 0e102h ; 段控制口(接164数据位)IN equ 0e103h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲Num equ 70h ; 显示的数据DelayT equ 75h ;org 0000hljmp StartLEDMAP: ; 八段管显示码db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07hdb 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, #00hmovx @dptr, a ; 关所有八段管mov a, @r0mov B, #8 ; 送164DLP:rlc amov r3, amov acc.0, cANL A, #0FDHmov dptr, #DAT164movx @dptr, amov dptr, #CLK164orl a,#02hmovx @dptr, aanl a,#0fDhmovx @dptr, amov a, r3djnz B, DLPmov dptr, #OUTBITmov a, r2movx @dptr, a ; 显示一位八段管mov r6, #1call Delaymov a, r2 ; 显示下一位rr amov r2, ainc r0djnz r1, Loopmov dptr, #OUTBITmov a, #0movx @dptr, a ; 关所有八段管retStart: mov dptr,#0e100hmov a,#03hmovx @dptr,amov 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, FillBuf mov DelayT,#30 DispAgain:call DisplayLED ; 显示djnz DelayT,DispAgainljmp MLoopEND。
八段数码管单片机
单片机实验报告(四)实验名称八段数码管显示(51/96/88)一、实验目的1.了解数码管动态显示的原理。
2.了解用总线方式控制数码管显示二、实验原理1.本实验仪提供了 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。
三、实验所用仪器LED 、 89C51 、试验箱、导线四、操作步骤图1-1 实验电路及其连线图1-2 七段数码管的字形代码表图1-3 实验框图五、实验程序1、wave实验箱实验程序ORG 0100HMAIN: MOV SP,#70HMOV 75H,#1MOV 76H,#1MOV 77H,#5MOV 78H,#9MOV 79H,#9MOV 7AH,#1MOV R4,#6ONE: LCALL BRITHDAY ;进入死循环,让数码管都一直亮着 LJMP ONEBRITHDAY:MOV R0,#75H;给R0一个单元地址75HMOV R3,#01H ;位选码只让第一个数码管亮MOV A,R3 ;将R3的值给ALOOP: MOV DPTR,#8002HMOVX @DPTR,AINC DPTRINC DPTRMOV A,@R0ADD A,#0DHMOVC A,@A+PCMOVX @DPTR,AACALL DL1MSINC R0MOV A,R3JB ACC.5,LOOP1RL AMOV R3,AAJMP LOOPLOOP1:RETTABLE:DB 3FH,06H,5BH,4FH,66H,6DH,DB 7DH,07H,7FH,6FH,77H,7CHDL1ms: MOV R7,#02HLOOP2: MOV R6,#0F6H ;1LOOP3: DJNZ R6,LOOP3 ;2DJNZ R7,LOOP2 ;2 1000-1*2-2*2-2*2*2-1*2=948 948%4=246(F6H)RET程序设计思路:在89c51内部的RAM中设置6个缓冲单元,分别存放显示器要显示的6位的数据。
数码管显示实验报告
_nop_();
if(n==0)
TM1668R_STB_H = 0;
else
TM1668L_STB_H = 0;
Send_Data(0x88,n);
if(n==0)
TM1668R_STB_H = 1;
else
TM1668L_STB_H = 1;
}
/*******************************************************************************
{
if(n==0)
TM1668R_DIO_H = 0;
else
TM1668L_DIO_H = 0;
}
_nop_();
_nop_();
_nop_();
_nop_();
if(n==0)
TM1668R_CLK_H = 1;
else
TM1668L_CLK_H =1;
}
}
void DIS_data_1668(uchar data1,uchar data2,uchar data3,uchar data4,uchar n)
sbit TM1668L_STB_H = P2^4;
sbit LIGHT = P0^1;
uchar Today_data[8];
uint temp,kk;
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
Send_Data(0x00,n);
Send_Data(data3,n);
Send_Data(0x00,n);
硬件实验6 八段数码管显示实验
硬件实验6 八段数码管显示实验1.实验目的1)了解数码管实现显示字符的7段码编制方法;2)掌握查表法获得0-F的7段码的方法;3)掌握静态显示和动态显示的原理,硬件连接方式和程序编写方法。
2.预习要求1)了解数码管静态显示和动态显示接口电路的设计方法和特点;2)了解数码管动态显示的程序设计方法;3)理解运用串行口工作方式0扩展I/O连接数码管的方法;4)认真预习本节实验内容,设计实验硬件连接电路,编写实验程序。
3.实验说明1)LED数码管显示原理8段LED数码管有共阴极和共阳极两种结构。
对于共阴数码管,其8个LED的阴极连接在一起作为公共COM端;而共阳数码管中8个LED的阳极连接在一起作为公共COM端。
共阴数码管显示的必要条件是其COM端接地或接具有较大灌电流能力的输入端口,此时当某个发光二级管的阳极为高电平时,该发光二极管点亮;共阳数码管显示的必要条件是共阳极接电源或具有较强电流输出能力的输出端口,此时当某个发光二极管的阴极接低电平时,该发光二级管被点亮。
2)LED数码管显示方式A.静态显示方式静态显示的特点是每个数码管需要一个具有锁存功能的8位输出口,用来锁存待显示的段码。
将要显示数的7段码输出到端口,数码管就会显示并一直保持到接收到新的显示段码为止。
静态显示的优点:显示程序简单,占用CPU时间少。
但当数码管数量较多时,就需要外扩较多的输出端口,因此静态显示的缺点是占用硬件资源多,成本较高。
B.动态显示方式动态显示的特点是将多个数码管的相应段码线连在一起,接到一个8位输出端口,该端口称为段码输出口;同时将各个(如8个)数码管的COM端连接到一个8位输出端口,该端口称为位控输出口。
这样的连接使得8个数码管只要2个输出端口就可以实现控制,大大简化硬件电路。
但是由于多个数码管的段码是连在一起的,所以需要结合位控信号,分时输出不同数码管上显示的7段码,即需要采用动态显示扫描,轮流向段码输出口输出段码和向位控输出口输出位选信号,并进行1~2ms的短时延时;8个数码管轮流输出一遍后,约20ms后,就要进行一次显示刷新,这样才能利用发光管的余辉和人眼视觉暂留作用,得到全部数码管同时稳定显示的效果。
8位动态LED数码管显示实验——【全国大学生电子设计大赛】
8位动态LED数码管显示实验2008-03-18 18:048.1 实物图与原理图本实验仪配置带8位动态扫描显示模块一个。
实物图如下:为减少IO的使用,我们采用串入并出芯片CD4094来扩展了IO 口,即采用3个IO来实现数据的传输。
原理图如下:所以,我们占用3个IO来传输数据,8个IO来进行8个LED数码管的位选。
在本实验仪中链接管教分布如下:STK-----P2.5DAT-----P2.6CLK-----P2.7B0、B1、B2、B3、B4、B5、B6、B7接P0口(P0.0 P0.1 P0.2 P0.3 P0.4 P0.5P0.6 P0.7)由于上一节已经讲述了CD4094驱动一位LED数码管的问题,这里我们讲如何来扫描8位数码管。
8.2 LED动态显示原理根据原理图管脚连接,我们知道P0口控制了8个LED数码管的位选中,所以如果想让8个数码管都亮起来,我们可以逐位扫描8位数码管。
1动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h----------------------------------------------------------程序作用:显示头文件display_s.h----------------------------------------------------------#ifndef _display_#define _display_#include <intrins.h>sbit SDA=P2^6; 定义显示管脚sbit CLK=P2^7;unsigned char data display_bit;unsigned char codeled[20]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x89,0x8C};2旗开得胜定义段码延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)for(j=0;j<100;j++);}数据传输void send(unsigned char a){unsigned char i;for(i=0;i<8;i++){if(_crol_(a,i)&0x80)SDA=1;elseSDA=0;CLK=0;CLK=1;}}3显示程序8位LED数码管扫描void display(unsigned char display_buffer[8]){unsigned char i,k;display_bit=0xfe;for(i=0;i<8;i++){k=led[display_buffer[i]];send(k);P0=display_bit;delay(0x01);P0=0xff;display_bit=_crol_(display_bit,1);}display_bit=0xfe;8.4 8位数码管动态显示01234567(C51程序)----------------------------------------------------------程序作用:动态扫描显示01234567----------------------------------------------------------#include<REG52.h>#include<display_s.h> 调用显示头文件4main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};显示01234567 while(1){display(a); 显示数据}}8.5 8位数码管动态显示01234567(汇编);----------------------------------------------------------;程序作用:8位数码管动态显示01234567(汇编);----------------------------------------------------------;定义变量DBUF DATA 40H ;显示缓冲区首址SP_BT DATA 60H ;堆栈指针初值; LED 位选LED_CS1 BIT P0.0LED_CS2 BIT P0.1LED_CS3 BIT P0.2LED_CS4 BIT P0.35旗开得胜LED_CS5 BIT P0.4LED_CS6 BIT P0.5LED_CS7 BIT P0.6LED_CS8 BIT P0.7;4094接口SDA_4094 BIT P2^6CLK_4094 BIT P2^7ORG 0000HAJMP MAIN;-------------------------------ORG 0030HMAIN: MOV SP,#60HMOV R0,#0FFH;单元清零RES1: MOV R0,#0DJNZ R0,RES1MOV DBUF,#00H;显示数据MOV DBUF+1,#01HMOV DBUF+2,#02HMOV DBUF+3,#03HMOV DBUF+4,#04H6旗开得胜MOV DBUF+5,#05HMOV DBUF+6,#06HMOV DBUF+7,#07HSAMP1:LCALL DIR ;调用显示SJMP SAMP1;------------------------------------------------------;显示数据;-------------------------------------------------------DIR:;显示程序MOV DPTR,#TABLEMOV A,DBUFMOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS1 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS1 ;关闭显示MOV A,DBUF+1MOVC A,A+DPTRANL A,#7FH;加小数点7ACALL DISP_da ;送段码输出CLR LED_CS2;选通第1位数码管LCALL DELAY_4094SETB LED_CS2;关闭显示MOV A,DBUF+2MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS3 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS3 ;关闭显示MOV A,DBUF+3MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS4;选通第1位数码管LCALL DELAY_4094SETB LED_CS4;关闭显示MOV A,DBUF+4MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS5 ;选通第1位数码管LCALL DELAY_40948SETB LED_CS5 ;关闭显示MOV A,DBUF+5MOVC A,A+DPTRANL A,#7FH;加小数点ACALL DISP_da ;送段码输出CLR LED_CS6;选通第1位数码管LCALL DELAY_4094SETB LED_CS6;关闭显示MOV A,DBUF+6MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS7 ;选通第1位数码管LCALL DELAY_4094SETB LED_CS7 ;关闭显示MOV A,DBUF+7MOVC A,A+DPTRACALL DISP_da ;送段码输出CLR LED_CS8;选通第1位数码管LCALL DELAY_4094SETB LED_CS8;关闭显示;-------------------------------------9RETTABLE: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F;-------------------------延时子程序---------------------------------DELAY_4094: MOV R4,#2 ;延时程序3,精确延时1000微秒D_4094:MOV R5,#248DJNZ R5,$DJNZ R4,D_4094RETDISP_DA:MOV R3,#08HDUP: RLC AMOV SDA_4094,CCLR CLK_4094SETB CLK_4094DJNZ R3,DUPRETEND10。
PLC八段码显示实验报告
PLC八段码显示实验报告一、实验目的本实验的主要目的是通过PLC控制,实现对八段码进行显示,并且能够通过输入信号来控制八段码的数字。
二、实验器材•PLC控制器•按钮开关•八段码显示器•电源线•信号线三、实验过程1.连接PLC控制器和八段码显示器的电源线,确保电源供给正常。
2.将输入信号与PLC控制器相连,通过按钮开关控制输入信号的开关。
3.使用PLC编程软件编写PLC控制程序,实现对八段码的控制。
4.将PLC控制程序下载到PLC控制器上。
5.打开PLC控制器的电源,并观察八段码显示器上的显示情况。
6.按下按钮开关,观察八段码的数字是否发生变化。
四、实验结果经过实验,发现八段码显示器能够正确地显示数字,并且通过按钮开关,能够实现对数字的控制。
当按钮开关处于开启状态时,八段码会显示当前设定的数字;当按钮开关处于关闭状态时,八段码的数字会停止更新。
五、实验分析通过对PLC控制程序的编写和下载,以及对八段码显示器的连接和控制,实现了对八段码的显示和控制。
通过开关按钮的控制,可以灵活地改变八段码的数字,实现不同数字的显示。
六、实验总结本次实验通过PLC控制器和八段码显示器的组合应用,实现了对八段码的显示和控制。
通过实验的过程,我们掌握了PLC的基本原理和编程方法,并且加深了对八段码显示器的理解。
未来可以进一步应用PLC控制器,实现更复杂的功能。
七、思考题1.PLC控制器在实际工业生产中的应用有哪些?2.除了八段码显示器,还有哪些显示设备可以与PLC控制器结合使用?3.在本实验中,八段码的数字是如何控制的?如何改变八段码的显示数字?以上是对PLC八段码显示实验的报告,通过实验我们成功实现了对八段码的显示和控制,掌握了PLC的基本原理和编程方法。
希望通过本次实验能够对PLC应用有更深入的理解和掌握。
硬件实验6 八段数码管显示实验
硬件实验6 八段数码管显示实验1.实验目的1)了解数码管实现显示字符的7段码编制方法;2)掌握查表法获得0-F的7段码的方法;3)掌握静态显示和动态显示的原理,硬件连接方式和程序编写方法。
2.预习要求1)了解数码管静态显示和动态显示接口电路的设计方法和特点;2)了解数码管动态显示的程序设计方法;3)理解运用串行口工作方式0扩展I/O连接数码管的方法;4)认真预习本节实验内容,设计实验硬件连接电路,编写实验程序。
3.实验说明1)LED数码管显示原理8段LED数码管有共阴极和共阳极两种结构。
对于共阴数码管,其8个LED的阴极连接在一起作为公共COM端;而共阳数码管中8个LED的阳极连接在一起作为公共COM端。
共阴数码管显示的必要条件是其COM端接地或接具有较大灌电流能力的输入端口,此时当某个发光二级管的阳极为高电平时,该发光二极管点亮;共阳数码管显示的必要条件是共阳极接电源或具有较强电流输出能力的输出端口,此时当某个发光二极管的阴极接低电平时,该发光二级管被点亮。
2)LED数码管显示方式A.静态显示方式静态显示的特点是每个数码管需要一个具有锁存功能的8位输出口,用来锁存待显示的段码。
将要显示数的7段码输出到端口,数码管就会显示并一直保持到接收到新的显示段码为止。
静态显示的优点:显示程序简单,占用CPU时间少。
但当数码管数量较多时,就需要外扩较多的输出端口,因此静态显示的缺点是占用硬件资源多,成本较高。
B.动态显示方式动态显示的特点是将多个数码管的相应段码线连在一起,接到一个8位输出端口,该端口称为段码输出口;同时将各个(如8个)数码管的COM端连接到一个8位输出端口,该端口称为位控输出口。
这样的连接使得8个数码管只要2个输出端口就可以实现控制,大大简化硬件电路。
但是由于多个数码管的段码是连在一起的,所以需要结合位控信号,分时输出不同数码管上显示的7段码,即需要采用动态显示扫描,轮流向段码输出口输出段码和向位控输出口输出位选信号,并进行1~2ms的短时延时;8个数码管轮流输出一遍后,约20ms后,就要进行一次显示刷新,这样才能利用发光管的余辉和人眼视觉暂留作用,得到全部数码管同时稳定显示的效果。
八段数码管显示
实验一八段数码管显示1、实验目的:(1)了解数码管动态显示的原理。
(2)了解74LS164扩展端口的方法。
2、实验要求:利用实验仪提供的显示电路,动态显示一行数据.3、实验电路图LED1LED2LED3LED4LED5LED64、实验器材:(1)超想-3000TB综合实验仪 1 台(2)超想3000仿真器 1 台(3)计算机 1 台5、实验连线无 6、实验说明:(1)本实验仪提供了8段码LED 显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8段数码管是由8155的PB0、PB1经74LS164“串转并”后输出得到。
6位位码由8155的PA0口输出,经Ua2003反向驱动后,选择相应显示位。
74LS164是串行输入并行输出转换电路,串行输入的数据位由8155的PB0控制,时钟位由8155的PB1控制输出。
写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位移到74LS164中,并且实现移位。
向显示位选通地址输出高电平就可以点亮相应的显示位。
本实验仪中数据位输出地址为0e102H ,时钟位输出地址为0e102H ,位选通输出地址为 0e101H 。
本实验涉及到了8155 I0/RAM 扩展芯片的工作原理以及74LS164器件的工作原理。
(2)七段数码管的字型代码表显示字形g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h2 1 0 1 1 0 1 1 6bh3 1 0 0 1 1 1 1 4fh4 1 1 0 0 1 1 0 66h5 1 1 0 1 1 0 1 6dh6 1 1 1 1 1 0 1 7dh7 0 0 0 0 1 1 1 07h8 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 B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F1111 71hab c def g dp7、程序框图8、实验步骤1.将KEIL仿真器上40芯排线一端和实验箱上51CPU板上的40芯排针连接起来,将仿真器连接的USB或串口线与PC机对应的USB或串口连接起来,打开实验箱电源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八段数码管显示实验报告
一.设计目的
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 Start
LEDMAP: ; 八段管显示码
db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
Delay: ; 延时子程序
mov r7, #0
DelayLoop:
djnz r7, DelayLoop
djnz r6, DelayLoop
ret
DisplayLED:
mov r0, #LEDBuf
mov r1, #6 ; 共6个八段管
mov r2, #00100000b ; 从左边开始显示
Loop:
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a ; 关所有八段管
mov a, @r0
mov dptr, #OUTSEG
movx @dptr,a
mov dptr, #OUTBIT
mov a, r2
movx @dptr, a ; 显示一位八段管
mov r6, #01
call Delay
mov a, r2 ; 显示下一位
rr a
mov r2, a
inc r0
djnz r1, Loop
mov dptr, #OUTBIT
mov a, #0
movx @dptr, a ; 关所有八段管 ret
Start:
mov sp, #40h
mov Num, #0
MLoop:
inc Num
mov a, Num
mov b, a
mov r0, #LEDBuf
FillBuf:
mov a, b
anl a, #0fh
mov dptr, #LEDMap
movc a, @a+dptr ; 数字转换成显示码
mov @r0,a ; 显示在码填入显示缓冲
inc r0
inc b
cjne r0, #LEDBuf+6, FillBuf
mov DelayT,#30
DispAgain:
call DisplayLED ; 显示
djnz DelayT,DispAgain
ljmp MLoop
end
四.设计步骤
1.根据任务书中的系统性能要求,设计实验流程框图;
2.学习课程设计相关的原理知识,特别是数码管动态显示的原理;
3.对设计出的流程框图,使用汇编语言完成源代码的编写;
4.在实验箱配套软件上完成汇编程序的初步调试;
5.连接实验箱,完成系统功能性测试;
6.完成课程设计报告,报告内容包括:
a、程序设计流程框图;
b、说明设计的依据;
c、记录程序测试的过程;
d、说明实验过程中遇到的问题和解决的方法。
五.实验结果
实验现象:显示示数依次123456 234567 345678 456789
56789A 6789AB 789ABC 89ABCD 9ABCDE
ABCDEF BCDEF0 CDEF01 DEF012 EF0123 F01234
012345 123456
实验结论:成功设计出能够动态显示一行数据的系统,并且可以改变数字的变化速度。
六.实验心得
为期一周的单片机学习过去了,在这段时间里,老师通过以做实验和修改实验代码等形式来增强我们专业课程知识综合应用能力和实践能力。
在做实验的过程中,老师还反复强调
要多思考多实践。
通过这一周的学习,我了解了单片机的基础知识,知道单片机实验板,它由8031、8155,eprom2764,max232键盘及显示器组成。
其中8155片内有256个ram单元,接6个7段码显示器和8个按键作输入。
在这里,要感谢老师的悉心指导和栽培,在以后在学习过程中,我会更加注视实践操作,使自己更好地学习专业知识。