课程设计电子路标二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
燕山大学
课程设计说明书题目:电子路标(二)
学院(系):
年级专业:
学号:
学生姓名:
指导教师:郑兆兆周莲莲
教师职称:实验师高级实验师
燕山大学课程设计(论文)任务书
2012年 1 月 5 日
目录
第1章设计说明 (4)
1.1 设计思路 (4)
1.2 模块介绍 (4)
1. 3 真值表 (5)
第2章 Verilong HDL 设计源程序 (7)
第3章波形仿真 (12)
第4章管脚锁定及硬件连线 (16)
4.1 管脚连接 (16)
4.2 硬件连接 (17)
第5章总结 (18)
参考文献 (18)
第一章设计说明
1.设计思路:
设置RESET为复位信号,当RESET为高电平时进行复位。CLK为输入频率,上升沿敏感信号,点阵的各个行列为输出端。根据计数器原理,通过a对CLK的记数使其输出的8个状态循环。当CLK频率足够快,使人眼无法分辨时,可看到灯一直亮。该功能用case语句的循环完成。
停止的人物用红色表示。行走的人物用绿色表示。行走的人物用两个图片不断的切换来实现运动。根据计数器原理对CLK进行分频,得到S M 两个频率分别控制红绿灯亮的时间和绿灯时两个行走图片转换的时间。S对CLK计数,记到一定数量使时间为10s,此过程中红灯亮。再记到一定数量使时间为20s,此过程中绿灯亮。在计数到0,实现循环。从而使红灯亮10s绿灯亮20s。绿灯亮的期间,M对CLK计数,当记到一定数量使时间为0.5s时,人物行走图片1亮,再记到相同数量时,时间为0.5s,人物行走图片二亮。再计数到0,实现循环,从而使绿色人物显示成动态走动的效果。上述功能用if...else...语句嵌套完成。
由于动态数码管的余辉现象和人眼的视觉暂留现象,通过对数码管的高频扫描可以实现多个数码管同时亮。通过一位变量Z对CLK计数,可实现对两个数码管的扫描,本设计选中七号管和八号管,分别对七号管和八号管赋值,七号管有十个状态每一秒变化一次然后循环,八号管有三个状态,每十秒变化一次,通过计数P可实现对他们的赋值。
2.模块介绍:整个程序在两个ALWAYS模块内完成,不需编译顶层文件,用RESET控制复位,用CLK控制程序的进行。可以将其分成如下三个小模块:
(1)停止模块:通过计数产生八种状态,通过case语句实现对其循环扫描。
(2)行走模块:其原理和停止一样,为让人物动起来,可通过切换两张图片来实现。模块中在点亮一种颜色的二极管时封锁另一色二极管,从而避免出现色
彩显示的错误。
(3)动态数码管模块:动态数码管需要由两个信号来控制:一是数选信号,用来选择显示的数字;二是位选信号,用来选择第几位数码管工作。动态数码管
是共阴数码管,高电平有效。选中一个数码管的同时,其要显示的数字也必
须同时给出。位选可通过一位变量实现扫描,段选则可通过case语句实现赋
值。
3.真值表:
(4)动态数码管模块
第二章Verilog HDL 设计源程序module chao(ROW,R,G,CLK,ENA,Q,ss0,ss1,ss2);
input CLK,ENA;
output[7:0]ROW,R,G;
output[6:0]Q;
output ss0,ss1,ss2;
reg[7:0]ROW,R,G;
reg[2:0]a;
reg[14:0]s;
reg[9:0]M;
reg[6:0]Q;
reg ss0,ss1,ss2;
reg[4:0]B;
reg[1:0]C;
integer Z;
always@(posedge CLK or negedge ENA)
begin
if(~ENA) //进行复位
begin
a='b000;ROW='b11111111; s=0;
M=0;
end
else
begin
s=s+1;a=a+1;
if(3<10240)
begin
case(a)
'b000:begin ROW='b11111110;R='b00011000;G='b00000000;end
'b001:begin ROW='b11111101;R='b00011000;G='b00000000;end
'b010:begin ROW='b11111011;R='b00111100;G='b00000000;end
'b011:begin ROW='b11110111;R='b00111100;G='b00000000;end
'b100:begin ROW='b11101111;R='b00111100;G='b00000000;end
'b101:begin ROW='b11011111;R='b00011000;G='b00000000;end
'b110:begin ROW='b10111111;R='b00011000;G='b00000000;end
'b111:begin ROW='b01111111;R='b00011000;G='b00000000;end
endcase //扫描双色点阵的行和列(红灯亮)
B=s[14:10];
C=0;
end
else if(10240<=S&&S<30720)
begin
M=M+1;
if(M<=512)
begin
case(a)
'b001:begin ROW='b11111110;G='b00011000;R='b00000000;end 'b010:begin ROW='b11111101;G='b00011000;R='b00000000;end