EDA课程设计报告LED点阵汉字显.docx
《EDA课程设计报告LED点阵汉字显.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告LED点阵汉字显.docx(84页珍藏版)》请在冰豆网上搜索。
EDA课程设计报告LED点阵汉字显
石家庄经济学院信息工程学院
电子信息工程专业
EDA技术课程设计报告
题目:
LED点阵汉字显示
姓名孟庆康
学号409109060114
班级电子一班
指导教师马艳玲
2012年1月12日
要求:
1.指导教师按照课程设计大纲要求完成学生课程设计指导工作。
2.课程设计任务书由指导教师照大纲要求填写,内容要全面。
3.课程设计报告由参加本学生填写。
课程设计结束时交指导教师。
4.指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。
5.课程设计任务书和报告要语言流畅,图表正确规范。
课程设计任务书
班级电子一班姓名孟庆康学号409109060114
课程设计题目LED点阵汉字显示
课程设计起止日期2011.12.26至2012.01.12
实习地点石家庄经济学院实验楼308
课程设计内容与要求
1.及格:
在实验箱上16*16点阵模块上显示汉字“电”;
2.中:
设置不同的清屏方式(上下左右);
3.良:
滚动显示汉字“电”;
4.优:
滚动显示“电子信息工程。
”
指导教师马艳玲
2011年12月26日
一、设计原理与技术方法:
包括:
电路工作原理分析与原理图、元器件选择与参数计算、电路调试方法与结果说明;
软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。
1、软件设计说明:
(1)在实验箱上16*16点阵模块上显示汉字“电”
LED点阵汉字显示实验采用16*16的点阵,列选信为SEL0,SEL1,SEL2,SEL3,经4线16线译码器输出16列,最左边为第一列,列选信号是由一个4位向量SEL[3..0]控制;行选信号为line0~line15,是由16个行信号组成的,每一行由一个单独的位来控制,高电平有效。
实验中用逐列扫描的方法,将每列中不同的行用“0”或“1”写出,将列用时钟信号控制,当频率到达一定值时肉眼无法分辨,每列的值看上去几乎同时显示,静止的“电”字就显示在16*16点阵上。
(2)设置四种不同的清屏方式
“电”字的四种清屏方式原理基本一样,就是在不同时刻将对应的不同逻辑值
送给对应的行和列。
左清屏就是由一个低频时钟控制,由左到右逐列清屏,clk1为上升延时,counter自动+1,电字的形状变一次,然后将此时电字的逻辑值送给对应的点阵位置。
例如,clk第一次到上升延时就将缺少最左边一列的“电”字对应的逻辑值送给对应的点阵位置。
依此类推,15次上升沿后“电”字就会清完。
右清屏原理同左清屏,由一个低频时钟控制,然后由右到左逐列清屏,clk1为上升延时,counter自动+1,“电”字逐列消失,直到15次上升沿,“电”字清完。
上、下清屏也是由一个低频时钟控制,在每次上升延时,“电”字消失一行,然后将此时“电”字对应的逻辑值送入对应的位置,16个上升沿过后,“电”字清完。
由时钟控制循环完成清屏。
(3)滚动显示汉子“电”
首先写出“电”字各行各列对应的逻辑值,然后由时钟控制以1列为单位将各列的值循环左移,每移动一列,就将此时的逻辑值送给对应的点阵坐标,时钟clk1每达到一次上升沿,counter自动+1,然后“电”字循环左移一次,将此时对应的逻辑值,送给对应的位置,随着counter的变化,“电”字逐列完成循环左移,也就是左滚动。
滚动
(4)滚动显示“电子信息工程”
滚动显示“电子信息工程”原理和“电”字左滚动基本相同,即在16*16点阵上写出其对应的逻辑值,用counter来作为不同时刻不同状态的切换信号,时钟信号clk1每次到达上升沿counter自动+1,然后“电子信息工程”左移六礼列,因为“电子信息工程”为16*6=96列,所以时钟信号经过16个上升沿,即counter由0000到1111后,“电子信息工程”完成左移一次,然后由clk1控制循环滚动“电子信息工程”。
2、软件程序代码
(1)“电”单独显示
libraryieee;--调用库
useieee.std_logic_1164.all;--标准库
useieee.std_logic_unsigned.all;--无标志库
entitydianis--定义实体
port(clk0,clr:
instd_logic;--时钟和清屏
sel:
outstd_logic_vector(3downto0);--列扫描
line:
outstd_logic_vector(15downto0));--行
enddian;--实体结束
architecturertlofdianis--定义结构体
signalq:
std_logic_vector(3downto0);
signalcounter:
std_logic_vector(3downto0);--列扫描计数器
begin
sel<=q;
p1:
process(clk0,clr)
begin--进程开始
if(clr='1')then--clr=1时,清屏
counter<="0000";
elsif(clk0'eventandclk0='1')then--上升沿有效
if(counter>"1111")then--十六进制,counter加到15后清零
counter<="0000";
else
counter<=counter+'1';
endif;
endif;
endprocessp1;--进程结束
p2:
process(counter)
begin
casecounteris--列扫描计数器为不同值时,将不同
时刻“电”的代码送入相应位置
when"0000"=>line<=x"0000";q<="0000";--电
when"0001"=>line<=x"03f8";q<="0001";
when"0010"=>line<=x"0248";q<="0010";
when"0011"=>line<=x"0248";q<="0011";
when"0100"=>line<=x"0248";q<="0100";
when"0101"=>line<=x"0248";q<="0101";
when"0110"=>line<=x"7fff";q<="0110";
when"0111"=>line<=x"4248";q<="0111";
when"1000"=>line<=x"4248";q<="1000";
when"1001"=>line<=x"4248";q<="1001";
when"1010"=>line<=x"4248";q<="1010";
when"1011"=>line<=x"43f8";q<="1011";
when"1100"=>line<=x"4000";q<="1100";
when"1101"=>line<=x"4000";q<="1101";
when"1110"=>line<=x"7000";q<="1110";
when"1111"=>line<=x"0000";q<="1111";
whenothers=>null;
endcase;
endprocessp2;
endrtl;
(2)“电”清屏
libraryieee;--调用库
useieee.std_logic_1164.all;--标准库
useieee.std_logic_unsigned.all;--无标志库
entityqpis--定义实体
port(enable:
instd_logic_vector(1downto0);--四选一电路控制端
clk0,clk1,clr:
instd_logic;--时钟信号
sel:
outstd_logic_vector(3downto0);--列扫描
line:
outstd_logic_vector(15downto0));--行
endqp;--实体结束
architecturertlofqpis--定义结构体
signalq:
std_logic_vector(3downto0);--列扫描
signalcounter:
std_logic_vector(3downto0);--列扫描计数器
begin
sel<=q;--q值给sel
p0:
process(clk0,clr)
begin--进程开始
if(clr='1')then--clr=1时,清屏
q<="0000";
elsif(clk0'eventandclk0='1')then--上升沿有效
if(q>"1111")then--十六进制,加到15后清零
q<="0000";
else
q<=q+'1';
endif;
endif;
endprocess;--进程结束
P1:
process(clk1,enable)
begin
ifclk1'eventandclk1='1'then--上升沿有效
ifenable="00"then--四选一控制enable=“00”
casecounteris--列扫描计数器,不同时刻将“电”
when"0000"=>的代码送入相应位置
caseqis
when"0000"=>line<=x"0000";--“电”左清屏
when"0001"=>line<=x"03f8";
when"0010"=>line<=x"0248";
when"0011"=>line<=x"0248";
when"0100"=>line<=x"0248";
when"0101"=>line<=x"0248";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0001"=>
caseqis
when"0000"=>line<=x"0000";--“电”的后15列
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0248";
when"0011"=>line<=x"0248";
when"0100"=>line<=x"0248";
when"0101"=>line<=x"0248";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0010"=>
caseqis
when"0000"=>line<=x"0000";--“电”的后14列
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0248";
when"0100"=>line<=x"0248";
when"0101"=>line<=x"0248";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0011"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0248";
when"0101"=>line<=x"0248";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0100"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0248";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0101"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"7fff";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0110"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"0000";
when"0111"=>line<=x"4248";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"0111"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"0000";
when"0111"=>line<=x"0000";
when"1000"=>line<=x"4248";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"1000"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"0000";
when"0111"=>line<=x"0000";
when"1000"=>line<=x"0000";
when"1001"=>line<=x"4248";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"1001"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"0000";
when"0111"=>line<=x"0000";
when"1000"=>line<=x"0000";
when"1001"=>line<=x"0000";
when"1010"=>line<=x"4248";
when"1011"=>line<=x"43f8";
when"1100"=>line<=x"4000";
when"1101"=>line<=x"4000";
when"1110"=>line<=x"7000";
when"1111"=>line<=x"0000";
whenothers=>null;
endcase;
when"1010"=>
caseqis
when"0000"=>line<=x"0000";
when"0001"=>line<=x"0000";
when"0010"=>line<=x"0000";
when"0011"=>line<=x"0000";
when"0100"=>line<=x"0000";
when"0101"=>line<=x"0000";
when"0110"=>line<=x"0000";
when"0111"=>line<=x"0000";
when"1000"=>line<=x"0000";
when"1001"=>line<=x"0000";
when"1010