当前位置:文档之家› 北邮·数电综合实验·双色点阵显示控制器的设计与实现

北邮·数电综合实验·双色点阵显示控制器的设计与实现

数字电路与逻辑设计实验报告

题目:双色点阵显示控制器的设计与实现

班级:

学号:

姓名:

1 实验要求

1.1基本要求:

1)固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn按钮实现亮度调

节,亮度变化视觉效果要尽量明显。

2) 用从红到绿8级渐变色显示一个固定汉字或图形。

3) 分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。

4) 显示的图形或汉字要尽量饱满美观。

1.2提高要求:

1) 滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。 2) 自拟其它功能。

2系统设计

2.1设计思路

本实验采用自顶向下设计法:从整个系统功能出发,按一定原则将系统划分为若干子系统,再将每个子系统分为若干功能模块,然后实现所要求的的功能。总体是通过分频、按键控制、扫描控制等模块实现上述功能,通过占空比来改变色彩,实现八级渐变色,通过扫描频率的改变和信号的占空比实现亮度的调节,通过行扫描和列扫描的不同实现左右滚动显示和上下滚动显示。由于按键动作的时刻和按下的时间长短是随机的,并且存在由开关簧片反弹导致的电平抖动,所以还要为每个按键开关设置一个消抖和同步电路,这样才能保证按键的准确性。

2.2总体设计框图

1)总体结构框图

2)ASM 图

选择汉字或图形 选择显示模式 选择亮度

显示不同的文字或者图案

no yes yes no yes no yes

no

如图所示:开始由按键选择模式,是单个渐变色显示,还是循环显示,还是可改变亮度显示,在执行的同时检查是否按下reset 键,如果reset 键被按下,那么将对系统进行复位。

选择图形或文

选择显示方式 case1?

case2?

csae3 左右滚动显示

上下滚动显示

四种颜色自动变换 循环显示

点阵屏显示

循环显示? 调亮显示?

固定红色 调节亮度 从红到绿八

级变色 开始

2.3模块划分

逻辑划分框图

CP

如图所示:系统主要分成3个模块:分频模块针对不同的模式进行分频,扫描控制模块通过行扫描或者列扫描来控制循环显示的方式,点阵显示模块主要是响应不同模式下的点阵显示方式及图形。

分频模块 扫描控制模块

点阵显示模块

分频电路

按键选择显示模式:循环,滚动 按键调节亮度 按键选择所要选

择的汉字或图形

按键消抖动同步电路

控制器

行控制扫描电路

列控制扫描电路

点阵显示屏

3 仿真波形及其分析

如图所示当摁下clear键时各信号复位,当模式按键按下并计数时,信号输出对应各个模式,桐乡当亮度模式按下时,信号的占空比改变。

4源程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity dianzhen is

port(clk_in ,clear,btn1,btn2,btn3: in std_logic; --定义时钟、复位、按键1、2、3 colred ,colgreen ,rowout : out std_logic_vector(7 downto 0); --列信号行信号输出

bout0,bout1,bout2,bout3: out std-logic --防抖动信号

);

end dianzhen;

architecture behave of dianzhen is

signal stared ,stagre : std_logic_vector(3 downto 0);

signal cred ,row ,cgreen,redtm,gretm : std_logic_vector(7 downto 0);

signal smode,sligc,scc : std_logic_vector(1 downto 0);

signal zred ,zgreen : std_logic_vector(2 downto 0);

signal stm : std_logic_vector(5 downto 0);

signal cnt :integer range 0 to 799999;

signal xtx :integer range 0 to 99999;

signal gun :integer range 0 to 1023999999;

signal cnt0,cnt1,cnt2,cnt3: integer range 0 TO 7;

signal data0,data1,data2,data3: std_logic;

begin

process(clk_in,btn1) --brn1键防抖动

begin if(clk_in'event and clk_in = '0') then

if(data0 /= btn1) then

cnt0 <= cnt0 + 1;

else cnt0 <= 0;

end if;

if cnt0 >= 5 then

data0 <= btn1;

cnt0 <= 0;

end if;

end if;

bout0 <= data0;

end process;

process(clk_in,btn2) --btn2键防抖动begin if (clk_in'event and clk_in = '0') then

if(data1 /= btn2) THEN

cnt1 <= cnt1 + 1;

else cnt1 <= 1;

end if;

if cnt1 >= 5 then

data1 <= btn2;

cnt1 <= 1;

end if ;

end if ;

bout1 <= data1;

end process;

process(clk_in,btn3) --button2 --btn3键防抖动begin if (clk_in'event and clk_in = '0') then

if(data2 /= btn3) then

cnt2 <= cnt2 + 1;

else cnt2 <= 0;

end if;

if cnt2 >= 5 then

data2 <= btn3;

cnt2 <= 0;

end if;

end if;

bout2 <= data2;

end process;

p1:process(clk_in,btn1,btn2,btn3,clear,stared,stagre,zred,zgreen,cnt,gun,xtx) --分频

begin

if clear='1' then --复位模式smode<="00";

sligc<="00";

scc<="00";

else

if (btn1'event and btn1='1' )then --模式选择、亮度选择、循环选择

smode<=smode+1;

end if;

if (btn2'event and btn2='1') then

sligc<=sligc+1;

end if;

if (btn3'event and btn3='1') then

scc<=scc+1;

end if;

end if;

if (clk_in'event and clk_in='1') then --模式选择分频器

if cnt=99999 then

cnt<=cnt+1;

row<="11111110";

elsif cnt=199999 then

cnt<=cnt+1;

row<="11111101";

elsif cnt=299999 then

cnt<=cnt+1;

row<="11111011";

elsif cnt=399999 then

cnt<=cnt+1;

row<="11110111";

elsif cnt=499999 then

cnt<=cnt+1;

row<="11101111";

elsif cnt=599999 then

cnt<=cnt+1;

row<="11011111";

elsif cnt=699999 then

cnt<=cnt+1;

row<="10111111";

elsif cnt=799999 then

cnt<=cnt+1;

row<="01111111";

else cnt<=cnt+1;

end if;

if xtx=12499 then --亮度选择分频器xtx<=xtx+1;

zred<="000";

zgreen<="000";

elsif xtx=24999 then

xtx<=xtx+1;

zred<="001";

zgreen<="001";

elsif xtx=37499 then

xtx<=xtx+1;

zred<="010";

zgreen<="010";

elsif xtx=49999 then

xtx<=xtx+1;

zred<="011";

zgreen<="011";

elsif xtx=62499 then

xtx<=xtx+1;

zred<="100";

zgreen<="100";

elsif xtx=74999 then

xtx<=xtx+1;

zred<="101";

zgreen<="101";

elsif xtx=87499 then

xtx<=xtx+1;

zred<="110";

zgreen<="110";

elsif xtx=99999 then

xtx<=xtx+1;

zred<="111";

zgreen<="111";

else xtx<=xtx+1;

end if;

if gun=31999999 then --扫描分频器gun<=gun+1;

stm<="000001";

elsif gun=63999999 then

gun<=gun+1;

stm<="000000";

elsif gun=95999999 then

gun<=gun+1;

stm<="000010";

elsif gun=127999999 then

gun<=gun+1;

stm<="000000";

elsif gun=159999999 then

gun<=gun+1;

stm<="000011";

elsif gun=191999999 then

gun<=gun+1;

stm<="000000";

elsif gun=223999999 then

gun<=gun+1;

stm<="000100";

elsif gun=255999999 then

gun<=gun+1;

stm<="000000";

elsif gun=287999999 then

gun<=gun+1;

stm<="000101";

elsif gun=319999999 then

gun<=gun+1;

stm<="000000";

elsif gun=351999999 then

gun<=gun+1;

stm<="000110";

elsif gun=383999999 then

gun<=gun+1;

stm<="000000";

elsif gun=415999999 then

gun<=gun+1;

stm<="000111";

elsif gun=447999999 then gun<=gun+1;

stm<="000000";

elsif gun=479999999 then gun<=gun+1;

stm<="001000";

elsif gun=511999999 then gun<=gun+1;

stm<="000000";

elsif gun=543999999 then gun<=gun+1;

stm<="001001";

elsif gun=575999999 then gun<=gun+1;

stm<="000000";

elsif gun=607999999 then gun<=gun+1;

stm<="001010";

elsif gun=639999999 then gun<=gun+1;

stm<="000000";

elsif gun=671999999 then gun<=gun+1;

stm<="001011";

elsif gun=703999999 then gun<=gun+1;

stm<="000000";

elsif gun=735999999 then gun<=gun+1;

stm<="001100";

elsif gun=767999999 then gun<=gun+1;

stm<="000000";

elsif gun=799999999 then gun<=gun+1;

stm<="001101";

elsif gun=831999999 then gun<=gun+1;

stm<="000000";

elsif gun=863999999 then gun<=gun+1;

stm<="001110";

elsif gun=895999999 then

gun<=gun+1;

stm<="000000";

elsif gun=927999999 then

gun<=gun+1;

stm<="001111";

elsif gun=959999999 then

gun<=gun+1;

stm<="000000";

elsif gun=991999999 then

gun<=gun+1;

stm<="010000";

elsif gun=1023999999 then

gun<=gun+1;

stm<="000000";

end if;

end if;

case stared is --红色信号控制when "0000" =>redtm<="00000000";

when "0001" =>

case zred is

when "000"=>redtm<="11111111";

when others=>redtm<="00000000";

end case;

when "0010"=>

case zred is

when "000"=>redtm<="11111111";

when "001"=>redtm<="11111111";

when others=>redtm<="00000000";

end case;

when "0011"=>

case zred is

when "000"=>redtm<="11111111";

when "001"=>redtm<="11111111";

when "010"=>redtm<="11111111";

when others=>redtm<="00000000";

end case;

when "0100"=>

case zred is

when "000"=>redtm<="11111111";

when "001"=>redtm<="11111111";

when "010"=>redtm<="11111111";

when "011"=>redtm<="11111111";

when others=>redtm<="00000000";

end case;

when "0101"=>

case zred is

when "111"=>redtm<="00000000";

when "110"=>redtm<="00000000";

when "101"=>redtm<="00000000";

when others=>redtm<="11111111";

end case;

when "0110"=>

case zred is

when "111"=>redtm<="00000000";

when "110"=>redtm<="00000000";

when others=>redtm<="11111111";

end case;

when "0111"=>

case zred is

when "111"=>redtm<="00000000";

when others=>redtm<="11111111";

end case;

when "1000"=>redtm<="11111111";

when others =>redtm<="11111111";

end case;

case stagre is --绿色信号控制when "0000" =>gretm<="00000000";

when "0001" =>

case zgreen is

when "000"=>gretm<="11111111";

when others=>gretm<="00000000";

end case;

when "0010"=>

case zgreen is

when "000"=>gretm<="11111111";

when "001"=>gretm<="11111111";

when others=>gretm<="00000000";

end case;

when "0011"=>

case zgreen is

when "000"=>gretm<="11111111";

when "001"=>gretm<="11111111";

when "010"=>gretm<="11111111";

when others=>gretm<="00000000";

end case;

when "0100"=>

case zgreen is

when "000"=>gretm<="11111111";

when "001"=>gretm<="11111111";

when "010"=>gretm<="11111111";

when "011"=>gretm<="11111111";

when others=>gretm<="00000000";

end case;

when "0101"=>

case zgreen is

when "111"=>gretm<="00000000";

when "110"=>gretm<="00000000";

when "101"=>gretm<="00000000";

when others=>gretm<="11111111";

end case;

when "0110"=>

case zgreen is

when "111"=>gretm<="00000000";

when "110"=>gretm<="00000000";

when others=>gretm<="11111111";

end case;

when "0111"=>

case zgreen is

when "111"=>gretm<="00000000";

when others=>gretm<="11111111";

end case;

when "1000"=>gretm<="11111111";

when others =>gretm<="11111111";

end case;

end process;

p2:process(smode,sligc,row,scc,stm) -- 单字显示“手”

begin

case smode is

when "00"=>

case sligc is

when "00" =>stared<="1000";

when "01" =>stared<="0110";

when "10" =>stared<="0011";

when "11" =>stared<="0001";

when others =>stared<="1000";

end case;

case row is

when "11111110"=>cred<="00001000";

when "11111101"=>cred<="00011000";

when "11111011"=>cred<="00101000";

when "11110111"=>cred<="01111110";

when "11101111"=>cred<="11111111";

when "11011111"=>cred<="00001000";

when "10111111"=>cred<="00011000";

when "01111111"=>cred<="00001000";

when others=>cred<="00000000";

end case;

when "01"=>

case row is

when

"11111110"=>stared<="0111";stagre<="0000";cred<="00001000";cgreen<="00001000";

when

"11111101"=>stared<="0110";stagre<="0001";cred<="00011000";cgreen<="00011000";

when

"11111011"=>stared<="0101";stagre<="0010";cred<="00101000";cgreen<="00101000";

when

"11110111"=>stared<="0100";stagre<="0011";cred<="01111110";cgreen<="01111110";

when

"11101111"=>stared<="0011";stagre<="0100";cred<="11111111";cgreen<="11111111";

when

"11011111"=>stared<="0010";stagre<="0101";cred<="00001000";cgreen<="00001000";

when

"10111111"=>stared<="0001";stagre<="0110";cred<="00011000";cgreen<="00011000";

when

"01111111"=>stared<="0000";stagre<="0111";cred<="00001000";cgreen<="00001000";

when

others=>stared<="1000";stagre<="0000";cred<="00000000";cgreen<="00000000";

end case;

when "10"=> --单字左右滚动显示“手”

case scc is

when "00"=>

case stm is

when"000001"=>

stared<="0111";stagre<="0000";

case row is --1

when "11111110"=>cred<="00001000";cgreen<="00001000";

when "11111101"=>cred<="00011000";cgreen<="00011000";

when "11111011"=>cred<="00101000";cgreen<="00101000";

when "11110111"=>cred<="01111110";cgreen<="01111110";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00001000";cgreen<="00001000";

when "10111111"=>cred<="00011000";cgreen<="00011000";

when "01111111"=>cred<="00001000";cgreen<="00001000";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000010"=>

stared<="0110";stagre<="0001";

case row is --2

when "11111110"=>cred<="00010000";cgreen<="00010000";

when "11111101"=>cred<="00110000";cgreen<="00110000";

when "11111011"=>cred<="01010000";cgreen<="01010000";

when "11110111"=>cred<="11111100";cgreen<="11111100";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00010000";cgreen<="00010000";

when "10111111"=>cred<="00110000";cgreen<="00110000";

when "01111111"=>cred<="00010000";cgreen<="00010000";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000011"=> --3

stared<="0101";stagre<="0010";

case row is

when "11111110"=>cred<="00100000";cgreen<="00100000";

when "11111101"=>cred<="01100000";cgreen<="01100000";

when "11111011"=>cred<="10100000";cgreen<="10100000";

when "11110111"=>cred<="11111001";cgreen<="11111001";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00100000";cgreen<="00100000";

when "10111111"=>cred<="01100000";cgreen<="01100000";

when "01111111"=>cred<="00100000";cgreen<="00100000";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000100"=> --4

stared<="0100";stagre<="0011";

case row is

when "11111110"=>cred<="01000000";cgreen<="01000000";

when "11111101"=>cred<="11000000";cgreen<="11000000";

when "11111011"=>cred<="01000001";cgreen<="01000001";

when "11110111"=>cred<="11110011";cgreen<="11110011";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="01000000";cgreen<="01000000";

when "10111111"=>cred<="11000000";cgreen<="11000000";

when "01111111"=>cred<="01000000";cgreen<="01000000";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000101"=> --5

stared<="0011";stagre<="0100";

case row is

when "11111110"=>cred<="10000000";cgreen<="10000000";

when "11111101"=>cred<="10000001";cgreen<="10000001";

when "11111011"=>cred<="10000010";cgreen<="10000010";

when "11110111"=>cred<="11100111";cgreen<="11100111";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="10000000";cgreen<="10000000";

when "10111111"=>cred<="10000001";cgreen<="10000001";

when "01111111"=>cred<="10000000";cgreen<="10000000";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000110"=> --6

stared<="0010";stagre<="0101";

case row is

when "11111110"=>cred<="00000001";cgreen<="00000001";

when "11111101"=>cred<="00000011";cgreen<="00000011";

when "11111011"=>cred<="00000101";cgreen<="00000101";

when "11110111"=>cred<="11001111";cgreen<="11001111";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00000001";cgreen<="00000001";

when "10111111"=>cred<="00000011";cgreen<="00000011";

when "01111111"=>cred<="00000001";cgreen<="00000001";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000111"=> --7

stared<="0001";stagre<="0110";

case row is

when "11111110"=>cred<="00000010";cgreen<="00000010";

when "11111101"=>cred<="00000110";cgreen<="00000110";

when "11111011"=>cred<="00001010";cgreen<="00001010";

when "11110111"=>cred<="10011111";cgreen<="10011111";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00000010";cgreen<="00000010";

when "10111111"=>cred<="00000110";cgreen<="00000110";

when "01111111"=>cred<="00000010";cgreen<="00000010";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"001000"=> --8

stared<="0000";stagre<="0111";

case row is

when "11111110"=>cred<="00000100";cgreen<="00000100";

when "11111101"=>cred<="00001100";cgreen<="00001100";

when "11111011"=>cred<="00010100";cgreen<="00010100";

when "11110111"=>cred<="00111111";cgreen<="00111111";

when "11101111"=>cred<="11111111";cgreen<="11111111";

when "11011111"=>cred<="00000100";cgreen<="00000100";

when "10111111"=>cred<="00001100";cgreen<="00001100";

when "01111111"=>cred<="00000100";cgreen<="00000100";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when others=>cred<="00000000";cgreen<="00000000";

end case;

when "01"=> --左右滚动显示“邮电大学”

case stm is

when"000001"=>

stared<="0111";stagre<="0000";

case row is --1帧

when "11111110"=>cred<="00100000";cgreen<="00100000";

when "11111101"=>cred<="00100111";cgreen<="00100111";

when "11111011"=>cred<="11111110";cgreen<="11111110";

when "11110111"=>cred<="10101100";cgreen<="10101100";

when "11101111"=>cred<="11111110";cgreen<="11111110";

when "11011111"=>cred<="10101101";cgreen<="10101101";

when "10111111"=>cred<="11111111";cgreen<="11111111";

when "01111111"=>cred<="00000100";cgreen<="00000100";

when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000010"=>

stared<="0110";stagre<="0001";

case row is --2帧when "11111110"=>cred<="01000000";cgreen<="01000000"; when "11111101"=>cred<="01001110";cgreen<="01001110"; when "11111011"=>cred<="11111100";cgreen<="11111100"; when "11110111"=>cred<="01011000";cgreen<="01011000"; when "11101111"=>cred<="11111100";cgreen<="11111100"; when "11011111"=>cred<="01011010";cgreen<="01011010"; when "10111111"=>cred<="11111110";cgreen<="11111110"; when "01111111"=>cred<="00001000";cgreen<="00001000"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000011"=> --3帧

stared<="0101";stagre<="0010";

case row is

when "11111110"=>cred<="10000000";cgreen<="10000000"; when "11111101"=>cred<="10011101";cgreen<="10011101"; when "11111011"=>cred<="11111001";cgreen<="11111001"; when "11110111"=>cred<="10110001";cgreen<="10110001"; when "11101111"=>cred<="11111001";cgreen<="11111001"; when "11011111"=>cred<="10110101";cgreen<="10110101"; when "10111111"=>cred<="11111100";cgreen<="11111100"; when "01111111"=>cred<="00010000";cgreen<="00001000"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000100"=> --4帧

stared<="0100";stagre<="0011";

case row is

when "11111110"=>cred<="00000000";cgreen<="00000000"; when "11111101"=>cred<="00111011";cgreen<="00111011"; when "11111011"=>cred<="11110010";cgreen<="11110010"; when "11110111"=>cred<="01100011";cgreen<="01100011"; when "11101111"=>cred<="11110010";cgreen<="11110010"; when "11011111"=>cred<="01101011";cgreen<="01101011"; when "10111111"=>cred<="11111000";cgreen<="11111000"; when "01111111"=>cred<="00100000";cgreen<="00010000"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000101"=> --5帧

stared<="0011";stagre<="0100";

case row is

when "11111110"=>cred<="00000001";cgreen<="00000001"; when "11111101"=>cred<="01110111";cgreen<="01110111"; when "11111011"=>cred<="11100101";cgreen<="11100101"; when "11110111"=>cred<="11000111";cgreen<="11000111"; when "11101111"=>cred<="11100101";cgreen<="11100101"; when "11011111"=>cred<="11010111";cgreen<="11010111"; when "10111111"=>cred<="11110001";cgreen<="11110001"; when "01111111"=>cred<="01000001";cgreen<="00100001"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000110"=> --6帧

stared<="0010";stagre<="0101";

case row is

when "11111110"=>cred<="00000010";cgreen<="00000010"; when "11111101"=>cred<="11101111";cgreen<="11101111"; when "11111011"=>cred<="11001010";cgreen<="11001010"; when "11110111"=>cred<="10001111";cgreen<="10001111"; when "11101111"=>cred<="11001010";cgreen<="11001010"; when "11011111"=>cred<="10101111";cgreen<="10101111"; when "10111111"=>cred<="11100010";cgreen<="11100010"; when "01111111"=>cred<="10000011";cgreen<="01000011"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"000111"=> --7帧

stared<="0001";stagre<="0110";

case row is

when "11111110"=>cred<="00000100";cgreen<="00000100"; when "11111101"=>cred<="11011111";cgreen<="11011111"; when "11111011"=>cred<="10010101";cgreen<="10010101"; when "11110111"=>cred<="00011111";cgreen<="00011111"; when "11101111"=>cred<="10010101";cgreen<="10010101"; when "11011111"=>cred<="01011111";cgreen<="01011111"; when "10111111"=>cred<="11000100";cgreen<="11000100"; when "01111111"=>cred<="00000111";cgreen<="10000111"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"001000"=> --8帧

stared<="0000";stagre<="0111";

case row is

when "11111110"=>cred<="00001000";cgreen<="00001000"; when "11111101"=>cred<="10111110";cgreen<="10111110"; when "11111011"=>cred<="00101010";cgreen<="00101010"; when "11110111"=>cred<="00111110";cgreen<="00111110"; when "11101111"=>cred<="00101010";cgreen<="00101010"; when "11011111"=>cred<="10111110";cgreen<="10111110"; when "10111111"=>cred<="10001000";cgreen<="10001000"; when "01111111"=>cred<="00001111";cgreen<="00001111"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"001001"=>

stared<="0111";stagre<="0000";

case row is --9帧

when "11111110"=>cred<="00010000";cgreen<="00010000"; when "11111101"=>cred<="01111100";cgreen<="01111100"; when "11111011"=>cred<="01010100";cgreen<="01010100"; when "11110111"=>cred<="01111100";cgreen<="01111100"; when "11101111"=>cred<="01010100";cgreen<="01010100"; when "11011111"=>cred<="01111100";cgreen<="01111100"; when "10111111"=>cred<="00010001";cgreen<="00010001"; when "01111111"=>cred<="00011110";cgreen<="00011110"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"001010"=>

stared<="0110";stagre<="0001";

case row is --10帧when "11111110"=>cred<="00100000";cgreen<="00100000"; when "11111101"=>cred<="11111000";cgreen<="11111000"; when "11111011"=>cred<="10101001";cgreen<="10101001"; when "11110111"=>cred<="11111000";cgreen<="11111000"; when "11101111"=>cred<="10101000";cgreen<="10101000"; when "11011111"=>cred<="11111000";cgreen<="11111000"; when "10111111"=>cred<="00100011";cgreen<="00100011"; when "01111111"=>cred<="00111100";cgreen<="00111100"; when others=>cred<="00000000";cgreen<="00000000";

end case;

when"001011"=> --11帧

北邮数电实验报告

北京邮电大学实验报告 实验名称:数字电路与逻辑设计实验报告 学院:信息与通信工程学院 班级: 姓名: 学号: 序号: 日期:

实验三:用VHDL语言设计与实现逻辑电路 一、实验内容 1. 用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验版测试。要求用按键设定输入信号,发光二极管显示输出信号; 2.用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,仿真验证其功能; 3.将(1),(2)和数码管译码器3个电路进行连接,并下载到实验板显示计数结果。 二、模块端口说明及连接图 1.分频器 2. 计数器 clk: 时钟输入信号 clk: 时钟信号输入 clear: 复位信号输入 clear: 复位信号输入 clk_out: 时钟分频后的信号输出 q: 计数器的输出 3.数码管显示 b: 数码管的输入信号 seg: 译码显示输出 onoff: 数码管的输出控制

4.连接图 三、实验分析 1.设计思路 本实验将之前的分频器和计数器以及数码管显示模块组合起来,实现了单个数码管现显示0~9,每隔0.5s切换一次显示内容。 COMPONENT div_12实现了时钟分频,将50MHz的单片机晶振时钟进行分频,输出频率2HZ占空比50%的方波时钟,以此时钟作为内部时钟驱动计数器。 COMPONENT jishuqi是一个十进制计数器,NUM从“0000”到“1001”循环变化,模为10。计数器的输出传递给数码管译码显示电路。 COMPONENT seg7_1是数码管译码显示电路,将收到的信号NUM译码并控制数码管的段锁存来控制数码管的显示。 整体来看,div-12提供了分频后2Hz的时钟,驱动计数器计数,计数的结果作为数码管译码显示模块的输入,根据计数器实时的数进行数码管的显示。综合起来就实现了设计的功能。 在进行电路的连接时,可直接在代码中分成三个进程来实现,也可通过为每个模块建立符号,连接电路图来实现。 2. 具体代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinjishu IS PORT( clear2 :IN STD_LOGIC; clk1:IN STD_LOGIC; b1:OUT STD_LOGIC_VECTOR(6 downto 0); CAT:OUT STD_LOGIC_VECTOR(7 downto 0) );

北邮数电实验报告

北京邮电大学 实验报告实验名称:数电电路与逻辑设计实验 学院:电子工程学院 班级: 2014211202 姓名: 学号:2014210 班内序号: 日期:2016年10月

目录 一、设计课题的任务要求 (4) 基本要求: (4) 提高要求: (5) 二、系统设计 (5) 1、设计思路 (5) 2、总体框图 (6) 3、分块设计 (9) 1:分频模块 (9) 2:按键、防抖模块 (10) 3:计分模块 (11) 4:数码管显示模块 (12) 5: 8×8点阵显示模块 (12) 6:蜂鸣器模块 (13) 三、仿真波形及波形分析 (15) 四、源程序 (16) 源程序: (16) 原理图: (64) 五、功能说明及资源利用情况 (65) 1、功能说明 (65) 2、资源利用状况 (65) 3、元件清单 (66)

六、故障及问题分析 (66) 1、防抖 (66) 2、4×4键盘的使用 (66) 3、8×8点阵 (66) 七、总结和结论 (67)

一、设计课题的任务要求 题目:猜拳游戏的设计与实现 基本要求: 1、甲乙双方各用4×4 键盘中的三个按键模拟“石头”、“剪刀”、“布”,一个按键为“确认”。4×4 键盘第一行为甲,第二行为乙; 2、裁判用4×4 键盘第三行的一个按键模拟“开”,一个按键为“准备”,一个按键为“复位”; 3、裁判宣布“准备”后,甲乙双方分别选择出拳方式并确认; 4、裁判“开”以后,用点阵的左右三列同时显示甲乙双方的猜拳选择(如下图所示),并用两个数码管显示甲乙的猜拳比分; 5、猜拳游戏为五局三胜制。若甲乙双方出拳一致,则比分保持不变,双方重新出拳; 6、比赛结束后,用8×8 点阵显示甲乙获胜方; 7、复位后游戏重新开始。

北邮数电实验报告 简易迷宫游戏

数字电路与逻辑设计实验 简易迷宫游戏

设计课题的任务要求 (一)实验目的 1. 熟练掌握 VHDL 语言和QuartusII 软件的使用; 2. 理解状态机的工作原理和设计方法; 3. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法; (二)相关知识 本实验主要利用状态机来设计实现一个简易迷宫系统,本系统分为控制器与受控电路两部分。控制器主要控制整个系统按设定的工作方式实现点阵、计时器、数码管工作的通与断,并使用逻辑判断判决小人是否移动与否和移动的方向。 同时本实验也运用到了包括分频器、计数器、数码管、点阵等相关知识。主要利用六位数码管显示30s计时和小人移动步数,用点阵显示开机画面、迷宫地图、小人移动过程和游戏失败、胜利的相应画面。 (三)实验任务 基本要求: 1、用8×8点阵进行游戏显示。 2、迷宫游戏如图1所示,采用双色点阵显示,其中红色LED为迷宫墙壁,绿色LED 表示人物。通过BTN0~BTN3四个按键控制迷宫中的人物进行上下左右移动,使人 物从起始点出发,走到迷宫的出口,游戏结束 3、普通计时模式:通过按键BTN7启动游戏,必须在30秒内找到出口,否则游戏失败, 用两个数码管进行倒计时显示。游戏胜利或者失败均要在8×8点阵上有相应的画面 出现。 4、迷宫中的人物在行走过程中,如果碰到墙壁,保持原地不动 提高要求: 1. 多种迷宫地图可以选择。 2. 在计时的基础上增加计步的功能,每按一次控制按键步数加1,碰壁不计算步数, 计步结果用数码管显示。 3. 增加了计时显示的精确度,让倒计时精确到0.01s 4.增加了开机画面,当按下START开始键后,点阵上开始显示“GO- 6-5-4-3-2-1”的

北邮 数电实验报告

北邮数电实验报告 北邮数电实验报告 数电实验是电子信息科学与技术专业的一门重要课程,通过实验可以帮助学生 巩固理论知识,培养实践能力。本次实验我们进行了基于数字逻辑电路的设计 与实现,探索了数字电路的原理和应用。以下是对本次实验的总结和分析。 1. 实验目的 本次实验的主要目的是学习数字逻辑电路的设计与实现,了解数字电路的基本 原理和应用。通过实验,我们可以熟悉数字电路的搭建过程,掌握数字电路的 设计方法和测试技巧。 2. 实验原理 本次实验主要涉及到的数字逻辑电路有与门、或门、非门、异或门等。这些逻 辑门可以通过逻辑运算实现各种功能,如加法器、减法器、比较器等。我们需 要根据实验要求,设计并搭建相应的数字电路,然后通过示波器等仪器进行测试,验证电路的正确性。 3. 实验步骤 首先,我们根据实验要求,设计了一个4位全加器电路。通过逻辑门的组合, 实现了4位二进制数的加法运算。然后,我们搭建了一个4位比较器电路,用 于比较两个4位二进制数的大小关系。最后,我们设计了一个4位减法器电路,实现了4位二进制数的减法运算。 4. 实验结果 通过实验,我们成功搭建了4位全加器、4位比较器和4位减法器电路,并进 行了测试。实验结果表明,我们设计的电路能够正确地完成加法、比较和减法

运算,符合预期的逻辑规则。 5. 实验总结 通过本次实验,我们深入了解了数字逻辑电路的设计与实现过程。我们学会了使用逻辑门进行电路设计,并通过实验验证了电路的正确性。实验过程中,我们也遇到了一些问题,如电路连接错误、示波器读数不准确等。但通过仔细分析和调试,我们最终解决了这些问题,并取得了满意的实验结果。 6. 实验感想 数电实验是一门非常重要的实践课程,通过实验我们不仅巩固了理论知识,还培养了实践能力和解决问题的能力。在实验过程中,我们需要细心观察、仔细分析,并灵活运用所学的知识。实验不仅考验了我们的动手能力,还锻炼了我们的思维能力和团队合作精神。 7. 实验的意义 数电实验的意义在于将理论知识与实际应用相结合,帮助我们更好地理解和掌握数字电路的原理和应用。通过实验,我们能够更加深入地了解数字电路的工作原理,培养我们的实践能力和创新思维。 总之,本次数电实验是一次非常有意义的实践活动。通过实验,我们不仅巩固了理论知识,还提高了实践能力和解决问题的能力。希望今后能有更多的实验机会,继续深入学习和探索数字电路的世界。

北邮数电综合实验报告

北邮数电综合实验报告 北邮数电综合实验报告 一、实验目的与背景 数电综合实验是北邮电子信息工程专业的重要实践环节,旨在通过实际操作, 巩固和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论 知识。本实验报告将对数电综合实验的内容、过程和结果进行详细描述和分析。 二、实验内容 本次数电综合实验的主要内容为设计一个数字电子钟。该电子钟具备显示时间、日期、闹钟功能,并能实现闹钟的设置、开关控制等基本操作。实验中,我们 需要使用数字集成电路、显示模块、按键开关、时钟模块等元件进行电路设计 和搭建。 三、实验过程 1. 硬件设计与连接 根据实验要求,我们首先进行电路设计。根据数字电子钟的功能需求,我们需 要选取适当的集成电路和模块。通过分析电路原理图,我们将各个模块进行连接,保证信号的正确传递和控制。 2. 软件编程与调试 在硬件连接完成后,我们需要进行软件编程。通过使用C语言或者Verilog等 编程语言,我们可以实现数字电子钟的各项功能。在编程过程中,我们需要考 虑到时钟频率、显示模块的控制、按键开关的响应等因素。 3. 实验调试与测试 完成软件编程后,我们需要进行实验调试和测试。通过连接电源,观察电子钟

的各项功能是否正常工作。如果发现问题,我们需要进行调试,找出问题所在,并进行修复。 四、实验结果与分析 经过实验调试和测试,我们成功实现了数字电子钟的设计和搭建。该电子钟能 够准确显示时间和日期,并能根据用户的设置进行闹钟的开关和响铃。通过实 验过程,我们对数字电路的原理和应用有了更深入的理解。 五、实验心得与收获 通过参与数电综合实验,我深刻体会到了理论与实践的结合的重要性。在实验中,我们需要将课堂上所学的知识应用到实际中,通过实际操作来巩固和加深 对知识的理解。同时,实验中也锻炼了我们的动手能力和解决问题的能力。 在实验过程中,我们还学会了团队合作的重要性。在设计和搭建电路的过程中,我们需要相互配合,互相帮助,共同解决问题。通过与同学们的合作,我们不 仅解决了实验中遇到的各种问题,还加深了与同学们的交流和友谊。 最后,数电综合实验为我们提供了一个实践的平台,让我们能够将理论知识与 实际操作相结合,更好地理解和掌握所学的知识。通过实验,我们不仅提高了 自己的专业技能,也培养了自己的创新意识和解决问题的能力。 六、总结 数电综合实验是北邮电子信息工程专业的重要实践环节,通过实际操作,巩固 和应用学生在数字电路、模拟电路、通信原理等相关课程中所学到的理论知识。通过实验,我们不仅提高了自己的专业技能,也培养了自己的创新意识和解决 问题的能力。数电综合实验是我们专业学习的重要一环,对我们未来的学习和 工作都具有重要意义。希望通过这次实验,我们能够更好地理解和掌握所学的

北邮数电上实验报告

北京邮电大学 数字电路与逻辑设计实验 学院: 班级: 姓名: 学号: 班内序号:

实验一Quartus II原理图输入法设计 一、实验目的: (1)熟悉Quartus II原理图输入法进行电路设计和仿真。 (2)掌握Quartus II 图形模块单元的生成与调 (3)熟悉实验板的使用 二、实验所用器材: (1)计算机 (2)直流稳压电源 (3)数字系统与逻辑设计实验开发板 三、实验任务要求 (1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 (2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。 (3)用VHDL语言实现全加器。 四、实验原理图和实验波形图 1、全加器实验原理图。

2、全加器实验波形图。 五、仿真波形分析 由仿真波形可以看出,当a,b,ci有两个或者两个以上为1时,产生进位,即co输出为1,而输出s则是当a,b,ci输入偶数个1时为0,奇数个1时为1,满足实验原理,仿真波形正确。

实验三VHDL组合逻辑电路设计 一、实验目的: (1)熟悉Quartus II原理图输入法进行电路设计和仿真。 (2)掌握Quartus II 图形模块单元的生成与调 (3)熟悉实验板的使用 二、实验所用器材: (1)计算机 (2)直流稳压电源 (3)数字系统与逻辑设计实验开发板 三、实验任务要求 (1)用VHDL语言设计将8421计数器,分频器和数码管译码器连接使用,实现在指定数码管滚动显示0-9,其余数码管不亮,并带有清零功能,并下载到实验板显示计数结果。 四、实验VHDL代码和仿真波形图 (1)VHDL代码 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity xianshi is port( clk,clr:in std_logic;

北邮数电实验报告_双色点阵

北京邮电大学 数电综合实验报告 实验名称:双色点阵显示控制器 学院: 姓名: 班级: 学号: 班内序号:

一.设计课题的任务要求 用8×8点阵设计双色点阵显示控制器 基本要求: 1、固定红色显示一个汉字或图形,显示亮度4级可调,用一个btn 按钮实现亮度调节,亮度变化视觉效果要尽量明显。 2、用从红到绿8级渐变色显示一个固定汉字或图形。 3、分别用单字循环显示、左右滚动显示、上下滚动显示三种显示方式单色显示四个汉字或图形,显示过程中,显示方式用一个btn 按键进行切换。 4、显示的图形或汉字要尽量饱满美观。 提高要求: 滚动显示过程中实现四种显示颜色的自动变换,颜色变化视觉效果要尽量明显。 自拟其它功能。 二. 系统设计 1. 设计思路 考虑本程序设计要求模块明确单一但需要变化多种状态,因此采用单模块多状态多进程方式实现。 其中防抖进程用于检测输入,本程序使用BTN 按键进行输入控制,而按键的键入可能由于抖动产生多个上升沿,对程序的控制产生影响。防抖动采用了延时原理来对冒险或长时间按键电平进行处理。 分频使用了多个进程产生程序所需要的多个时钟频率。 包括:clk1(扫描时钟 大于480Hz 但不过高) clk2(占空比调节1 clk1周期的整数倍,但不过高) clk3(占空比调节2 同clk2,但占空比不同) clk4(占空比调节3 同clk2,但占空比不同) clk5(按键时钟 约100Hz) clk6(滚动变化计时 约1Hz) 状态机变化进程用于管理状态变化,当遇到按键电平信号时根据规则改变对应状态。 显示进程包括主要显示进程和一些辅助进程,辅助进程完成了时钟对应计数器计数,主进程则根据状态变化显示不同显示模式下不同的图案。 2. 总体框图 (1) 总体结构框图:

北邮数电实验报告4人表决器北邮电子-数电综合实验报告

北邮数电实验报告4人表决器_北邮电子-数电综合实验报告 数字电路综合实验设计 简易出租车计价器的设计与实现 学院:电子工程学院班级:2011211203学号:2011210876姓名:孙月鹏班内序号:04 摘要 本文介绍了利用QuartusII综合性PLD/FPGA开发软件,在MAXII数字逻辑实验开发板上实现简易出租车计价器功能的设计与实现方法。本方案采用自上而下的设计理念,将整体电路按照功能划分为分频、计数、控制、数码管显示电路、点阵显示电路等若干模块,模块内用VHDL语言完成逻辑设计,模块间用原理图进行连接,使整体可实现计费、计时等功能。 关键字:可编程器件模块化设计出租车计价器VHDL语言 一、设计任务要求 基本要求: 1.行驶公里:用时钟2秒钟表示出租车匀速行驶1公里。在行车5公里以内,按起步价13元收费,超过5公里部分,以每公里2元收费。燃油附加费每运次1元。 2.途中等待:用按键控制中途等待,等待少于(包括)5秒不收费,超过5秒后没等待3秒钟加收1元。 3.用数码管分时显示计费金额、行驶里程和等候时间。字母A表示当前处于显示计费金额状态,字母B表示当前处于显示行驶里程状态,字母C表示当前处于显示等候时间状态。 4.用按键控制出租车空驶、载客状态。 提高要求: 1.用点阵滚动显示收费单据。 2.具有夜间模式,基本单价加收20%的费用。出租车收费以元为单位,元以下四舍五入。

3.出租车行驶速度可调可控。4.多人乘车,分段计价。5.自拟其他功能。 二、设计思路与结构框图 1.设计思路 图1结构框图 由结构框图可以分析得出,该系统的的主体是计数控制器。该系统由外部控制载客控制信号和等待控制信号,以时钟信号的翻转为计数依据,完成对时间、里程和费用的计数,并将结果通过数码管译码电路显示出来。 该系统的控制信号可由拨码或按键输入,时钟由开发板内部时钟分频得出,输出有点阵输出和数码管输出。因此,可将系统分为分频器、计数控制器、数码管译码和显示以及点阵显示四部分。并以此得出系统的逻辑框图如下:图2逻辑框图 2.控制器部分的状态转移图 该控制器一共有三个基本状态:空驶状态、载客状态和等待状态。分别由v、和w来进行控制。 三、分块电路和总体电路设计 (一)总体电路设计 图3状态转移图 整体电路由数码管译码电路、转换电路、点阵译码电路、技术控制电路、分频电路五部分构成。 分频电路将开发板内部的50MHz时钟分为500hz(供给数码管和点阵)、 1Hz(控制器计时)、0.5Hz(行驶路程计费)、0.3Hz(等待时间计费)以及用于提高分频效率的其他若按频率。 计数控制电路由四部分构成,整体完成行驶距离的计数、等待时间的计 数以及费用的计数。输出为三组十位二进制数。 转换电路有转换数据类型和在数码管上分时显示两个功能。首先将输入 的十位二进制数转换为4位十进制数,并且利用除法和取余数的运算提取出个位、十位、百位、千位,并转换为四位二进制BCD码。其次利用0.5hz的时钟,将行驶里程、等待时间、计费金额以2秒为周期依次out1~4,供给数码管以便分时显示。

北邮数电实验双色点阵扫描显示控制器

北京邮电大学 数字电路与逻辑设计实验报告 (实验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代码及注释 点阵部分: library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all; entity dianzhen is port(clk :in std_logic; col_r :out std_logic_vector(7 downto 0); --红灯的控制显示 col_g :out std_logic_vector(7 downto 0); --绿灯的控制显示 row : out std_logic_vector(7 downto 0);--二极管阴极控制 reset: in std_logic); end dianzhen; architecture a of dianzhen is signal sel7:std_logic_vector(2 downto 0); --模7计数器的信号 signal sel8:std_logic_vector(2 downto 0); --模8计数器的信号 signal clk_add:std_logic:='0'; --分频后的时钟begin p1:process(clk) --1000分频 variable c:integer range 0 to 499:=0; begin if (clk'event and clk='1') then if c=499 then

2021年北邮数电综合实验报告

点阵赛车游戏 学院: 信息与通信工程学院专业: 通信工程 班级: 姓名: 学号: 班内序号:

一、设计课题任务要求 用8×8点阵进行5秒倒计时显示, 当5秒倒计时结束后, 点阵显示赛道和赛车初始位置, 赛车游戏开始, 并开始计时, 用两个数码管显示时间。用红色表示赛道, 黄色表示赛车初始位置, 箭头表示赛车行进方向。用BTN1~BTN3三个按键分别控制赛车左移、前进、右移, 最终使赛车在不碰撞赛道情况下走完全程, 游戏结束, 点阵显示“V”图案, 数码管显示走完全程所花费时间。当游戏时间超出59秒, 或者赛车在行进过程中碰撞赛道, 游戏失败, 点阵显示“X”图案。经过按键BTN0进行复位, 控制点阵返回到初始状态。 二、系统设计 1、设计思绪 这个过程乍一看蛮复杂, 不过当我经过仔细分析后发觉, 我代码能够根据这个游戏运行过程来写。这个游戏分为4个状态, 即倒计时, 运行, 成功和失败。倒计时部分依据不一样数字在点阵上位置很轻易设计出来, 运行部分便是初始化赛道, 赛车位置, 然后用按键来控制赛车运动, 在这个过程中要不停判定赛车是否撞墙和抵达终点, 假如抵达终点便进入第三个状态, 成功, 即显示“V”; 若果撞墙便进入第四个状态, 失败, 即显示“X”。在游戏运行同时数码管还要计时。 2、总体框图 (1)系统结构图

(2)ASM 图 译码显示器 分频器 控制器 计时器 赛道及赛车 CP RESET BTN1 BTN2 BTN3 开启 N Y 是否碰到边界 是否抵达终点 显示“V ” 显示“×” 计时 移动 是否复位是否复位 Y N N Y N Y N

北邮数电实验下LED点阵风扇的设计与实现

数字电路与逻辑设计实验 实验报告 实验名称:led点阵风扇的设计与实现学院:电子工程学院 专业:电子科学与技术 班级: 班内序号: 学号: 姓名: 北京邮电大学 2015年11月9日

目录 一、任务要求 (3) 1.基本要求: (3) 2.提高要求: (3) 二、系统设计 (3) 1. 设计思路 (3) 2. 总体框图 (4) 3. 分块设计 (7) 三、仿真波形及波形分析 (8) 四、源程序(包括注释) (12) 五、功能说明及资源利用情况 (23) 1. 功能说明 (23) 2. 资源利用情况 (24) 六、故障及问题分析 (25) 七、总结和结论 (27) 1.总结 (27) 2.结论 (27)

一、任务要求 1.基本要求: (1)用8*8点阵模拟风扇转动,并采用双色点阵显示。 (2)风扇转动方式如图1所示,包括四个点阵显示状态并按顺序循环显示。风扇转动速度根据环境温度分为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秒,采用两个数码管进行倒计时,当倒计时结束后,风扇状态保持静止不动。 (5)设置开关键。风扇开机初始状态为20℃、1档,并有不小于5秒的开机音乐。关机状态为点阵全灭。 图1 2.提高要求: (1)设计LED风扇的其他工作模式。 (2)利用实验板上的温度传感器代替按键直接获取温度数据,实现对LED 风扇四档转速的自动控制。 (3)用数码管实时显示温度传感器的温度数据,精度为0.1℃。 (4)自拟其他功能。 二、系统设计 1.设计思路 在LED点阵风扇的设计与实现中,首先进行了分频器的设计:由于所使用电路板的时钟频率为50MHz,而需要使用的点阵、数码管扫描频率为1kHz,扇叶切换频率分别为2Hz、1Hz和0.5Hz,故首先将时钟频率进行四次分频。 然后是按键控制温度调节部分的实现,由于题中要求温度在10-40之间的两位数,所以在vhdl的程序设计中将这两位数拆成两个四位的BCD码,并用temerature_h和temperature_l来分别表示,每当需要温度增减时,通过控制这两个信号来实现温度的变化。

北邮数电实验打地鼠游戏的设计与实现实验报告

数字电路与逻辑设计实验(下) 实验报告 课题名称:打地鼠游戏的设计与实现 学院:电子工程学院 班级:2013211202 姓名: 学号:

目录 一.设计课题及任务要求 (4) 1.课题名称:打地鼠游戏的设计及实现 (4) 二.系统设计 (4) 1.设计思路:采用自顶向下的设计原则。 (4) 2.整体分析: (4) 3.整体设计框图: (4) 三.分模块设计 (5) 1.分频模块设计 (5) 1)需求分析: (5) 2)模块代码: (5) 3)模块仿真波形 (5) 2.倒计时模块: (6) 1)功能分析: (6) 2)模块代码: (6) 3)模块仿真 (7) 3.计分模块 (9) 1)功能分析:。 (9) 2)模块代码: (9) 3)模块仿真 (10) 4.数码管控制模块 (12) 1)功能分析: (12) 2)模块代码: (12) 5.控制模块 (13) 1)功能分析: (13) 2)模块代码 (13) 3)模块仿真 (13) 6.随机地鼠生成模块 (14) 1)功能分析: (14) 2)模块代码 (14)

3)模块仿真: (15) 7.点阵显示模块 (16) 1)功能分析: (16) 2)点阵显示原理:原理图: (16) 3)模块代码: (17) 4)模块仿真 (18) 8.键盘模块 (20) 1)功能分析: (20) 2)原理分析 (20) 3)模块代码: (20) 4)模块仿真 (22) 9.总体模块 (24) 1)元件实例连接分析 (24) 2)RTL VIEWS (25) 3)部分代码 (26) 四.功能说明及资源利用情况 (30) 1.功能说明: (30) 2.资源利用情况 (30) 3.总工程 (30) 五.故障及问题分析 (31) 1.问题分析: (31) 2.解决办法 (31) 六.总结和结论 (32)

北邮数电实验点阵赛车

数字电路综合实验报告点阵赛车游戏 学院:信息与通信工程学院班级:2010211117班 姓名: 学号: 班内序号: 辅导老师:袁东明 时间:2012年11月

目录 一、设计任务要求 二、系统设计 三、仿真波形及分析 四、源程序 五、功能说明 六、元器件清单及资源利用情况 七、故障及问题分析 八、总结和结论

一、设计任务要求 1、基本要求: 1。用8×8点阵进行5秒倒计时显示,如下图所示. 2.当5秒倒计时结束后,点阵显示下图所示的赛道和赛车的初始位置,赛车游戏开始,并开始计时,用两个数码管显示时间。图中的红色表示赛道,黄色表示赛车的初始位置,箭头表示赛车行进的方向。 3.用BTN1~BTN3三个按键分别控制赛车的左移、前进、右移,最终使赛车在不碰撞赛道的情况下走完全程(即图2中的绿色位置),游戏结束,点阵显示“V”图案,数码管显示走完全程所耗费的时间。 4。当游戏时间超过59秒,或者赛车在行进过程中碰撞赛道,游戏失败,点阵显示“X”图案. 5。通过按键BTN0进行复位,控制点阵返回到初始状态。 2、提高要求: 1。有多种游戏赛道可选,5秒倒计时显示后赛道随机出现. 2.赛车的初始位置随机出现。 3。在赛车行进过程中,赛道中随机出现障碍物(用8×8点阵中的一个LED 表示),通过BTN1~BTN3三个按键的控制躲避障碍物,走完全程.若赛车碰到障碍物和赛道,则游戏失败. 二、系统设计 1、设计框图 1、系统结构框图 本系统主要由四个模块组成,其中控制器用于控制程序运行、储存当前状态

并控制输出显示,点阵用于显示游戏界面,数码管用于显示当前分数.按钮输入用于输入控制信息。 2、逻辑划分方框图

教室作息时间语音播报点阵显示屏控制系统的设计和实现

教室作息时间语音播报点阵显示屏控制系统的设计和实现 [摘要] 教室作息时间控制系统以STC89C516RD+单片机为核心,用DS1302日历时钟芯片提供时间信息、用ISD4004语音芯片播报时间信息及用LED点阵显示屏同步显示时间信息,本系统具有语音播报、时间校时及时间显示等功能,同时还具有价廉,运行稳定和可靠,时间准确等优点。 [关键词] STC89C516RD+单片机DS1302 ISD4004 LED点阵显示屏 1、引言 随着信息社会的不断发展,尤其是随着各种嵌入式系统在现实生活中的深入和广泛应用,各种信息处理和信息传输的方法也越来越丰富,世界各大主要芯片生产商先后推出IIC三总线传输协议、单总线传输协议、SPI同步传输协议等,这些传输协议的出现为各种微处理和微控制器和外围信息处理芯片快速通信提供了极大的便利,由于各种传输协议都具有固定和严格的传输格式,也就为各种嵌入式系统编写方便移植的总线传输功能函数提供了可能,本文就是通过“基于STC89C516RD+的教室作息时间语音点阵显示屏控制系统的设计和制作”来详细介绍各种嵌入式系统中总线传输协议中的各种功能子函数的编写方法。 基于STC89C516RD+的教室作息时间语音点阵显示屏控制系统,它采用了具有IIC三总线接口的日历时钟芯片DS1302和具有SPI同步传输总线的录放音芯片ISD4004,以及STC89C516RD+微控制器芯片,通过对一个能实现时钟显示和播报及定时功能的时间控制系统的设计学习,达到应用IIC三总线协议和SPI 同步传输总线协议来为广大的师生提供一套可用于学校作息,实现实时时间的显示、校正和智能语音播报,并且具有体积小,价格便宜,功耗低,可靠性高等优点的教室作息时间语音点阵显示屏控制系统。 2、系统的组成和工作原理 本系统主要是由单片机模块、电源模块、ISD4004录放音模块、LED点阵显示屏模块、DS1302时钟模块、按键输入时间校正模块和MAX232在系统编程模块组成,系统组成框图见图1所示。 图1 系统组成方框图 系统的工作原理是:微控制器芯片STC89C516RD+通过IIC总线协议函数来将DS1302内的实时时间信息暂存于微控制器内的RAM单元中,然后通过RAM 单元中将实时时间数据信息送往LED点阵显示屏进行实时显示,同时微控制器芯片通过SPI总线传输协议函数读取预先录入ISD4004芯片中的语音信息送功能电路进行时钟的播报,按键输入时间校正模块主要用来对DS1302进行时间校正及用来设定上、下课的时间语音播报点,同时也为ISD4004的预录语音信息提供手工按键录音的功能,表1中的语句为预录入ISD4004中的语音信息。

基于fpga点阵显示控制器设计

基于fpga点阵显示控制器设计 FPGA 点阵显示控制器是一种基于 FPGA 技术的电路板,它可以控制大尺寸 LED 显示 屏进行点阵文字、图片、动画等内容的展示。具有高帧率、高亮度、高分辨率等优点,在 各种场合得到广泛应用。 本文将介绍 FPGA 点阵显示控制器的设计过程。首先,我们需要选取一块适合的 FPGA 开发板。在此基础上,我们需要了解点阵显示技术和控制协议,选择一款适合的点 阵模块,并根据点阵模块的参数信息和显示需求,设计和实现 FPGA 的显示控制逻辑。 首先,我们需要选取一块适合的 FPGA 开发板。目前市场上有很多种 FPGA 开发板可 供选择,如 Altera 的 DE-Series,Xilinx 的 ZYNQ 系列等。我们可以根据自己的需求 选择适合自己的开发板。 其次,我们需要了解点阵显示技术和控制协议。点阵显示屏是由很多个 LED 点组成的,可以显示文字、图片、动画等内容。控制协议有多种,如SPI、I2C、RGB、LVDS等等。我们需要选择一种适合的控制协议,根据控制协议的通信方式进行设计。 接下来,我们需要选择一款适合的点阵模块。根据自己的需求选择选择分辨率、颜色、亮度等参数。常用的点阵模块有 P5、P3、P2.5 等等,我们需要根据实际情况进行选择。 最后,根据点阵模块的参数信息和显示需求,设计和实现 FPGA 的显示控制逻辑。具 体步骤如下: 1. 确定数据传输方式,如 SPI、I2C、RGB、LVDS 等。 2. 根据点阵模块的分辨率,设计显示缓存区,将需要显示的图像数据存入缓存区。 3. 根据点阵模块的显示方式,设计显示控制逻辑,将缓存区中的数据进行合成和分割,并将合成后的数据发送给点阵模块。 4. 根据点阵模块的亮度控制方式,设计 PWM 控制逻辑。 5. 根据点阵模块的刷新频率,设计时序控制逻辑,控制每行的扫描时序,确保点阵 显示效果平稳。 在设计和实现的过程中,需要注意以下几点: 1. 确保时序控制准确无误,避免出现花屏、纹路等现象。 2. 设计低功耗的逻辑电路,避免超过 FPGA 的工作温度范围。 3. 对于高速传输的控制协议,如 LVDS,需要考虑信号的波形完整性和抗干扰能力。

LED点阵显示屏设计报告

LED点阵显示屏设计报告 设计报告 一、引言 LED点阵显示屏是一种常用的显示设备,它由许多小LED灯组成的矩 阵结构。它具有高亮度、低功耗、长寿命等优点,广泛应用于室内外广告、显示器、计数器等领域。本报告旨在设计一个基于LED点阵显示屏的显示 系统,该系统能够显示数字、字母、图像等内容,具有简单易用、可靠稳 定的特点。 二、设计目标 1.显示方式:系统设计支持多种显示方式,包括点亮、熄灭、闪烁等。 2.显示内容:系统设计支持显示数字、字母、符号、图像等内容,可 以实现多种显示效果。 3.输入方式:系统设计支持多种输入方式,包括键盘输入、串口输入、无线输入等,方便用户操作。 4.可扩展性:系统设计具有可扩展性,可以通过添加模块或接口,实 现更多功能。 5.显示效果:系统设计追求良好的显示效果,包括清晰度、亮度、色 彩等。 三、设计方案 1.硬件设计:

(1)控制器模块:采用高性能的单片机作为控制器,具有较大的存 储空间和计算能力。 (2)点阵显示屏模块:选择合适的点阵显示屏,根据设计要求确定 屏幕大小和像素点数。 (3)输入模块:设计键盘输入模块,采用矩阵按键的方式,实现用 户输入数字、字母等内容。 (4)显示模块:设计显示模块,通过控制点阵显示屏的亮灭状态以 及刷新频率,实现显示各种内容的功能。 (5)通信模块:设计串口通信模块,支持与其他设备的通信,实现 数据传输和控制功能。 2.软件设计: (1)控制程序:设计控制程序,包括初始化设置、数据处理、显示 控制等功能,通过控制器模块实现相关操作。 (2)显示程序:设计显示程序,支持各种显示效果,包括点亮、熄灭、闪烁等,根据用户输入的内容进行相应的显示。 (3)输入程序:设计输入程序,支持多种输入方式,包括键盘输入、串口输入等,将用户输入的内容传输给控制程序进行处理。 (4)通信程序:设计通信程序,根据串口通信模块的设定,实现与 其他设备的数据传输和控制功能。 四、测试与验证

数电课程设计--彩灯控制器的设计

数电课程设计--彩灯控制器的设计 一、实验目的 1.学习掌握数字电路的设计方法和基本原理; 2.掌握VHDL语言的基本语法和设计规范; 3.了解数码管的工作原理及应用; 4.设计并实现一个可以控制彩灯显示的数字电路。 二、实验原理 彩灯控制器的设计是一个基于FPGA的数字电路实验,其主要原理涉及VHDL语言的编写、逻辑运算、时序控制、数码管驱动等知识点。 该实验主要由以下两个部分组成: 1.数字电路控制器设计 数字电路控制器是本设计的核心部件,其主要功能是对彩灯的控制电路进行逻辑控制,在不同的时序下控制不同的彩灯亮灭状态,从而实现对彩灯显示的控制。 2.彩灯控制电路设计 彩灯控制电路是数字电路控制器的外围电路,其主要作用是对

控制信号进行缓冲、放大和保护,同时将控制信号转化为对彩灯的亮灭控制。 三、实验器材和软件 1. FPGA板 2. 数字多用途万能板 3. VHDL设计工具 4. 数码管 5. LED彩灯 6. 电阻、电容、三极管等元器件 四、实验步骤 1.设计数字电路控制器 使用VHDL语言编写数字电路控制器,根据不同的控制信号 进行逻辑运算和时序控制,从而实现对LED彩灯显示的控制。 2.设计彩灯控制电路 设计彩灯控制电路,对数字电路控制器输出的控制信号进行放大、缓冲和保护处理,同时将控制信号转化为对彩灯的亮灭控

制。 3.测试与调试 将数字电路控制器和彩灯控制电路进行连接,进行测试和调试,确保控制信号正确地传输到LED彩灯上,并实现相应的亮灭 显示效果。 五、实验结论 本设计实现了基于FPGA的彩灯控制器的设计,通过VHDL 语言实现对数字电路控制器的编写,掌握了数字电路的设计方法和VHDL语言的基本规范;同时实现了彩灯控制电路的设 计和调试,掌握了数码管的工作原理及应用。实验结果表明,该设计实现了对LED彩灯的控制,并可以实现不同的显示效果,具有一定的实用性和较高的教育意义。

基于fpga的点阵显示控制器的设计

基于fpga的点阵显示控制器的设计 介绍 随着电子信息技术的发展,数字化技术已经在我们的生活中扮演了越来越重要的角色。在数字化技术的发展过程中,点阵显示控制器(Dot Matrix Display Controller)显得尤为重要。点阵显示控制器是在数字微处理器的控制下,实现多晶体管、LED等光电子件按 照一定规律组成的字符与图形的集成,其应用范围极广。本文将介绍基于FPGA的点阵显示控制器的设计。 基本原理 点阵显示器的基本工作原理是通过控制数字微处理器输出的数据位和控制口信号的电 平来控制各个列和行上的LED或LCD点按照一定的规律显示。 点阵显示器的显示控制方法有两种:静态显示控制和动态显示控制。静态显示控制指 的是显示内容在特定的时间段内固定不变,而动态显示控制则是指显示内容在不断变化。 在点阵显示控制器的设计中,静态显示控制是一般应用较为广泛的方式。 FPGA是一种基于可编程逻辑门阵列的数字逻辑器件,它具有高度的可编程性、高速度、高可靠性等优点。在点阵显示控制器的设计中,使用FPGA可以有效提高点阵控制器的运行速度和可靠性。基于FPGA的点阵显示控制器的设计方法主要包括以下几个步骤: 1. 确定显示器的列数和行数 点阵显示器的列数和行数决定了显示器的分辨率。在设计时,需要根据实际需求确定 显示器的列数和行数。一般来说,显示器的列数和行数越多,显示的内容就越清晰,但是 对控制器的要求也就越高。 2. 确定点阵控制器的工作频率 点阵显示控制器的工作频率决定了控制器的运行速度。在设计时,需要根据实际需求 确定点阵控制器的工作频率,以确保控制器的运行速度能够满足设计要求。 3. 设计点阵控制器的逻辑电路 在确定点阵控制器的工作频率和分辨率后,需要设计点阵控制器的逻辑电路。这里主 要包括点阵控制器的时序控制、数据存储和输出控制等。 在完成点阵控制器的逻辑电路设计后,需要进行硬件电路的实现。在硬件电路的实现 过程中,需要将逻辑电路转化为硬件电路,并进行相应的布线和连接。 5. 软件编程

2023年LED点阵显示屏及控制系统的设计方案

LED点阵显示屏及控制系统旳设计方案 LED电子显示屏是伴随计算机及有关旳微电子、光电子技术旳迅猛发展而形成旳一种新型信息显示媒体。它运用发光二极管构成旳点阵模块或像素单元构成可变面积旳显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性价比高特点,在短短旳十明年中,迅速旳成为家喻户晓旳信息传播工具。目前,已经被广泛应用到军事、车站、宾馆、体育、新闻、金融、证券、广告以及交通运输等行业。本文重要简介LED点阵显示屏及控制系统旳设计方案。 1.基于STM32旳LED点阵屏旳设计与实现 基于STM32旳LED点阵屏也即是“书写”点阵屏,不仅可以像一般显示屏一样作为信息输出设备,还可以通过光笔直接在LED显示屏上进行信息输入,也即是让一般旳显示屏具有了“书写”旳功能。 2.基于蓝牙技术旳LED点阵屏设计方案 基于蓝牙技术旳LED点阵屏是一种内容更新便捷、可扩展、低价格旳点阵LED文字显示屏。降低成本旳途径是: ①用几乎人人均有旳手机旳蓝牙数据传播功能进行LED显示内容旳更新,免除专业上位机软件和控制卡旳成本,操作也更简朴; ②单次显示内容在5 ~ 30 个中文或英文字母,因为显示内容较少,就可实现扩展电路旳简朴化。

3.基于单片机和CPLD旳LED点阵书写显示屏设计 基于单片机和CPLD旳LED点阵书写屏是一种基于16×16LED点阵模块旳书写显示屏。当光笔触及点阵模块表面时,先由光笔检测触及位置处点旳扫描微亮信号以获取其行列坐标,再根据功能需求决定该坐标处旳点与否点亮至人眼可见旳显示状态,从而在屏上实现"点亮、划亮、反显、整屏擦除、笔画擦除、对象拖移、连写多字"等书写显示功能。 4.基于FPGA旳LED点阵显示字符设计 基于FPGA旳LED点阵显示原理是FPGA首先产生点阵字模地址,并从存储器读出数据寄存在16 位寄存器中,然后输出到LED 点阵旳列,同步对点阵列循环扫描以动态显示数据,当需要显示数据字模旳列和被选中旳列可以协调配合起来,就可以对旳显示字符。 5.基于CPLD旳LED点阵显示控制器 基于CPLD旳LED点阵显示控制器采用单个16×16LED点阵逐列左移(或右移)显示中文或字符,需显示中文或符号旳16×16点阵字模已经寄存在字模存储器中。采用自顶而下旳模块化设计措施,可以以便地设计整个显示系统。 6.LED点阵电子显示屏系统旳设计 LED点阵电子显示屏系统使用了8×8旳点阵发光管模块,构成16×64发光点阵,显示待定旳中文、字符以及数字,并能控制文字旳左右移动及速度。同步,温度与日期时间可以实时显示,并且与上位机联机通信成功。采用主从单片机来控制整个系统,这样可以大大减化软件旳编写难度,轻易实现各项功能指标

相关主题
文本预览
相关文档 最新文档