最新8个led循环显示计数器新文档格式.docx
- 文档编号:21974896
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:223.44KB
最新8个led循环显示计数器新文档格式.docx
《最新8个led循环显示计数器新文档格式.docx》由会员分享,可在线阅读,更多相关《最新8个led循环显示计数器新文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
第4天
设计VHDL语言程序
第5~9天
在实验装置上进行硬件测试,对VHDL语言程序进行必要的修正,并进行演示
第10天
编写设计说明书
教研室
意见
年月日
系(部)主管领导意见
长沙学院课程设计鉴定表
姓名
学号
专业
电气工程及其自动化
班级
2
设计题目
指导教师
指导教师意见:
评定等级:
教师签名:
日期:
答辩小组意见:
答辩小组长签名:
日期:
教研室意见:
教研室主任签名:
系(部)意见:
系主任签名:
日期:
说明
课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;
一、设计任务
设计一个8个LED循环显示,同时数码管也显示LED亮的次数。
二、设计要求
三、设计原理
首先,要设计一个8个led灯循环显示的计数器,重要的设计部分在于让led灯循环显示,同时在显示的同时数码管的数加1。
即为要让led灯亮的同时,数码管上面的数字加1。
因此,需要在同一个脉冲下完成计数器加1,led灯循环亮一位。
由于系统给定的时钟是50Mhz,而我们可视的频率为24hz内,很显然数码管和led灯不能正常工作,这就涉及到要将50mhz频率分频,将频率变小,使计数器和led灯能正常工作;
其次,led灯要实现循环显示,即第一个灯亮之后,在出现一个上升沿脉冲后,第二个灯亮,第一个灯灭,来一个脉冲移动一个,并实现循环,为了实现循环,设计思路是讲来一次脉冲将最高位补到最低位,次最高位变成最高位。
级设计一个移位寄存器,准确的说是循环移位寄存器。
再者,由于数码管要求是动态显示,显然还要分出一个置位工作扫描频率,由于人的视觉暂留,频率应该大于24hz,为了数码管显示效果,我分出了1000hz的频率来扫描8位数码管的工作。
最后,分频是为了将50mhz的频率减小,即在50mhz(clk)出现n个上升沿之前另一个clk1不翻转,而在n个上升沿时翻转,在2n之前一直保持翻转后的状态,到2n时,计数器清零,同时再实现翻转,这样就能做出任意较小的频率实现设计。
四、设计步骤
1)设计分频计数器
首先设计分频计数器,由于要有一个数码管置位工作扫描频率(1000HZ),还要有一个实现计数个和led灯循环显示的频率,即分频要分出两个不同的频率,其中(扫描分频)程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk0:
instd_logic;
y:
inoutstd_logic);
endfenpin;
architectureoneoffenpinis
signalf:
std_logic;
begin
p_reg:
process(clk0)---1Hz分频
variablecnt:
integerrange1to50000;
begin
ifclk0'
eventandclk0='
1'
then
ifcnt=25000then
cnt:
=1;
f<
='
;
else
=cnt+1;
0'
endif;
endif;
endprocessp_reg;
p_div:
process(f)
variablecnt2:
iff'
eventandf='
cnt2:
=notcnt2;
ifcnt2='
y<
else
endprocessp_div;
end;
在进程中,clk0为原始频率50mhz,进程P_REG为分频,进程P_DIV为整形,最后通过输出Y端口,输出为1000HZ;
仿真波形如图示
2)设计数控分频
下面即为计数频率(10HZ),CLK即为上面的输出Y频率1000HZ,而CLK经过数控分频后即为10HZ的频
率,CLK1就可作为LED灯的循环显示频率。
(数控分频)程序如下:
H1:
PROCESS(CLK,EN)
BEGIN
IFEN='
ANDZT='
THEN
ifCLK'
eventandCLK='
then
IFF="
11111111"
THENF<
=DIN8;
D<
ELSEF<
=F+1;
ENDIF;
ENDIF;
ENDPROCESSH1;
H2:
PROCESS(D)
VARIABLECL:
STD_LOGIC;
IFD'
EVENTANDD='
THEN
CL:
=NOTCL;
IFCL='
THENCLK1<
ELSECLK1<
ENDPROCESSH2;
仿真波形图如下
通过DIN8置数,来再次对1000HZ的频率进行任意分频,CLK为频率,CLK1频率为数控分频之后的10HZ的时钟。
3)LED灯循环设计
接下来就是,在频率分出来后,设计led灯的循环显示了,碍于我们肉眼的可视能力,我只用频率小一些的,led灯循环显示的程序如下:
JA:
PROCESS(CLK1,RES,EN)
begin
IFRES='
THENA<
LEDD<
=(OTHERS=>
'
);
ELSifCLK1'
eventandCLK1='
then
IFA='
THENA<
="
11111110"
ELSELEDD(0)<
=LEDD(7);
LEDD(7DOWNTO1)<
=LEDD(6DOWNTO0);
REG8(7DOWNTO0)<
=LEDD(7DOWNTO0);
endprocessJA;
仿真波形如下示
通过波形可以很清楚的看到,len灯移动清楚明了,接下来就是其他的了。
4)数码管扫频
JB:
process(clk)
ifclk'
eventandclk='
ifwei=7thenwei<
000"
elsewei<
=wei+1;
endprocess;
JC:
process(wei)
caseweiis
WHEN"
=>
LED8<
00000001"
001"
00000010"
010"
00000100"
011"
00001000"
100"
00010000"
101"
00100000"
110"
01000000"
111"
10000000"
whenothers=>
null;
ENDCASE;
ENDPROCESSJC;
仿真波形如下
在理论上,频率足够大时,实现动态扫频数码管,在波形中还是能勉强看得见的,虽然不是很好,当然在后面的整体波形中,能很好的看出来。
5)8个数码管计数
JD:
PROCESS(RES,EN,CLK1)
variableaa0,aa1,aa2,aa3:
std_logic_vector(3downto0);
variableaa4,aa5,aa6,aa7:
THEN
aa0:
aa1:
aa2:
aa3:
aa4:
aa5:
aa6:
aa7:
ifaa0<
=9then
=aa0+1;
ifaa0>
9then
ifaa1=9andaa2=9andaa3=9andaa4=9andaa5=9andaa6=9andaa7=9then
=(others=>
aa4:
elsenull;
9then
ifaa1=9andaa2=9andaa3=9andaa4=9andaa5=9andaa6=9then
aa7:
=aa7+1;
aa2:
aa6:
elsenull;
ifaa1=9andaa2=9andaa3=9andaa4=9andaa5=9then
=aa6+1;
aa0:
aa1:
aa3:
aa5:
elsenull;
ifaa1=9andaa2=9andaa3=9andaa4=9then
=aa5+1;
ifaa1=9andaa2=9andaa3=9then
=aa4+1;
ifaa1=9andaa2=9then
=aa3+1;
ifaa1=9then
=aa2+1;
elseaa1:
=aa1+1;
cc0<
=aa0;
cc1<
=aa1;
cc2<
=aa2;
cc3<
=aa3;
cc4<
=aa4;
cc5<
=aa5;
cc6<
=aa6;
cc7<
=aa7;
endprocessJD;
由于有8个数码管,程序太长,再就是每个数码管的显示都一样,就不必要逐一赘述了,就列一个好了。
就列第一个数码管的显示情况,至于剩下的7个数码管只是满足条件不一样而已,这个在后面总程序中在展示。
1号数码管显示部分例程
ifwei="
casecc0is
when"
0000"
=>
leds<
1000000"
when"
0001"
1111001"
0010"
0100100"
0011"
0110000"
0100"
0011001"
0101"
0010010"
0110"
0000010"
0111"
1111000"
1000"
0000000"
1001"
0010000"
null;
endcase;
仿真波形
在图中leds即为数码管的段,有图可以很好的显示,在不同数码管上显示数值。
当然,此图是为了操作简便,只显示了部分数值结果。
下面呢,进行引脚分配,引脚很多啊,分配起来很麻烦,繁琐。
一定的细心。
6)引脚分配
在上图中,可见引脚之多,共25各引脚,有一个暂停键ZT没能显示出来,为了美观,那一个引脚就不在截图了,再次说明就是了。
五、设计流图
10hz为数码管计数
10hz时钟为led灯计数时钟
1000hz时钟分频为10hz时钟
50Mhz时钟分频为1000hz
1000hz时钟对数码管扫频
在实验板上进行验证,让老师打分
为程序分配端口引脚
八个数码管的数值显示情况
10hz下数码管显示数值条件
六、程序语言
useIEEE.std_logic_1164.all;
entitykcsis
port(CLKD:
instd_logic;
RES:
INSTD_LOGIC;
--复位端
EN:
--使能端
DIN8:
INSTD_LOGIC_VECTOR(7DOWNTO0);
--置数任意分频
REG8:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
--发光二极管
led8:
outstd_logic_vector(7downto0);
--数码管选择
leds:
outstd_logic_vector(6downto0));
--数码段选择
endkcs;
architectureoneofkcsis
componentfenpin
port(CLKK:
--声明500hz信号
Y:
outstd_logic);
endcomponent;
signalwei:
std_logic_vector(2downto0);
signalcc0,cc1,cc2,cc3,cc4:
signalcc5,cc6,cc7:
SIGNALF:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLEDD:
signalCLK1,D,A,CLK:
U1:
fenpinportmap(CLKK=>
CLKD,Y=>
CLK);
THENF<
THENCL:
THENCLK1<
THEN
endprocessJA;
process(clk)--数码管移动
ifclk'
ifwei=7thenwei<
elsewei<
caseweiis
WHEN"
Variableaa0,aa1,aa2,aa3:
variableaa4,aa5,aa6,aa7:
IFRES='
ELSifCLK1'
ifaa0<
ifaa0>
ifaa1=9andaa2=9andaa3=9andaa4=9andaa5=9andaa6=9andaa7=9then
=(oth
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 led 循环 显示 计数器