北邮数电实验双色点阵扫描显示控制器.docx
- 文档编号:29886880
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:15
- 大小:1.33MB
北邮数电实验双色点阵扫描显示控制器.docx
《北邮数电实验双色点阵扫描显示控制器.docx》由会员分享,可在线阅读,更多相关《北邮数电实验双色点阵扫描显示控制器.docx(15页珍藏版)》请在冰豆网上搜索。
北邮数电实验双色点阵扫描显示控制器
北京邮电大学
数字电路与逻辑设计实验报告
(实验5)
学院:
电子工程学院
专业:
电子信息科学与技术
实验5双色点阵扫描显示控制器
一、实验要求
1.用8×8点阵显示字符,每次显示一个字符,每秒切换一次,显示内容为“B”、“U”、“P”、“T”及姓名的第一个字母。
如张三显示的内容为“B”、“U”、“P”、“T”、“Z”、“S”。
2.为系统设置一个复位键,复位后重新从“B”开始循环显示。
要求使用按键复位。
二、实验设计思路
我们知道点阵的结构,当row轮流出0的时候,二极管阴极为低电平,这时候我们给到一个高电平在红灯或者绿灯的阳极的时候,就能驱使灯点亮。
这样我们可以基于“视觉暂留”的现象,快速刷新row灯,使得点阵能够快速点亮,这样就能显示一个完整的字,最后再利用一个模7计数器来实现每个字母之间的转换。
我们引入一个1000hz的时钟,并对其进行一个1000分频变成1hz的时钟。
之后再利用这个模7计数器来控制cor_l和cor_g和row来控制灯的颜色、每行灯亮时列的亮灯情况。
另外,我们需要一个模8计数器,后面再设计一个3-8线译码器,这样能够控制row的亮灯情况。
最后我们需要注意的是,由于row需要快速刷新,故我们需要用1000hz的时钟,而字符之间的转换的计数器要用1hz的时钟,来满足亮灯1s的条件。
我们还需要设计一个复位键,以便能做到按下按钮重新回到第一个字母的功能,这需要reset按下时,模7计数器的数字回到0。
这样把带防抖的复位键加进去即可。
最后顶层将这两个模块连接起来即可。
三、VHDL代码及注释
点阵部分:
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entitydianzhenis
port(clk:
instd_logic;
col_r:
outstd_logic_vector(7downto0);--红灯的控制显示
col_g:
outstd_logic_vector(7downto0);--绿灯的控制显示
row:
outstd_logic_vector(7downto0);--二极管阴极控制
reset:
instd_logic);
enddianzhen;
architectureaofdianzhenis
signalsel7:
std_logic_vector(2downto0);--模7计数器的信号
signalsel8:
std_logic_vector(2downto0);--模8计数器的信号
signalclk_add:
std_logic:
='0';--分频后的时钟begin
p1:
process(clk)--1000分频
variablec:
integerrange0to499:
=0;
begin
if(clk'eventandclk='1')then
ifc=499then
clk_add<=notclk_add;
c:
=0;
else
c:
=c+1;
endif;
endif;
endprocessp1;
p2:
process(clk)--模8计数器
begin
if(clk'eventandclk='1')then
sel8<=sel8+1;--加满自动重新归零
endif;
endprocessp2;
p3:
process(clk_add,reset)--模7计数器
begin
if(reset='1')then--当出现重置的信号为高电平时,计数器重置为000,这样就能回到字母B
sel7<="000";
elsif(CLK_add'EVENTANDCLK_add='1')then
if(sel7=O"6")then
sel7<=O"0";--模满7归零
elsesel7<=sel7+1;
endif;
endif;
endprocessp3;
p4:
process(sel7,sel8)—模7和模8共同作用,模8用来快速刷新row,模7用来控制哪个字母,每行对应相对的列点亮的情况,显示字母。
begin
casesel7is
whenO"0"=>casesel8is--字母B,运用循环嵌套,如7是显示B的最上面一行,0是显示最下面一行左下角灯为(0,0),右上角为(7,7),这样的方式点亮灯显示字符。
whenO"7"=>col_r<="00111110";col_g<="00000000";row<="01111111"
whenO"6"=>col_r<="01000110";col_g<="00000000";row<="10111111";
whenO"5"=>col_r<="01000110";col_g<="00000000";row<="11011111";
whenO"4"=>col_r<="00111110";col_g<="00000000";row<="11101111";
whenO"3"=>col_r<="01000110";col_g<="00000000";row<="11110111";
whenO"2"=>col_r<="01000110";col_g<="00000000";row<="11111011";
whenO"1"=>col_r<="01000110";col_g<="00000000";row<="11111101";
whenO"0"=>col_r<="00111110";col_g<="00000000";row<="11111110";
whenOTHERS=>col_r<="00111110";col_g<="00000000";row<="11111110";
endcase;
whenO"1"=>casesel8is--字母U
whenO"7"=>col_r<="00000000";col_g<="11000110";row<="01111111";
whenO"6"=>col_r<="00000000";col_g<="11000110";row<="10111111";
whenO"5"=>col_r<="00000000";col_g<="11000110";row<="11011111";
whenO"4"=>col_r<="00000000";col_g<="11000110";row<="11101111";
whenO"3"=>col_r<="00000000";col_g<="11000110";row<="11110111";
whenO"2"=>col_r<="00000000";col_g<="11000110";row<="11111011";
whenO"1"=>col_r<="00000000";col_g<="11111110";row<="11111101";
whenO"0"=>col_r<="00000000";col_g<="01111100";row<="11111110";
whenOTHERS=>col_r<="00000000";col_g<="01111100";row<="11111110";
endcase;
whenO"2"=>casesel8is--字母P
whenO"7"=>col_r<="00111110";col_g<="00000000";row<="01111111";
whenO"6"=>col_r<="01000110";col_g<="00000000";row<="10111111";
whenO"5"=>col_r<="01000110";col_g<="00000000";row<="11011111";
whenO"4"=>col_r<="01000110";col_g<="00000000";row<="11101111";
whenO"3"=>col_r<="00111110";col_g<="00000000";row<="11110111";
whenO"2"=>col_r<="00000110";col_g<="00000000";row<="11111011";
whenO"1"=>col_r<="00000110";col_g<="00000000";row<="11111101";
whenO"0"=>col_r<="00000110";col_g<="00000000";row<="11111110";
whenOTHERS=>col_r<="00000110";col_g<="00000000";row<="11111110";
endcase;
whenO"3"=>casesel8is--字母T
whenO"7"=>col_r<="00000000";col_g<="11111111";row<="01111111";
whenO"6"=>col_r<="00000000";col_g<="11111111";row<="10111111";
whenO"5"=>col_r<="00000000";col_g<="00011000";row<="11011111";
whenO"4"=>col_r<="00000000";col_g<="00011000";row<="11101111";
whenO"3"=>col_r<="00000000";col_g<="00011000";row<="11110111";
whenO"2"=>col_r<="00000000";col_g<="00011000";row<="11111011";
whenO"1"=>col_r<="00000000";col_g<="00011000";row<="11111101";
whenO"0"=>col_r<="00000000";col_g<="00011000";row<="11111110";
whenOTHERS=>col_r<="00000000";col_g<="00011000";row<="11111110";
endcase;
whenO"4"=>casesel8is--字母Z
whenO"7"=>col_r<="11111111";col_g<="00000000";row<="01111111";
whenO"6"=>col_r<="01000000";col_g<="00000000";row<="10111111";
whenO"5"=>col_r<="00100000";col_g<="00000000";row<="11011111";
whenO"4"=>col_r<="00010000";col_g<="00000000";row<="11101111";
whenO"3"=>col_r<="00001000";col_g<="00000000";row<="11110111";
whenO"2"=>col_r<="00000100";col_g<="00000000";row<="11111011";
whenO"1"=>col_r<="00000010";col_g<="00000000";row<="11111101";
whenO"0"=>col_r<="11111111";col_g<="00000000";row<="11111110";
whenOTHERS=>col_r<="11111111";col_g<="00000000";row<="11111110";
endcase;
whenO"5"=>casesel8is--字母Y
whenO"7"=>col_r<="00000000";col_g<="11000011";row<="01111111";
whenO"6"=>col_r<="00000000";col_g<="01100110";row<="10111111";
whenO"5"=>col_r<="00000000";col_g<="00111100";row<="11011111";
whenO"4"=>col_r<="00000000";col_g<="00011000";row<="11101111";
whenO"3"=>col_r<="00000000";col_g<="00011000";row<="11110111";
whenO"2"=>col_r<="00000000";col_g<="00011000";row<="11111011";
whenO"1"=>col_r<="00000000";col_g<="00011000";row<="11111101";
whenO"0"=>col_r<="00000000";col_g<="00011000";row<="11111110";
whenOTHERS=>col_r<="00000000";col_g<="00011000";row<="11111110";
endcase;
whenO"6"=>casesel8is--字母R
whenO"7"=>col_r<="00111110";col_g<="00000000";row<="01111111";
whenO"6"=>col_r<="01000110";col_g<="00000000";row<="10111111";
whenO"5"=>col_r<="01000110";col_g<="00000000";row<="11011111";
whenO"4"=>col_r<="00111110";col_g<="00000000";row<="11101111";
whenO"3"=>col_r<="01000110";col_g<="00000000";row<="11110111";
whenO"2"=>col_r<="10000110";col_g<="00000000";row<="11111011";
whenO"1"=>col_r<="10000110";col_g<="00000000";row<="11111101";
whenO"0"=>col_r<="00000000";col_g<="00000000";row<="11111110";
whenOTHERS=>col_r<="00000000";col_g<="00000000";row<="11111110";
endcase;
WHENOTHERS=>NULL;--其他状态
endcase;
endprocessp4;
enda;
第二部分:
防抖按钮。
这部分和之前的实验相仿。
直接套用即可。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYfangdouIS
PORT(clk:
INSTD_LOGIC;
reset:
INSTD_LOGIC;
resetn:
OUTSTD_LOGIC);
ENDfangdou;
ARCHITECTUREaOFfangdouIS
SIGNALresetmp1,resetmp2:
STD_LOGIC;
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENTANDclk='0')THEN
resetmp2<=resetmp1;
resetmp1<=reset;
ENDIF;
ENDPROCESS;
resetn<=clkANDresetmp1AND(NOTresetmp2);
ENDa;
之后,再进行组合连接。
四、仿真波形分析:
首先是看每个字母的时长以及复位键的功能。
可以看出来,每个字母时长是1s,并且红绿颜色交替,并且在3.0s处能看到按钮按下去之后会实现一个复位的功能(之后我们会进一步展开看,复位到了字母B)。
在运行一个周期后,还能够从头开始
接下来我们仔细看具体的字母显示
这是复位键处的字母。
我们首先看row,是循环出0,且row7是最上面的一行,row0是最下面的一行。
则可以看出来亮灯的情况为显示了B字母。
如下图。
这是复位键的字母显示。
可见是字母B的形状。
其他也如同这个,继续循环。
字母U
字母P
字母T
字母Z
字母Y
字母R
至此,就完成了BUPTZYR的波形。
由上述分析可知,我们完成了实验所要求的任务。
五、故障及问题分析:
1.遇到了一个信号收到两个上升沿的问题,模7计数器当时想用reset和clk两个上升沿控制,编译不通过。
因为遇到两个上升沿则不能正常工作。
解决办法是,将条件设置为reset=1,这样就解决问题。
2.理解快速刷新,如何刷新row给出低电平时控制相应的信号的高电平。
解决办法是利用嵌套case语句。
这样就完成了功能。
六、实验总结
通过这次实验,我理解了点阵功能,扫描显示控制器的工作原理,掌握了case语句嵌套使用方法,同时复习了分频器、计数器、防抖按钮等功能,为将来的实验打下了更好的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮数电 实验 点阵 扫描 显示 控制器