VHDL花样彩灯实验报告.docx
- 文档编号:8707266
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:9
- 大小:79.01KB
VHDL花样彩灯实验报告.docx
《VHDL花样彩灯实验报告.docx》由会员分享,可在线阅读,更多相关《VHDL花样彩灯实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
VHDL花样彩灯实验报告
可编程逻辑器件应用
项
目
报
告
书
项目名称:
花样彩灯
指导老师:
龚兰芳
姓名:
林晓新
学号:
100212126
班级:
10电子1班
广东水利电力职业技术学院
一、设计要求--------------------------------------------------------------------------------
二、设计目的--------------------------------------------------------------------------------
三、设计方案--------------------------------------------------------------------------------
四、设计程序---------------------------------------------------------------------------------
五、管脚分配---------------------------------------------------------------------------------
六、硬件下载实现现象描述------------------------------------------
七、体会、对设计工作的总结与展-------------------------------------------
一、设计要求:
要求设计一个8路彩灯控制器,能控制8路彩灯按照两种节拍、三种花型循环变化。
两种节拍分别为0.25s和0.5s。
三种花型分别是:
18路彩灯从左至右按次序渐亮,全亮后逆次序渐灭。
2从中间到两边对称的渐亮,全亮后仍由中间向两边逐次渐灭。
38路彩灯分成两半,从左至右顺次渐亮,全亮后则全灭。
二、设计方案:
(1)、采用状态机的方式,用点阵在硬件上实现各种花形彩灯,并使用复位键
(2)、用0.25s和0.5s两种频率的选择,并采用按键控制输出
(3)、对于点阵的扫描是采用了1s
三、程序语言:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
USEIEEE.std_logic_ARITH.ALL;
USEIEEE.std_logic_UNSIGNED.ALL;
----------------------------------------------------
ENTITYcaidengIS
port
(
clk,rst:
INstd_logic;---------------12--------------
aj:
instd_logic;-------------频率选择30
Light:
outstd_logic_vector(7downto0);------点阵列-----(82-73)
hang:
outstd_logic_vector(7downto0)-------------(90-83)
);
endcaideng;
architectureoneofcaidengis
typestatesis(s0,s1,s2,s3,s4);------表示状态------
signalstate:
states;
signalclk_hz,clk_1s:
std_logic:
='0';
signalcnt1:
std_logic_vector(3downto0):
="0000";
signalcnt2:
std_logic_vector(2downto0):
="000";
signalcnt3:
std_logic_vector(2downto0):
="000";
signalcnt4:
std_logic_vector(2downto0):
="000";
signalcnt5:
std_logic_vector(3downto0):
="0000";
BEGIN
hang<="11111111";
--------------------频率选择-----------------
process(clk)
variablecnt1:
integerrange0to6250000;------------4hz即0.25s
variablecnt2:
integerrange0to12500000;------------2hz即0.5s
begin
ifclk'eventandclk='1'then
caseajis--------------------拨码按键控制2种频率的输出
when'0'=>
ifcnt1=6250000then
cnt1:
=0;
clk_hz<=notclk_hz;
else
cnt1:
=cnt1+1;
endif;
when'1'=>
ifcnt2=12500000then
cnt2:
=0;
clk_hz<=notclk_hz;
else
cnt2:
=cnt2+1;
endif;
whenothers=>null;
endcase;
endif;
endprocess;
---------------------------------------------------------
process(clk)
variablecnt1:
integerrange0to20000;
variablecnt2:
integerrange0to10000;
begin
ifclk'eventandclk='1'then
ifcnt1=20000then
cnt1:
=0;
ifcnt2=10000then
cnt2:
=0;
clk_1s<=notclk_1s;
else
cnt2:
=cnt2+1;
endif;
else
cnt1:
=cnt1+1;
endif;
endif;
endprocess;
process(rst,clk_hz)
begin
if(rst='0')then
state<=s0;
elsif(clk_1s'EVENTANDclk_1s='1')then
casestateis
whens0=>state<=s1;
whens1=>state<=s2;
whens2=>state<=s3;
whens3=>state<=s4;
whens4=>state<=s0;
endcase;
endif;
endprocess;
----------------------------------------------------------
process(state,clk_hz)
begin
ifrst='0'then
light<="00000000";
else
if(clk_hz'EVENTANDclk_hz='1')then
casestateis
whens0=>
ifcnt1="1111"then
cnt1<="0000";
else
cnt1<=cnt1+1;
endif;
casecnt1is
when"0000"=>light<="01111111";
when"0001"=>light<="00111111";
when"0010"=>light<="00011111";
when"0011"=>light<="00001111";
when"0100"=>light<="00000111";
when"0101"=>light<="00000011";
when"0110"=>light<="00000001";
when"0111"=>light<="00000000";
when"1000"=>light<="00000000";
when"1001"=>light<="00000001";
when"1010"=>light<="00000011";
when"1011"=>light<="00000111";
when"1100"=>light<="00001111";
when"1101"=>light<="00011111";
when"1110"=>light<="00111111";
whenothers=>light<="01111111";
endcase;
whens1=>
ifcnt2="111"then
cnt2<="000";
elsecnt2<=cnt2+1;
endif;
casecnt2is
when"000"=>light<="11100111";
when"001"=>light<="11000011";
when"010"=>light<="10000001";
when"011"=>light<="00000000";
when"100"=>light<="00000000";
when"101"=>light<="10000001";
when"110"=>light<="11000011";
whenothers=>light<="11100111";
endcase;
whens2=>
ifcnt3="111"then
cnt3<="000";
elsecnt3<=cnt3+1;
endif;
casecnt3is
when"000"=>light<="01110111";
when"001"=>light<="00110011";
when"010"=>light<="00010001";
when"011"=>light<="00000000";
when"100"=>light<="10000001";
when"101"=>light<="11000011";
when"110"=>light<="11100111";
when"111"=>light<="11111111";
whenothers=>light<="00000000";
endcase;
whens3=>
ifcnt4="100"then
cnt4<="000";
elsecnt4<=cnt4+1;
endif;
casecnt4is
when"000"=>light<="01110111";
when"001"=>light<="00110011";
when"010"=>light<="00010001";
when"011"=>light<="00000000";
when"100"=>light<="11111111";
whenothers=>light<="00000000";
endcase;
whens4=>
ifcnt5="1111"then
cnt5<="0000";
elsecnt5<=cnt5+1;
endif;
casecnt5is
when"0000"=>light<="10000000";
when"0001"=>light<="01000000";
when"0010"=>light<="00100000";
when"0011"=>light<="00010000";
when"0100"=>light<="00001000";
when"0101"=>light<="00000100";
when"0110"=>light<="00000010";
when"0111"=>light<="00000100";
when"1000"=>light<="00001000";
when"1001"=>light<="00010000";
when"1010"=>light<="00100000";
when"1011"=>light<="01000000";
when"1100"=>light<="10000000";
whenothers=>light<="00000000";
endcase;
endcase;
endif;
endif;
endprocess;
endone;
四、管脚分配
五、硬件下载实现现象描述
硬件上的实现是有两种频率,分别是0.25s和0.5s,总共有5种花形——
(1)点阵从左至右按次序渐亮,全亮后逆次序渐灭;
(2)从中间到两边对称的渐亮,全亮后仍由中间向两边逐次渐灭;
(3)8路彩灯分成两半,从左至右顺次渐亮,全亮后则全灭;
(4)分成两半,从左至右顺次渐亮,然后从右至左逆次渐灭;
六:
体会、对设计工作的总结及展望
这次的花样彩灯,让我学会了使用状态机编程,清楚了状态机编程的特点,同时对于点阵的了解也更进一步了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 花样 彩灯 实验 报告