北邮数字电子电路综合实验LED点阵风扇的设计与实现.docx
- 文档编号:10418596
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:21
- 大小:1.10MB
北邮数字电子电路综合实验LED点阵风扇的设计与实现.docx
《北邮数字电子电路综合实验LED点阵风扇的设计与实现.docx》由会员分享,可在线阅读,更多相关《北邮数字电子电路综合实验LED点阵风扇的设计与实现.docx(21页珍藏版)》请在冰豆网上搜索。
北邮数字电子电路综合实验LED点阵风扇的设计与实现
数字电子电路综合实验
题目:
LED点阵风扇的设计与实现实验报告
学号:
姓名:
班级:
专业:
通信工程
学院:
信息与通信工程学院
指导老师:
2015年11月7日
LED点阵风扇的设计与实现
一、实验要求
基本要求:
1.用8×8点阵模拟风扇转动,并用双色点阵显示。
2.风扇转动方式包括四个点阵显示状态,并按顺序循环显示。
风扇转动速度根据环境温度分为4档,其中1档的四个显示状态之间的切换时间为2秒,2档为1秒,3档为0.5秒,4档为静止不动。
3.环境温度通过2个BTN按键设置,一个用来增加,一个用来减少,温度范围可设置范围为10℃~40℃,温度精度为1℃,并用两个数码管进行温度显示,风扇根据不同的温度自动采用不同的转动速度,其中20℃~24℃对应1档,25℃~29℃对应2档,30℃~40℃对应3档,10℃~19℃对应4档,用一个数码管显示档位。
4.定时模式:
在风扇不同转动速度下,可以通过按键切换进入定时模式。
定时时间可设置范围为20~59秒,采用2个数码管进行倒计时显示,当倒计时结束后,风扇状态保持静止不动。
5.设置开关键。
风扇开机初始状态为20℃、1档,并有不小于5秒的开机音乐,关机状态为点阵全灭。
提高要求:
1.设计LED风扇的其他工作模式。
2.利用实验板上的温度传感器代替按键直接获取温度数据,实现对LED风扇四档转速
的自动控制。
3.用数码管实时显示温度传感器的温度数据,精度为0.1℃。
4.自拟其他功能。
二、系统设计
1.设计思路
这次实验采用老师讲过的自顶向下的设计方法来完成设计。
为了实现电风扇的功能,将系统分成多个模块:
控制器模块:
通过按钮与开关输入开关机、温度、倒计时时间等信息,实现开机音乐、温度调整档位切换功能、倒计时功能等。
蜂鸣器模块:
通过蜂鸣器震动,使开机时播放不少于5s的音乐。
分频器模块:
分频模块把晶振(1000Hz)分成了500Hz,1000Hz,2000Hz传给控制器,供电风扇以不同档位工作。
LED点阵模块:
双色点阵部分按时钟周期对红灯、绿灯分别进行行扫描,以显示风扇的四个工作状态,并在四个状态间循环切换。
倒计时模式切换模块:
用SW按钮控制温度与倒计时工作模式的切换。
数码管显示模块:
通过6个共阴极数码管按时钟周期持续扫描,一位显示0,第二、三位显示时间,第四位显示档位,第五、六位显示温度。
防抖模块:
防止由于BTN按钮本身原因1次输入产生多个信号。
2.设计框图
三、波形图
1.蜂鸣器
通过开机键控制开关,开机后蜂鸣器响5s。
2.数码管
通过一定频率不断扫描,6个数码管均可以良好显示数字,第一位显示0,第二、三位显示时间,第四位显示档位,第五、六位显示温度。
3.分频器
4.点阵显示
四、源程序
1.防抖文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityfangdouIS
port(
clk:
instd_logic;
reset:
instd_logic;
resetn:
outstd_logic
);
ENDfangdou;
architecturebehaveoffangdouis
signalclk_tmp:
std_logic;
signalcnt:
integerrange0to199999;
signaltmp1,tmp2:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')then
ifcnt=199999then
cnt<=0;
clk_tmp<=notclk_tmp;
else
cnt<=cnt+1;
endif;
endif;
endprocess;
process(clk_tmp)
begin
if(clk_tmp'eventandclk_tmp='0')then
tmp2<=tmp1;tmp1<=key_in;
endif;
endprocess;
key_out<=clk_tmpandtmp1and(nottmp2);
endbehave;
2.电风扇
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydianfengshanis
port(
clk:
instd_logic;--时钟输入
clear:
instd_logic;--电风扇开关
colr,colg,row:
bufferstd_logic_vector(7downto0);--LED点阵显示
shu:
outstd_logic_vector(7downto0);--数码管
cat:
outstd_logic_vector(5downto0);--数码管行扫描
b1,b2:
instd_logic;--温度增减
b3,b4:
instd_logic;--时间增减
ton:
instd_logic;--时间模式开/关
feng:
outstd_logic--蜂鸣器
);
enddianfengshan;
architecturebehaveofdianfengshanis
signalclk1,clk2,clk3,clk4:
std_logic;--分频后的时钟信号
signaltup:
std_logic:
='0';--tup为‘1’表示倒计时结束
signalkind,dang:
integerrange0to3;--kind为风扇的四个状态,dang为模式
signalcnt:
integerrange0to7;--数码管管位显示
signaltemp:
integerrange10to40:
=20;--温度
signala1,a2,a3,a4,a5:
std_logic;--对应b1,b2,b3,b4,ton防抖后的输出
signalclock:
std_logic;--电风扇转动的时钟
signalt:
integerrange0to59:
=20;--时间
signalop:
std_logic;--open,时间模式开关
signalbeep:
std_logic;--蜂鸣器信号
componentfangdouis--引用防抖模块
port(
clk:
instd_logic;
reset:
instd_logic;
resetn:
outstd_logic
);
endcomponent;
begin
uo_1:
fangdouportmap(clk,b1,a1);
uo_2:
fangdouportmap(clk,b2,a2);
uo_3:
fangdouportmap(clk,b3,a3);
uo_4:
fangdouportmap(clk,b4,a4);
uo_5:
fangdouportmap(clk,ton,a5);
p1:
process(clk,clear)--分频器
variabletmp1:
integerrange0to999;
variabletmp2:
integerrange0to749;
variabletmp3:
integerrange0to499;
variabletmp4:
integerrange0to499;
begin
ifclear='0'then
tmp1:
=0;
tmp2:
=0;
tmp3:
=0;
tmp4:
=0;
elseifclk'eventandclk='1'then
iftmp1=999then
tmp1:
=0;clk1<=notclk1;
elsetmp1:
=tmp1+1;
endif;--对clk进行2000分频
iftmp2=749then
tmp2:
=0;clk2<=notclk2;
elsetmp2:
=tmp2+1;
endif;--对clk进行1500分频
iftmp3=499then
tmp3:
=0;clk3<=notclk3;
elsetmp3:
=tmp3+1;
endif;--对clk进行1000分频
iftmp4=499then
tmp4:
=0;clk4<=notclk4;
elsetmp4:
=tmp4+1;
endif;
endif;
endprocess;
p2:
process(clk)--控制LED点阵的行扫描
begin
ifclear='1'then--电风扇开关开着的时候
ifclk'eventandclk='0'then
ifcnt=7thencnt<=0;
elsecnt<=cnt+1;
endif;
endif;
casecntis
when0=>row<="01111111";--行扫描
when1=>row<="10111111";
when2=>row<="11011111";
when3=>row<="11101111";
when4=>row<="11110111";
when5=>row<="11111011";
when6=>row<="11111101";
when7=>row<="11111110";
endcase;
elserow<="11111111";
endif;
endprocess;
p3:
process(clk)--led显示
begin
ifclear='1'then
ifkind=0then--电风扇工作第一种状态
caserowis
when"01111111"=>colr<="10000000";colg<="00000001";
when"10111111"=>colr<="01000000";colg<="00000010";
when"11011111"=>colr<="00100000";colg<="00000100";
when"11101111"=>colr<="00010000";colg<="00001000";
when"11110111"=>colr<="00001000";colg<="00010000";
when"11111011"=>colr<="00000100";colg<="00100000";
when"11111101"=>colr<="00000010";colg<="01000000";
whenothers=>colr<="00000001";colg<="10000000";
endcase;
elsifkind=1then--电风扇工作第二种状态
caserowis
when"01111111"=>colr<="00010000";colg<="00000000";
when"10111111"=>colr<="00010000";colg<="00000000";
when"11011111"=>colr<="00010000";colg<="00000000";
when"11101111"=>colr<="00010000";colg<="00001111";
when"11110111"=>colr<="00001000";colg<="11110000";
when"11111011"=>colr<="00001000";colg<="00000000";
when"11111101"=>colr<="00001000";colg<="00000000";
whenothers=>colr<="00001000";colg<="00000000";
endcase;
elsifkind=2then--电风扇工作第三种状态
caserowis
when"01111111"=>colg<="10000000";colr<="00000001";
when"10111111"=>colg<="01000000";colr<="00000010";
when"11011111"=>colg<="00100000";colr<="00000100";
when"11101111"=>colg<="00010000";colr<="00001000";
when"11110111"=>colg<="00001000";colr<="00010000";
when"11111011"=>colg<="00000100";colr<="00100000";
when"11111101"=>colg<="00000010";colr<="01000000";
whenothers=>colg<="00000001";colr<="10000000";
endcase;
else--电风扇工作第四种状态
caserowis
when"01111111"=>colr<="00000000";colg<="00010000";
when"10111111"=>colr<="00000000";colg<="00010000";
when"11011111"=>colr<="00000000";colg<="00010000";
when"11101111"=>colr<="00001111";colg<="00010000";
when"11110111"=>colr<="11110000";colg<="00001000";
when"11111011"=>colr<="00000000";colg<="00001000";
when"11111101"=>colr<="00000000";colg<="00001000";
whenothers=>colr<="00000000";colg<="00001000";
endcase;
endif;
endif;
endprocess;
p4:
process(a1,a2,a3,a4,a5,clk)--温度控制模块
begin
ifclear='1'then
ifclk'eventandclk='0'then
ifa1='1'then--b1按键控制温度增加
iftemp<40then
temp<=temp+1;
endif;
elsifa2='1'then--b2按键控制温度减少
iftemp>10then
endif;
endif;
iftup<='0'then--倒计时没结束时
iftemp>9andtemp<20then--第4档
dang<=3;clock<='0';
elsiftemp>19andtemp<25then--第1档
dang<=0;clock<=clk1;
elsiftemp>24andtemp<30then--第2档
dang<=1;clock<=clk2;
elsiftemp>29andtemp<41then--第3档,
dang<=2;clock<=clk3;
elsetemp<=temp;
endif;
elsiftup<='1'then
clock<='0';--clock置0,风扇静止
endif;
endif;
elsetemp<=20;clock<=clk1;dang<=0;
endif;
endprocess;
p5:
process(clock)--风扇四种状态的切换
begin
ifclear='1'then
ifclock'eventandclock='1'then
ifkind=3then--kind在0到3之间循环切换
kind<=0;
else
kind<=kind+1;
endif;
endif;
endif;
endprocess;
p6:
process(temp,t)--数码管显示
variablec1,c2,c3,c4,c5,shu1:
integerrange0to9;
variabletmp:
integerrange0to5;
begin
ifclear='1'then
c1:
=temprem10;--c1显示温度的个位数
c2:
=temp/10;--c2显示温度的十位数
c3:
=dang+1;--c3显示档位,即dang+1
c4:
=trem10;--c4显示时间的个位数
c5:
=t/10;--c5显示时间的十位数
ifclk'eventandclk='1'then--数码管扫描
iftmp=5then
tmp:
=0;
elsetmp:
=tmp+1;
endif;
endif;
casetmpis
when0=>cat<="111110";shu1:
=c1;
when1=>cat<="111101";shu1:
=c2;
when2=>cat<="111011";shu1:
=c3;
when3=>cat<="110111";shu1:
=c4;
when4=>cat<="101111";shu1:
=c5;
when5=>cat<="011111";shu1:
=0;
endcase;
caseshu1is--数码管对10个数的显示
when0=>shu<="11111100";
when1=>shu<="01100000";
when2=>shu<="11011010";
when3=>shu<="11110010";
when4=>shu<="01100110";
when5=>shu<="10110110";
when6=>shu<="10111110";
when7=>shu<="11100000";
when8=>shu<="11111110";
when9=>shu<="11110110";
endcase;
elsecat<="111111";
endif;
endprocess;
p7:
process(a3,a4,clk4,op)--时间控制模块
variabletmp:
integerrange0to999;
begin
ifclear='1'then
ifclk'eventandclk='0'then
ifop='0'then
ifa3='1'then--b3按键增加时间
ift<59then
t<=t+1;
endif;
elsifa4='1'then--b4按键减少时间
ift>20then
t<=t-1;
endif;
endif;
elsifop='1'then
iftmp=999thentmp:
=0;
ift>0then
t<=t-1;
elsift=0then
t<=0;tup<='1';--t=0,倒计时结束
endif;
elsetmp:
=tmp+1;
endif;
endif;
endif;
elset<=20;--总开关关闭后,对时间进行重置
endif;
endprocess;
p8:
process(a5)--b5按键按下之后更改倒计时模式
begin
ifclear='1'then
ifa5'eventanda5='1'then
op<=notop;endif;
elseop<='0';
endif;
endprocess;
p9:
process(clk,clk4)--蜂鸣器模块,开机音乐
variablef:
integerrange0to999;
variablea:
integerrange0to5;--开机音乐5秒钟
variableb:
integerrange0to2;
variablec:
integerrange0to3;
variabled:
integerrange0to4;
variablee:
integerrange0to1;
begin
ifclear='1'then
ifclk'eventandclk='1'then
iff=999thenf:
=0;
ifa=5thena:
=5;
elsea:
=a+1;
endif;
elsef:
=f+1;
endif;
ifb=2thenb:
=0;
elseb:
=b+1;
endif;
ifc=3thenc:
=0;
elsec:
=c+1;
endif;
ifd=4thend:
=0;
elsed:
=d+1;
endif;
ife=1thene:
=0;
elsee:
=e+1;
endif;
ifa=5thenbeep<='0';--5秒后,音乐停止
elsifa=4thenbeep<=notbeep;
elsifa=3thenifb=2thenbeep<=notbeep;endif;
elsifa=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子电路 综合 实验 LED 点阵 风扇 设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)