eda实验如何实现60进制计数器七段数码管的显示

eda实验如何实现60进制计数器七段数码管的显示,第1张

实验四 七段数码管显示电路一、实验目的实现十六进制计数显示。二、硬件需求EDA/SOPC实验箱一台。三、实验原理七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。图2-13为共阳极数码管和共阴极数码管的内部结构图。图2-13 共阳极数码管和共阴极数码管的内部结构图用七段数码管除了可以显示0~9的阿拉伯数字外,还可以显示一些英语字母。下表是常见的字母与7段显示关系(共阴极数码管)。

段字母 a b c d e f g

A 0 0 0 1 0 0 0

B 1 1 0 0 0 0 0

C 0 1 1 0 0 0 1

D 1 0 0 0 0 1 0

E 0 1 1 0 0 0 0

F 1 0 0 0 1 1 1

H 0 1 1 0 1 1 1

四、实验内容编写一个0~F轮换显示的电路(注意:选用实验箱中的共阳数码管DP1A,FPGA上P25引脚连接50MHz时钟。实验时为了便于观察,要将50MHz时钟经过分频得到1Hz时钟)。五、实验步骤(1)实验程序LIBRARY IEEE;USE IEEEstd_logic_1164all;USE IEEEstd_logic_unsignedall;ENTITY exp2 ISGENERIC(n:INTEGER :=6);port(clk: IN std_logic;led: OUT std_logic_vector(6 DOWNTO 0));END exp2;ARCHITECTURE example OF exp2 ISSIGNAL sel:INTEGER RANGE 0 TO n-1 :=0;SIGNAL f_out:std_logic;SIGNAL count:INTEGER RANGE 0 TO 15 :=0;

BEGINPROCESS(clk)BEGINIF clk'event and clk='1' THENIF sel>n-2 THEN sel<=0;ELSEIF sel>=n/2 THENf_out<='1';ELSEf_out<='0';END IF;sel<=sel+1;END IF;END IF;END PROCESS;PROCESS(f_out)BEGINIF f_out'event and f_out='1' THENIF count<=15 THENcount<=count+1;ELSEcount<=0;END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN 0 => led <="0000001";WHEN 1 => led <="1001111";WHEN 2 => led <="0010010";WHEN 3 => led <="0000110";WHEN 4 => led <="1001100";WHEN 5 => led <="0100100";WHEN 6 => led <="0100000";WHEN 7 => led <="0001111";WHEN 8 => led <="0000000";WHEN 9 => led <="0000100";WHEN 10 => led <="1110111";WHEN 11 => led <="0011111";WHEN 12 => led <="1001110";WHEN 13 => led <="0111101";WHEN 14 => led <="1001111";WHEN 15 => led <="0111000";

59

百度文库VIP限时优惠现在开通,立享6亿+VIP内容

立即获取

可编程逻辑器件实验EDA-七段数码管显示电路

实验四 七段数码管显示电路

一、实验目的

实现十六进制计数显示。

二、硬件需求

EDA/SOPC实验箱一台。

三、实验原理

七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。图2-13为共阳极数码管和共阴极数码管的内部结构图

软件是要硬件支持的     下面有个图参考

程序可能要调试一下      你是 高手这个应该没什么问题吧。。。

LED   BIT  P37       ;指示灯

TT0   EQU  09H

TT1   EQU  0AH

TT2   EQU  0BH        ;位定义

XIAN0 EQU  50H

XIAN1 EQU  51H

XIAN2 EQU  52H

XIAN3 EQU  53H        ;显存定义

FEN   EQU  54H        ;分存定义

SHI   EQU  55H        ;时存定义

ZHI   EQU  57H        ;按钮暂存内容定义

FLASH BIT  30H        ;闪烁标志位定义

SBIAO BIT  31H        ;定时器工作两种状态的标志位

KEY   BIT  32H        ;正常工作时屏蔽“加键”标志位

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP NIEDS0

ORG 0050H

MAIN:

MOV SP,#60H

MOV ZHI,#00   ;按钮初始值

MOV R7,#10

MOV R6,#2

MOV R5,#10

MOV R4,#2

MOV XIAN0,#0

MOV XIAN1,#0

MOV XIAN2,#0

MOV XIAN3,#0

MOV R0,#FEN

MOV FEN,#0

MOV SHI,#0

MOV TMOD,#01H

MOV TH0,#3CH

MOV TL0,#0B0H

SETB FLASH     ;开机显示不闪

SETB SBIAO     ;开机定时器正常工作

SETB LED

CLR KEY        ;初始屏蔽加键

SETB TR0

SETB ET0

SETB EA

NIEXQ:

LCALL DISP

LCALL KEYHAND

LJMP NIEXQ

NIEDS0:

PUSH ACC

PUSH PSW

JNB SBIAO,DSSS   ;判断是正常工作还是闪烁标志位取反

DJNZ R5,NIEOUT

MOV R5,#10

CPL LED          ;指示灯1S闪烁,因为是取反,所以要500MS取反一次

DJNZ R4,NIEOUT

MOV R4,#2

MOV A,FEN

INC A

MOV FEN,A

CJNE A,#60,NIEOUT

MOV FEN,#0

MOV A,SHI

INC A

MOV SHI,A

CJNE A,#24,NIEOUT

MOV SHI,#0

AJMP NIEOUT

DSSS:

DJNZ R7,NIEOUT

MOV R7,#10

CPL FLASH         ;进入调整状态,标志位取反,显示中判断

CPL LED           ;指示灯在调整时也闪烁

DJNZ R6,NIEOUT

MOV R6,#2

NIEOUT:

MOV TH0,#3CH

MOV TL0,#0B0H

POP PSW

POP ACC

RETI

DISP:

LCALL PAND        ;判断子程序,为了达到调整时闪烁

CLR  P33

SETB P32

SETB P31

SETB P30         ;直接对独立指定位CLR/SETB是为了不影响到P37指示灯的闪烁

MOV A,XIAN0

LCALL CHAB        ;查段码

CLR  P32

SETB P33

SETB P31

SETB P30         ;直接对独立指定位CLR/SETB是为了不影响到P37指示灯的闪烁

MOV A,XIAN1

LCALL CHAB        ;查段码

CLR  P31

SETB P32

SETB P33

SETB P30         ;直接对独立指定位CLR/SETB是为了不影响到P37指示灯的闪烁

MOV A,XIAN2

LCALL CHAB        ;查段码

CLR  P30

SETB P31

SETB P32

SETB P33         ;直接对独立指定位CLR/SETB是为了不影响到P37指示灯的闪烁

MOV A,XIAN3

LCALL CHAB        ;查段码

RET

CHAB:

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P1,A

LCALL DELAY

MOV P1,#0FFH

RET

PAND:                     ;判断是否闪烁???

MOV A,R0

CJNE A,#FEN,PPS

JNB FLASH,FFS

LCALL DIVDIV

RET

FFS:

MOV XIAN1,#10

MOV XIAN0,#10

RET

PPS:

JNB FLASH,SSS

LCALL DIVDIV

RET

SSS:

MOV XIAN2,#10

MOV XIAN3,#10

RET

DIVDIV:                    ;分``时分解

MOV A,FEN

MOV B,#10

DIV AB

MOV XIAN1,A

MOV XIAN0,B

MOV A,SHI

MOV B,#10

DIV AB

MOV XIAN3,A

MOV XIAN2,B

RET

KEYHAND:                   ;按键扫描子程序

LCALL KAP

JZ NOKEY

PUSH P1            ;暂存P1状态!!

LCALL DISP

POP  P1

LCALL KAP

JZ NOKEY

MOV A,P1

JNB ACC0,K1

JNB ACC1,K2

NOKEY:

RET

KAP:                       ;通用型KAP

MOV A,P1

ORL A,#0FCH

CPL A

RET

DENDAI:                    ;等待键d起

PUSH P1

LCALL DISP

POP  P1

LCALL KAP

JNZ DENDAI

RET

K1:

LCALL DENDAI

MOV A,ZHI

INC A

MOV ZHI,A

CJNE A,#1,KTF

CLR SBIAO          ;按第一次时开启定时器中FLASH标志位取反``

SETB KEY           ;取消屏蔽

RET

KTF:

CJNE A,#2,KKAI

MOV R0,#SHI        ;按第二次属调时

RET

KKAI:

CJNE A,#3,K1OUT

MOV ZHI,#0

MOV R0,#FEN        ;恢复初始状态``调分

SETB SBIAO         ;开启定时1S工作

SETB FLASH         ;判断PAND子程序中用到

CLR KEY            ;屏蔽K2键

K1OUT :

RET

K2:

JNB KEY,K2OUT      ;是否屏蔽

LCALL DENDAI

MOV A,R0

CJNE A,#FEN,KKS    ;是否调分

MOV A,FEN

INC A

MOV FEN,A

CJNE A,#60,K2OUT

MOV FEN,#0

RET

KKS:                       ;不是调分``一定是调时

MOV A,SHI

INC A

MOV SHI,A

CJNE A,#24,K2OUT

MOV SHI,#0

K2OUT:

RET

DELAY:

MOV TT1,#02

DEE1:

MOV TT2,#0FFH

DJNZ TT2,$

DJNZ TT1,DEE1

RET

TAB:

DB 0FH,1FH,2FH,3FH,4FH,5FH,6FH,7FH,8FH,9FH,0FFH

END

就是用计数器,240hz时,每一个1/240 产生一个时钟上升沿,这是你的基本时钟,用来计数,记到240时就赋值一次,这个值就是1hz的了,其他的同理,只是计数的个数不一样,10hz就计数24次,

16hz就计数15次,如果要得到26元计费控制,则要产生一个26hz的频率,240hz不能直接分频到26的,因为他们不是整数倍关系,要先进行倍频再分频,比如倍频13倍,再分频120倍就得到26hz了

追问

我已经研究到了。260HZ可以满足到。你是唯一一个回复这么准确。分给你

以上就是关于eda实验如何实现60进制计数器七段数码管的显示全部的内容,包括:eda实验如何实现60进制计数器七段数码管的显示、数字时钟kell 程序、eda 怎么产生一个固定频率的时钟信号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10117310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存