您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数字电路课程设计---基于1602液晶屏的数字万年历(Verilog版)
大连理工大学数字电路课程设计院系:电子科学与技术学院专业:集成电路设计与集成系统班级:电集1001姓名:陈朝吉学号:201081086总结报告-1-大连理工大学本科实验报告题目:基于1602液晶屏的数字万年历(Verilog版)课程名称:数字电路课程设计学院(系):电子科学与技术学院专业:集成电路设计与集成系统班级:电集1001学生姓名:陈朝吉学号:201081086完成日期:2012年12月22日成绩:-2-题目:基于1602液晶屏的数字万年历(Verilog版)一.设计要求1.基本功能设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。在整点进行提示,可通过LED闪烁实现,闪烁频率及花型可自己设计。能够调整小时和分钟的时间,调整的形式为通过按键进行累加。具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现。2.扩展功能设计模式选择计数器,通过计数器来控制各个功能之间转换。调整当前时间以及闹钟时间,在按键累加的功能不变的基础上,增加一个功能,即当按住累加键超过3秒,时间能够以4Hz的频率累加。用LCD液晶屏来显示当前时间及功能模式。二.设计分析及系统方案设计1.要求分析:基于FPGA实际并发处理的特点,对于实现数字万历年系统,相比于任何嵌入式处理器而言,其特点和优势将得以更加全面体现。数字万年历中所有模块都将基于基准时钟源进行处理,结合FPGA本身的特点,在时钟源下可进行精确计数,可轻易而产生十分精确的万年历时间。基础部分:万年历可包括以下时间处理模块:基于秒时钟计数器进行判断处理。①秒,分,时。②星期,上/下午。③日,月,年。④闹钟功能部分:①时间设定:使用四个按键进行控制,分别是:设置复位按键,设置移位键,功能“加”键,功能“减”键。②整点报时部分:使用7个绿色LED作为提示灯。③闹钟提示部分:使用16个红色LED作为闹钟报时提示。显示部分:使用LCD1602液晶显示屏作为万年历的主显示屏,闹钟显示部分使用6个7段数码管。2.方案设计基于FPGA的特点以及本万年历系统自身功能特点的实现方式。系统采用模块化方案进行设计。各个模块及其相关实现功能描述,同时具体的代码中模块设计将以此基础进行代码的编写,详细代码设计将在后面给出。-3-时钟发生模块:基于系统外部输入基准时钟源进行秒计数,产生秒时钟,在此基础上可进行相关判断已经在计数处理产生其他需要的时间信号。时钟处理模块:在时钟发生模块基础上,利用FPGA多模块并发处理特点,产生分钟,小时等基础信号,在此基础上再进行计数以及一些判断处理可容易产生星期,上/下午,日,月,年等信号。但需要注意的是以上所有万年历时钟信号的每位数(十进制)在底层均为4位二进制数表示,且由于FPGA中乘除法运算不可综合,在处理平闰年判断时,采用拼接语句,然后内嵌多个CASE语句进行处理实现该功能。以上所有万年历信号在其他模块处理时仍然需要进行相关转换或者译码。功能设定模块:这里主要是针对功能按键和一些状态开关。功能按键部分主要包括上述分析中的四个,即设置复位,设置移位,功能“加”,功能“减”。在代码编写时需要进行按键的消抖处理,同时,由于闹钟设定和时间设定时均用到,故需要进行设置复用,这里采用的方法是,以复位键为区分,长摁下后可进行万年历的时间设定,长摁下后在短按一下返回正常状态,而闹钟设定需要在闹钟开关有效状态下,上述的功能键方有效。功能开关主要控制整个系统的复位,闹钟开关,液晶显示屏的读写开关,背光,读写等,这里全部采用二状态的拨码开关实现。显示模块:采用液晶屏1602作为数字万年历的主显示屏,由于屏幕显示字符数量有限,再考虑本课程设计的综合全面性,这里闹钟显示部分采用6位数码管作为显示。本模块主要功能是实现1602的驱动显示程序,数码管的译码驱动程序。闹钟模块:对闹钟寄存器的值与万年历实现时钟的值进行判断处理,并驱动红色LED灯闪烁实现闹钟的报时提示。红色LED的效果设定为整体闪烁。整点报时模块:对万年历实时时钟的分钟和秒钟进行判断处理,实现在每个小时的整点报时功能,报时10秒钟,即从59分50秒开始进行报时。以绿色LED灯作为提示,实现效果是流水闪动。三.系统以及模块硬件电路设计1.系统总体结构框图基于上述方案分析,以FPGA芯片CycloneIIEP2C35F672C6为核心构建的数字万年历系统的硬件总体结构框图如下:FPGA最小系统CycloneIIEP2C35F672C6万年历显示屏模块LCD1602液晶显示屏整点报时模块绿色LED闪烁灯闹钟提示模块红色LED闪烁灯闹钟显示模块7段数码管万年历设置模块功能按键系统设置模块功能拨码开关-4-2.各个硬件模块接口电路图以上各个模块实际硬件接口电路如下:①FPGA最小系统电源及控制电路I/O接口BANK1和BANK2-5-I/O接口BANK3和BANK4I/O接口BANK5和BANK6I/O接口BANK7和BANK8-6-②万年历显示屏模块(LCD1602液晶显示屏)③闹钟显示模块(7端数码管)注:本系统只用了开发板上的6位数码管作为闹钟显示,即数码管7—3④整点报时模块(绿色LED闪烁灯)-7-⑤闹钟提示模块(红色LED闪烁灯)⑥万年历设置模块(功能按键)⑦系统设置模块(功能拨码开关)注:本系统只用到了开发板上的以上几个拨码开关作为系统控制3.系统芯片管脚配置情况数字万年历系统I/O配置表:接口名称类型(输入/输出)结构图上的信号名引脚号说明时钟输入clkD13系统输出时钟源系统复位输入rst_nP25系统复位开关时间设定输入key_rG26设定复位按键设定移位输入key_yiN23设定移位按键设定/加输入key_jiaP23功能“加”按键设定/减输入key_jianW26功能“减”按键闹钟设定输入alr_clk_setN26闹钟设定开关闹钟开关输入alr_clk_swN25闹钟开关控制开关-8-1602开关输入sw3AF14液晶屏显示开关控制开关1602背光输入sw2AE14液晶屏背光开关控制开关1602读写控制输入sw1AD13液晶显示屏读写控制开关1602开关输出lcd_onL4液晶屏开关控制输出1602背光输出lcd_blonK2液晶屏背光控制输出1602读写控制输出rwK4液晶显示屏读写控制输出1602使能端输出enK3液晶显示屏使能输出1602数据/命令输出rsK1液晶显示屏命令/数据选择输出1602数据(8位)输出data[7…0]—液晶屏并行数据输出数码管7(7位)输出seg7[6…0]—数码管7并行数据输出数码管6(7位)输出seg6[6…0]—数码管6并行数据输出数码管5(7位)输出seg5[6…0]—数码管5并行数据输出数码管4(7位)输出seg4[6…0]—数码管4并行数据输出绿色LED灯输出led_g[7…0]—整点报时绿色LED灯输出红色LED灯输出alr_led_g[15…0]—闹钟报时红色LED灯输出四.系统的Verilog设计1.根据上述分析设计,系统的代码编写可分为如下三个模块文件实现:①key_scan模块文件模块功能及其实现算法描述:功能:四个设置按键的消抖及其处理,产生在长按下复位键下的有效状态送万年历时间设定,以及在闹钟有效状态下的按键输出。算法描述:每个消抖处理才用延迟打两拍的处理方法实现消抖20毫秒,其中对于设定复位按键设定长按下达3S为有效输出,短按一下置无效,在设置复位有效状态下其他三个按键对于万年历时钟部分方有效。在闹钟设置开关有效状态下,其他三个按键对于闹钟设定有效。②clock模块文件模块功能及其实现算法描述:功能:万年历时间产生模块,包括时间中的秒,分,时,星期,上/下日,月,年的产生和处理,闹钟寄存器的设置,整点报时的处理及输出显示,闹钟报时的处理及显示。算法描述:对于秒,分,时,中的每一位十进制数,代码中定义一个4位二进制数来表示(如秒时间定义2个4位二进制数表示秒的十位和个位),采用逐级计数的方法产生相应的时间信号,在设置按键有效或者前一级时间信号产生进位时,当前时间相应加1或者减一,以此类推产生更高级的时间信号(如分对于秒来说有高级信号,秒满60对分信号为进一信号),在日,月模块的判断处理才有内嵌多个case语句的方法实现,而平润年的判断则采用对年份的十位和个位拼接利用case语句判断在非整百年下是否为闰年,而对于整百年情况下再拼接年的百位和千位,再内嵌一个case语句用同样的方法进行判断是否为闰年。③display模块文件功能:液晶显示屏的驱动,万年历时间译码成1602的ASCII码字符,-9-闹钟寄存器的译码及6个7段数码管的驱动。算法描述:根据液晶显示屏1602的驱动时序图(如下图,由于本系统只用到了1602的写时序,故读时序不给出),可编写1602的状态机驱动,有时序图可知,初始化是,RS=0,EN=0状态下,下一个状态送出命令数据,再下一个状态将EN=1,即产生高脉冲信号,完成一次命令的初始化,相应显示输出一个字符驱动方法也也一直,只需将上述的RS=1即可,驱动状态机如下图。相应的ASCII码译码详见源代码。对于闹钟的译码也详见源代码。数码管的驱动直接才有并行数据输出即可。Lcd1602液晶显示屏写时序图LCD1602驱动状态机④顶层模块为:clk_16022.系统Verilog代码软件分析综合结果系统Verilog模块综合的RTL视图如下:状态1状态2状态3RS=0Data=命令字EN=0EN=1写一次命令字状态n状态n+1状态n+2RS=1Data=数据EN=0EN=1写一次数据状态n+…完成初始化完成1602写整屏-10-系统综合报告如下:3.系统代码的重要变量及模块名称由于系统代码量较大,其中涉及的寄存器变量较多,always块语句较多,在源代码的各个文件模块里面均有详细的注释说明,这里不一一列举,详见源代码。五.结论以及结果说明1.系统开发环境:PC机一台:WindosXP综合开发软件:QuartusII9.1仿真软件:modelsim6.5-11-2.系统运行环境:AlteraDE2-115FPGA开发实验板3.系统调试仿真结果对数字万年历本身的特点,波形仿真无法进行,同时限于实验学时以及自身水平的限制,对于Testbench编写能力不足,已经缺乏对仿真软件modelsim6.5的应用,故本系统没有进行相关仿真,而是着重进行了调试,调试方法采用基于开发板的实验现象,采用单模块调试,多模块组合调试等多种方法相结合的调试方法进行,确保了每个小模块功能的正常及整个系统的稳定运行。4.系统运行结果系统实现功能和结果如下:系统正常运行时,按万年历实时时钟的功能正常运行,其中,液晶显示屏1602越每600毫秒更新一次。若系统复位开关复位,系统所有数据复位,按下载时的初始化时间重新运行,即实现可手动复位。在每个59分50秒开始,整点报时绿色LED以流水效果进行闪烁,闪烁时间10秒,即整点时停止。在闹钟开关开情况下,数码管显示当前闹钟时间,并且到时钟走到相应闹钟设定时间时,红色LED以闪动效果进行闹钟报时提示,持续一分钟后停止。在闹钟开关关闭状态下,数码管灭,相应闹铃功能关闭。在闹钟设置开关有效状态下,按下功能“加”键,闹钟的分钟的个位加1,按下功能“减”则该位减1,若按下设置移位键后,再按功能“加”或“减”,则分钟的十位加1或者减1。由此循环,实现任意修改闹钟。只有在长按下设置复位键达3秒时,液晶显示屏上秒的个位有光标闪烁,表示可修改该位,功能“加”和“减”键可实现加1或减1。若此时按下设置移位键,则光标移到秒的十位闪烁。如此循环,实现可任意修改液晶显示屏万年历上的任一时间量。其中上/下午为系统自动判断,无须修改。若想退出修改状态,此时,短按一下设置复位键即可退出,系统正常状态下,短按设置复位键无效。系统还设置了液晶显示屏的背光开关,显
本文标题:数字电路课程设计---基于1602液晶屏的数字万年历(Verilog版)
链接地址:https://www.777doc.com/doc-7110893 .html