学习笔记-fpga设计电子时钟12864显示.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学习笔记-fpga设计电子时钟12864显示

fpga设计电子时钟(12864显示) 设计心得: 1,进行分块设计,类似调用函数,脉冲使能 2,充分了解fpga的并行特性(c程序的串行特性,不能并行处理,线性:只有完成了当前任务,才能进行下一个任务) 设计问题: 1,似乎读有问题,在char_LR=1时,写的数据为汉字 (程序中时间没有更改,主要为了调试看波形) 实际板子验证时,将LCD_clk模块中的分频调为50到100kHz左右 整体架构 功能模块 液晶初始化时序 parameter Idle =8b0000_0001, Basic_com =8b0000_0010, //basic instruction:0x30 Disp_set =8b0000_0100, //set show curse bling DDRAM_clear =8b0000_1000, //colunm address X Wait_clear =8b0001_0000, Point_set =8b0010_0000, Show_on =8b0100_0000, Stop =8b1000_0000; 写字符的时序 由于字符属于半宽字形,且DDRAM形式下,每行只有8个地址,而字符可以写16个,因此用下面三个来表示写的地址: input [1:0] Y, //row 0-3 input [2:0] X, //clunm 0-7 input LR, //0/1 因此当LR=0时,直接写地址,然后写一个字符编码即可 LR=1时,先写地址,读出高位数据,然后写入两个字节(读出的数据,要写的数据) parameter Idle =8b0000_0001, DDRAM =8b0000_0010, //drawing mode W_addr =8b0000_0100, //row address Y Dummy =8b0000_1000, // not really reading R_data =8b0001_0000, //reading high byte data W0_data =8b0010_0000, W1_data =8b0100_0000, Stop =8b1000_0000; # t1: 0 t2: 2305, T: 10,n_init: 38 # t1: 2305 t2: 2665, T: 10,n_char: 6 # t1: 2665 t2: 3265, T: 10,n_char: 10 完成了上述工作,就可以设计一个简单的电子时钟,其要求如下: 在屏幕上显示时间 00:00:00 要动态走 (主要就是控制脉冲信号的产生) 设计思路: 1,按下复位键,系统复位,时间变为00:00:00 2,每一秒中时分秒数据更改 3,一秒钟时间到,产生8个字符写的脉冲,LCD更新数据显示 00:00:01 00:01:59 1代码 /* sign.v //creat the control sign clock h:m:s */ module sign( //module LED( input lcd_clk, //100kHz input sys_rst, output reg lcd_char_en, output reg lcd_init_en, output reg [7:0]char_data, output reg [2:0]char_X, output reg [1:0]char_Y, output reg char_LR ); parameter T_w_char = 5, T_lcd_init = 40; reg [47:0] time_out; /* 1s */ reg [16:0] cnt_s; reg [5:0] cnt0_clk; reg [3:0] cnt1_clk; reg [2:0] cnt_char; reg [5:0] sec,min; reg [4:0] hour; reg flag_s,flag_init; always @ (posedge lcd_clk or negedge sys_rst) begin //100kHz if(!sys_rst) begin cnt_s =0; cnt0_clk=0; cnt1_clk=0; cnt_char=0; sec =

文档评论(0)

lifupingb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档