stm328位数码管动态扫描说明书
- 格式:doc
- 大小:371.50 KB
- 文档页数:3
S T M328位数码管动
态扫描说明书
-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
8位数码管动态扫描说明书
一:原理图
数码管电路图
LED数码管引脚定义
二:工作原理
数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一定的电压差值时,便会点亮该段。
当E3输入为1,也就是LED_SEL输入为0时,根据SEL0~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
寄存器的具体说明可参考《STM32中文参考资料》。
三:实验现象及操作
对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。
无其他操作。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。
8位8段LED数码管动态扫描显示
项目名称:8位8段LED数码管动态扫描显示班级:09电二姓名:解健学号:09020313
一.实验目的
1.掌握数码管动态扫描显示原理及实现方法。
2.掌握动态扫描显示电路驱动程序的编写方法。
二.实验电路
第一步:先在Proteu软件中设计仿真电路原理图。
第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。
流程图
开始灭显示器I=0延时Counter=0Counter=0选择段选择段点亮所有位按数值点亮位延时延时
Counter++YCounter<8NI++YNNCounter++YCounter<8N停止Y结束I<30
实验现象:
显示器点亮所有段,持续约1,然后灭显示器,持续2,最后显示“hello-93”,保持。
附:程序
#include#include#defineTRUE1#definedataPortP0#defineledConPortP 2
{unignedchari,counter=0;
for(i=0;i<30;i++){
voiddelay_5u(void){_nop_();_nop_();}
voiddelay_50u(void){unignedchari;for(i=0;i<4;i++){delay_5u() ;}}
voiddelay_100u(void){delay_50u();delay_50u();}
for(j=0;j<10;j++)delay_100u();ucM--;}}。
实验六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的短路帽全部插上。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换sbit LA TCH1=P2^2;//定义锁存使能端口段锁存sbit LA TCH2=P2^3;// 位锁存unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/main(){unsigned char i=0;while(1){DataPort=dofly_WeiMa[i]; //取位码LA TCH2=1; //位锁存LA TCH2=0;DataPort=dofly_DuanMa[i]; //取显示数据,段码LA TCH1=1; //段锁存LA TCH1=0;Delay(60000); // 扫描间隙延时,时间太长会闪烁,太短会造成重影,//这里故意延长时间,方便直观看出动态扫描原理i++;if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个//开始再次扫描8位i=0;}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t); }。
“八位数码管动态扫描”案例原理与测试说明
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. 了解用总线方式控制数码管显示三、实验线路及连线四、实验说明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程序设计思路8位数码管动态扫描是经典的测试数码管是否正常工作和学习使用数码管显示的案例,首先要理解段选和位选概念,段选是选择一个数码管上哪个发光二极管发光,而位选则是选择八个数码管中哪个数码管来显示。
8位数码管动态扫描电路连接示意图2关键代码设计说明2.1公共变量定义及说明sbit Sel0=P2^0;//sbit Sel1=P2^1;//sbit Sel2=P2^2;//位选的三个引脚控制位uchar show_w1;uchar show_w2;uchar show_w3;uchar show_w4;uchar show_w5;uchar show_w6;uchar show_w7;uchar show_w8;//show_wi(i=1,2,3,4,……,8)分别是对应左到右的各个数码管上的显示的数字uchar flag;//分频作用,同时用作位选下标uchar count;//分频作用的变量uchar duanxuan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x40,0x00}; //段选,显示0-fuchar weixuan[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //位选,选择是0-7中的一个数码管2.2 Init():完成初始化配置;(1)P0和P2口需要设置成推挽模式输出,以驱动LED数码管正常显示。
P2M1=0x00; P2M0=0xff; P0M1=0x00; P0M0=0xff;(2)TMOD=0x01; //定时器0采用模式1(3)打开中断并允许定时器0中断EA=1;//打开总中断ET0=1;//允许定时器0中断TR0=1;//启动定时器0(4)设置定时器初始值TH0=(65535-1000)/256; TL0=(65535-1000)%256;(5)设置位选位flag初始值为0;(6)为每个数码管要显示的内容赋初值show_w1=0;show_w2=1;show_w3=2;show_w4=3;show_w5=4;show_w6=5;show_w 7=6;show_w8=7;2.3void timer0() interrupt 1当定时器0初始值不断加一最终溢出时激发的处理方法。
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位数码管。
动态显示原理:原理上同一时刻只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是常说的动态扫描显示。
动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。
如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,所以一般均取几个ms左右为宜。
8.3 DG3000 动态显示头文件display_s.h//----------------------------------------------------------//程序作用:显示头文件display_s.h//----------------------------------------------------------#ifndef _display_#define _display_#includesbit 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,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x 89,0x8C };//定义段码//延时程序void delay(unsigned int k){ unsigned int i,j;for(i=0;i<k;i++)< bdsfid="131" p=""></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;}}//显示程序 8位LED数码管扫描void display(unsigned chardisplay_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#include //调用显示头文件main(){unsigned chara[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6, 0x7};//显示01234567 while(1){display(a); //显示数据}}。
S T M328位数码管动
态扫描说明书
-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN
8位数码管动态扫描说明书
一:原理图
数码管电路图
LED数码管引脚定义
二:工作原理
数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一定的电压差值时,便会点亮该段。
当E3输入为1,也就是LED_SEL输入为0时,根据SEL0~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
寄存器的具体说明可参考《STM32中文参考资料》。
三:实验现象及操作
对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。
无其他操作。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。