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); //显示数据}}。
电子课程设计——8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:自动化姓名:学号:指导教师:2014年12月目录一、设计任务与要求...................... 错误!未定义书签。
二、总体框图............................ 错误!未定义书签。
2.1、设计思想....................... 错误!未定义书签。
2.2、设计方案....................... 错误!未定义书签。
2.3、对方案的分析................... 错误!未定义书签。
三、选择器件 (4)3.1、实验所需器件: (4)3.2、器件说明: (4)四、功能模块 (7)4.1、脉冲模块设计 (7)4.2、扫描电路模块设计 (8)4.3、显示电路模块设计 (9)五、总体设计电路图 (10)5.1总体设计原理 (10)5.2、总体设计电路图 (11)5.3、仿真结果 (11)5.4、硬件实验 (13)六、心得体会 (14)8位数码管动态显示电路设计一、设计任务与要求1.设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
(第一至第八个数码管依次显示1、2、3、4、5、6、7、8)2.要求在某一时刻,仅有一个LED数码管发光。
3.该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4.当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5.研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图2、1、设计思想电路有八种显示状态,在第一脉冲周期内,第一个数码管显示1;第二个脉冲周期内,第二个数码管显示2;在第三脉冲周期内,第三个数码管显示3;第四个脉冲周期内,第四个数码管显示4;在第五脉冲周期内,第五个数码管显示5;第六个脉冲周期内,第六个数码管显示6;在第七脉冲周期内,第七个数码管显示7;第八个脉冲周期内,第八个数码管显示8。
设计报告课程名称电子技术基础I任课教师设计题目8位十进制数动态扫描显示控制电路班级8位十进制数数码动态扫描电路设计简介:所谓动态扫描显示,就是让各位LED按照一定的顺序轮流地发光显示。
只要每秒扫描次数大于24次以上,就观察不到闪烁现象,人眼看起来很稳定。
静态扫描显示与动态显示相比,有显著降低LED功耗,大大减少LED的外部引线等优点。
目前动态扫描显示技术已经被广泛应用于新型数字仪表、智能仪器和智能显示屏中。
本次课程实践中运用QuartusII软件,采用VHDL文本设计和原理图相结合的层次化方式实现数码8位动态扫描显示电路设计。
首先,分别用VHDL语言编写8位数码扫描显示电路程序和分频器程序,作为底层文件;顶层文件用原理图的设计方法,调用底层文件生成的符号,从而实现动态扫描显示。
用VHDL设计一个8位数码扫描显示电路,利用QuartusII9.0进行编辑输入、编译及时序仿真。
其中,由于分频器的分频系数过大时,在仿真波形上很难看出波形的变化,如本设计是从100MHz分频到1KHz,分频系数为一万,所以可以通过改变减小分频系数,如改为10分频,就得到变化的波形,来验证数码动态扫描显示电路设计的正误。
一、工作原理1、8位动态扫描显示的工作原理:输入信号:时钟信号CLK。
输出控制信号:段控制信号SG[6..0];位控制控制信号BT[7..0]。
8位数码管,其中每个数码管的8个段h、g、f、e、d、c、b、a(h是小数点)都分别连接在一起,8个数码管分别由8个选通信号k1~k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅为k3对应的数码管显示来自段信号端的数据,而其他7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1~k8分别被选通,与此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
8位数码管动态扫描实验(1) 实验目的:学习计数器器的设计、分析和测试方法。
学习硬件扫描显示电路的设计方法。
(2) 实验原理:如图1所示的是8位数码扫描显示电路,其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。
被选通的数码管显示数据,其余关闭。
如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。
根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
图1数码管动态扫描原理图(3)实验内容1:如图2所示,为数码管动态扫描电路结构图,用VHDL语言描述一个数码管动态扫描显示电路,在数码管上显示 1 2 3 4 5 6 7 8,在QuartusⅡ上进行编译、综合、适配、仿真,给出其所有信号的时序仿真波形,下载至试验箱,观看结果。
电路模式不限,引脚图参考附录图12。
将试验箱左下方的拨码开关全部向上拨,时钟CLK可选择clock0,通过跳线选择16384Hz信号。
图2 数码管动态扫描电路结构图(4)实验内容2:以下为数字钟的VHDL程序,输入时钟12MHZ,输出为秒低位、秒高位、分低位、分高位、时低位、时高位。
结合实验内容一的程序,把上述的秒低位、秒高位、分低位、分高位、时低位、时高位在数码管1 2 4 5 7 8上显示出来。
--数字钟Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity clock isPort( clk: in std_logic;secL: out std_logic_vector(3 downto 0);secH: out std_logic_vector(3 downto 0);minL: out std_logic_vector(3 downto 0);minH: out std_logic_vector(3 downto 0);houL: out std_logic_vector(3 downto 0);houH: out std_logic_vector(3 downto 0));end clock;architecture arch of clock issignal clk_1s : std_logic;signal count : integer range 0 to 11999999;signal counter :std_logic_vector(2 downto 0);signal datain :std_logic_vector(31 downto 0);signal dataout: std_logic_vector(3 downto 0);signal tsecL,tsecH,tminL,tminH,thouL,thouH: std_logic_vector(3 downto 0); beginprocess (clk) --分频器,产生秒脉冲beginif clk'event and clk='1' thenif count=count'high then count<=0;else count<=count+1;end if;end if;end process;process (clk)beginif clk'event and clk='1' thenif count>=count'high/2 then clk_1s<='1';else clk_1s<='0';end if;end if;end process;process (clk_1s) --计时器beginif clk_1s'event and clk_1s='1' thenif tsecL = "1001" thentsecL <= "0000";if tsecH = "0101" thentsecH <= "0000";if tminL = "1001" thentminL <= "0000";if tminH = "0101" thentminH <= "0000";if thouH = "0010" and thouL = "0011" thenthouH <= "0000";thouL <= "0000";elsif thouL = "1001" thenthouL <= "0000";thouH <= thouH + 1;else thouL <= thouL + 1;end if;else tminH <= tminH + 1;end if;else tminL <= tminL + 1;end if;else tsecH <= tsecH + 1;end if;else tsecL<=tsecL+1;end if;end if;end process;secL <= tsecL;secH <= tsecH;minL <= tminL;minH <= tminH;houL <= thouL;houH <= thouH;end arch;。
电子课程设计—8位数码管动态显示电路设计学院:电子信息工程学院专业、班级:姓名:学号:指导老师:2014年12月目录一、设计任务与要求................................................. (3)二、总体框图................................................. (3)三、选择器件................................................. (3)四、功能模块................................................. (9)五、总体设计电路图................................................. . (10)六、心得体会.................................................. .. (12)8位数码管动态显示电路设计一、设计任务与要求1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。
2. 要求在某一时刻,仅有一个LED数码管发光。
3. 该数码管发光一段时间后,下一个LED发光,这样8只数码管循环发光。
4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。
5、研究循环地址码发生器的时钟频率和显示闪烁的关系。
二、总体框图设计的总体框图如图2-1所示。
图2-1总体框图三、选择器件 1、数码管数码管是一种由发光二极管组成的断码型显示器件,如图1所示。
U13DCD_HEX图1 数码管数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。
数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。
8位共阴极数码管动态显示时间,可调节,调节的数闪烁显示//本例程为共阴极数码管;//在普中单片机上通过实验;//8位数码管动态显示时间,可调节,//调节时间时,调节的数闪烁显示;//比较两种闪烁的方法;#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit tiaojie=P3^0;sbit jia=P3^1;sbit jian=P3^2;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};uchar a,b,num1,num2,flag100ms,flag1s,flagtj;uchar miao,fen,shi,flagjia,flagjian;bit flag_1s;uchar code wela[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchar dula[8]={0,0,1,1,2,2,3,3};void delay(uint z);void intc();void keyscan();void disp();void main(){intc();while(1){keyscan();disp();}}//================void intc(){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1;EA=1;TR0=1;}void timer0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;a++;if(a==10){flag100ms=1;}if(a==100){a=0,flag1s=1,miao++;flag_1s=~flag_1s;}if(miao==60){miao=0,fen++;}if(fen==60){fen=0,shi++;if(shi>12)shi=1;}}//====================void disp(){uchar i;dula[7]=miao%10;dula[6]=miao/10;dula[5]=10;dula[4]=fen%10;dula[3]=fen/10;dula[2]=10;dula[1]=shi%10;dula[0]=shi/10;/*switch(flagtj)//第一种方法实现闪烁显示{case 1: if(flag_1s==1){dula[7]=11;dula[6]=11;}else{dula[7]=miao%10;dula[6]=miao/10;}break;case 2: if(flag_1s==1){dula[4]=11;dula[3]=11;}else{dula[4]=fen%10;dula[3]=fen/10;}break;case 3: if(flag_1s==1){dula[1]=11;dula[0]=11;}else{dula[1]=shi%10;dula[0]=shi/10;}break;case 0:break;}for(i=0;i<8;i++){ P0=table[dula[i]];P2=wela[i];delay(10);P0=0;}*/for(i=0;i<8;i++)//第二种闪烁显示方法{switch(flagtj){case 1:if(i>5&&i<8){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 2:if(i>2&&i<5){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 3:if(i>=0&&i<2){if(flag_1s==1)P0=0;elseP0=table[dula[i]];}elseP0=table[dula[i]];break;case 0:P0=table[dula[i]];break;}P2=wela[i];delay(10);P0=0;}}//=====================void delay(uint z){uint x;uchar y;for(x=0;x<z;x++)for(y=0;y<112;y++);}//===========================void keyscan(){if(tiaojie==0)delay(100);if(tiaojie==0){while(!tiaojie);flagtj++;if(flagtj>3)flagtj=0;}if(jia==0)delay(100);if(jia==0){while(!jia);flagjia=1;}if(jian==0)delay(100);if(jian==0){while(!jian);flagjian=1;}if(flagtj!=0)switch(flagtj){ case 1: if(flagjia==1){flagjia=0;miao++;if(miao>60)miao=0;}if(flagjian==1) {flagjian=0;if(miao<1)miao=1;miao--;}break;case 2: if(flagjia==1) {flagjia=0;fen++;if(fen>60)fen=0;}if(flagjian==1) {flagjian=0;if(fen<1)fen=1;fen--;}break;case 3: if(flagjia==1) {flagjia=0;shi++;if(shi>12)shi=1;}if(flagjian==1) {flagjian=0;if(shi<1)shi=1;shi--;}break;}}//===============。
原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。
相关原理:数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。
我们分别把他命名为A,B,C,D,E,F,G,H。
搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。
也就是把B,E,H(小数点)不亮,其余全亮。
根据硬件的接法我们编出以下程序。
当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。
LOOP:CLR P2.7 ;选中最后的数码管SETB P0.7 ;B段不亮SETB P0.5 ;小数点不亮SETB P0.1 ;C段不亮CLR P0.2 ;其他都亮CLR P0.3CLR P0.4CLR P0.6CLR P0.0JMP LOOP ;跳转到开始重新进行END把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。
也许你会说:显示1个2字就要10多行程序,太麻烦了。
显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮为1(高电平)是灭。
从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。
我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。
有了这个表格上面显示一个2的程序则可简化为:LOOP:CLR P2.7 ;选中左边的数码管MOV P0,#0A2H ;送数字2的代码到P0口JMP LOOP ;跳转到开始重新进行END原理图中把所有数码管的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,由8个PNP的三极管,来控制这8位哪一位工作,例如上面的例子中我们选中的是P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只需要把程序CLR P2.7改为CLR P2.0即可。
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之间循环。
无其他操作。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。