基于LCD1602的简易秒表的设计与实现.doc
《基于LCD1602的简易秒表的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于LCD1602的简易秒表的设计与实现.doc(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数字电路与逻辑设计实验报告学院: 电子工程学院班级: 2014211212姓名:学号: 班内序号:第 30 页 共 30 页一、 设计课题的任务要求简易秒表的设计与实现设计制作一个计时精度为百分之一秒的计时秒表基本要求:1. 用LCD1602液晶屏显示计时;2. 秒表计时长度为23小时59分59.99秒;3. 用BTN0作为启动/停止开关;4. 用BTN1作为复位开关,在任何情况下,只要按下复位开关,秒表都要无条件执行清零操作。提高要求:1。增加定时器功能,可根据用户设定的时间进行倒计时,时间到0后蜂鸣器报警提示;2.自拟其他功能.二、 系统设计(设计思路、总体框图、分块设计)1. 设计思路:
2、分别设计6进制计数器、10进制计数器和24进制计数器用于秒表计时部分。具体来说:将两个10进制计数器级联分别作为秒表的十分秒位(最小单位为0。1秒)和百分秒位(最小单位为0。01秒);将一个10进制计数器和6进制计数器级联,分别作为秒表秒钟部分的个位(最小单位为1秒)和十位(最小单位为10秒);再将一个10进制计数器和6进制计数器级联,分别作为秒表分钟部分的个位(最小单位为1分钟)和十位(最小单位为10分钟);将24进制计数器作为秒表小时部分,其中低位输出作为秒表小时部分的个位(最小单位为1小时),高位输出作为秒表小时部分的十位(最小单位为10小时)。最后把秒表百分秒、十分秒部分、秒钟部分、分
3、钟部分、小时部分这四部分级联起来便构成了简易数字秒表的计时部分。将各个计数器部分的输出信号通过译码模块,变成LCD1602液晶屏能够读取并从而显示相关字符的8位二进制数据。再定义一个存储器ram,存储各个计数器部分的输出信号经过译码部分之后得到的数据,然后将这个存储器ram代表的数据在LCD1602液晶屏上显示。考虑到秒表的最小计时长度为0.01秒(频率为100HZ),如果系统时钟设置为50MHZ,则需要500000分频;实验时发现LCD1602液晶屏的时钟在1KHZ时,显示效果较好,故需要在系统时钟为50MHZ的基础上进行50000分频。考虑到基本要求中需要用BTN0作为启动/停止开关,用B
4、TN1作为复位开关,所以需要设计相应的按键防抖电路,这里我采用的是计数型防抖。2. 总体框图:图1系统结构框图3. 分块设计:系统共通过9个模块实现,分别是:500000分频模块fpq50000分频模块fpq16进制计数器模块cnt610进制计数器模块cnt1024进制计数器模块cnt24译码模块yimaLCD1602显示模块LCD1602BTN0启动/停止开关消抖模块xiaodouBTN1复位开关消抖模块fuweixiaodou具体设计如下:500000分频模块fpq输入端口:clk :in std_logic;输出端口:clkout : out std_logic;生成符号:设计思路:利用
5、计数法实现分频主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 249999; beginprocess (clk)beginif clkevent and clk=1 thenif tmp=249999 then-500000分频tmp=0; clktmp=not clktmp;else tmp=tmp+1;end if;end if;end process;clkout=clktmp;50000分频模块fpq1:输入端口:clk :in std_logic;输出端口:clkout : out
6、std_logic;生成符号:设计思路:利用计数法实现分频主要代码:(完整代码请见源程序)signal clktmp : std_logic;signal tmp : integer range 0 to 24999; beginprocess (clk)beginif clkevent and clk=1 thenif tmp=24999 then-50000分频tmp=0; clktmp=not clktmp;else tmp=tmp+1;end if;end if;end process;clkout12-34-5-01;当计数到5时,进位信号变为1;否则状态自增,进位信号保持在0主要代
7、码:(完整代码请见源程序)SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk)begin IF(reset=1)THEN qs=”0000”;ELSIF(clkEVENT AND clk=1)THENIF(en=0) THENIF(qs=0101) THEN计数到5qs= ”0000;ca1-2-3-4-5678901当计数到9时,进位信号变为1;否则状态自增,进位信号保持在0主要代码:(完整代码请见源程序)SIGNAL qs :STD_LOGIC_VECTOR(3 DOWNTO 0);
8、 SIGNAL ca :STD_LOGIC;BEGIN PROCESS(clk)begin IF(reset=1)THEN qs=0000”;ELSIF(clkEVENT AND clk=1)THENIF(en=0) THEN IF(qs=1001”) THEN 计数到9qs= ”0000”;ca=1;ELSEqs=qs+1;ca12-3-45-6-78-9-01高位qb状态变化:01-2-0-1当低位qa计数到9时,qb自增,进位信号保持在0当低位qa为3且高位qb为2时,进位信号变为1, 同时qa变为0、qb变为0主要代码:(完整代码请见源程序)SIGNAL ca :STD_LOGIC;B
9、EGINprocess(clk,Reset,en)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0);beginIf Reset = 1 then tma:=”0000”; tmb:=”0000”; else if clkevent and clk=1 then IF(en=0) THEN-当BTN0键没有第一次按下时,正常计数 if tma=1001 then tma:=0000”;tmb:=tmb+1;elsif tmb=”0010” and tma=”0011” the
10、n -计数到23tma:=0000”;tmb:=0000; ca=1;else tma:=tma+1; end if; end if;end if; end if; qa=tma;qb=tmb;carrydisdis=”00110001;-1译为”31”when 0010=dis=00110010”;-2译为32when 0011=disdisdisdisdis=”00111001;-9译为”39” when others=dis=00100000”;-其他译为”20”end case;end if;end process;dataout=dis;LCD1602显示模块LCD1602: 输入端
11、口:YIMA_DATA1: in std_logic_vector(7 downto 0); -译码数据信号1YIMA_DATA2: in std_logic_vector(7 downto 0); -译码数据信号2YIMA_DATA3: in std_logic_vector(7 downto 0); -译码数据信号3YIMA_DATA4: in std_logic_vector(7 downto 0); -译码数据信号4YIMA_DATA5: in std_logic_vector(7 downto 0); -译码数据信号5YIMA_DATA6: in std_logic_vector(7
12、 downto 0); -译码数据信号6YIMA_DATA7: in std_logic_vector(7 downto 0); -译码数据信号7 YIMA_DATA8: in std_logic_vector(7 downto 0); 译码数据信号8LCD_Clk : in std_logic; -状态机时钟信号,同时也是液晶时钟信号,其周期应该满足液晶数据的建立时间carry : in STD_LOGIC;输出端口:LCD_RS : out std_logic; -寄存器选择信号LCD_RW : out std_logic; -液晶读写信号 LCD_EN : out std_logic;
13、-液晶时钟信号 LCD_Data : out std_logic_vector(7 downto 0); -液晶数据信号 生成符号:设计思路:将各个计数器部分的输出信号通过译码模块,变成LCD1602液晶屏能够读取并从而显示相关字符的8位二进制数据.再定义一个存储器ram,存储各个计数器部分的输出信号经过译码部分之后得到的数据,然后将这个存储器ram代表的数据在LCD1602液晶屏上显示。主要代码:(完整代码请见源程序)type ram is array(0 to 10) of std_logic_vector(7 downto 0);signal ram1:ram;beginLCD_EN =
14、 LCD_Clk ; -液晶时钟信号LCD_RW = 0 ; 液晶读写信号ram1(0)=YIMA_DATA8;译码数据信号8,秒表小时部分十位ram1(1)=YIMA_DATA7;-译码数据信号7,秒表小时部分个位 ram1(2)=x”3a”;-显示冒号:ram1(3)=YIMA_DATA6;-译码数据信号6,秒表分钟部分十位ram1(4)=YIMA_DATA5;-译码数据信号5,秒表分钟部分个位ram1(5)=x3a”;-显示冒号: ram1(6)=YIMA_DATA4;译码数据信号4,秒表秒钟部分十位ram1(7)=YIMA_DATA3;-译码数据信号3,秒表秒钟部分个位ram1(8)=
15、x”2e;-显示小数点.ram1(9)=YIMA_DATA2;-译码数据信号2,秒表十分秒位 ram1(10)LCD_RS=0;lcd_data=00111000;0x38when 1 =LCD_RS=0;lcd_data=”00001100”;-0x0Cwhen 2 =LCD_RSLCD_RS=0;lcd_data=”00000110”;-0x06- when 4 =LCD_RSLCD_RS=1;lcd_dataLCD_RS=1;lcd_data=10100000”;-空格 when 7=LCD_RS=1;lcd_dataLCD_RSLCD_RS=1;lcd_data=ram1(1);-秒表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 LCD1602 简易 秒表 设计 实现
限制150内