电子技术课程设计-可编程时钟控制器

来源:程序员 发布时间:2021-01-13 点击:

电子技术课程设计可编程时钟控制器 目录 设计功能要求 3 方案分析选择与系统框图 4 模块功能分析 6 仿真\下载结果 9 主要经验 10 操作指南 11 相关代码 12 设计功能要求 一.设计任务 数字钟不仅可以通过数字直观地显示日历,时间,用音乐及语言报时,还可以定时发出各种声,光,电信号,以及启动各种设备实现实时控制,时间顺序控制.如作息时间自动打铃,家电设备自动定时启动/停止,生产过程顺序控制等,用途很广.本课题的要求是: 1/设计一个具有时,分,秒计时,6位数字显示的时钟电路. 2/具有快速校准时,分的校时功能. 3/具有仿电台的自动整点报时功能或者发出与整点数目相等的音响声. 4/具有一定的扩展功能 二.设计要求 1/分析设计任务,拟定多种设计方案,根据当时的制作条件选择其中一种方案绘制系统框图和设计流程. 2/设计各部分单元电路或编写VHDL描述程序,计算元器件参数,确定元器件型号和数量,提出元件清单. 3/安装调试硬件电路或制作CPLD/FPGA为基础的专用集成芯片ASIC. 4/对制作的电路进行功能测试,分析各项技术指标,或对VHDL描述进行功能仿真,对ASIC作硬件测试或脱机运行. 5/总结设计各环节的资料,整理打印出设计报告(含原理电路,仿真波形).交验并演示设计制作的电路装置. 方案分析选择与系统框图 方案分析选择 1/使用的是开发板,故选择编写VHDL描述程序,并结合AltiumDesigner中提供的元件绘制原理图,下载到开发板上. 2/开发板上的资源包括:LCD显示屏,蜂鸣器,键盘,拨盘开关,各种频率的方波信号,各种对外接口,LED灯等. 根据板上资源和需要实现的功能,我选择了使用以下板上资源,并实现以下功能: LCD显示屏---用于显示时分秒计时 蜂鸣器---用于整点报时与闹铃功能 拨盘开关---用于时间设定,闹铃设定与声音开关 方波信号---经过分频后作为时钟信号输入和蜂鸣器发声 系统原理框图 整点报时模块 声音模块 蜂鸣器 存储器模块 控制模块 拨盘开关 信号发生器 时钟显示模块 LCD显示屏 计时模块 硬件原理图 模块功能分析 计时模块 计时模块具有时,分,秒的计时功能,每收到一个时钟信号,秒个位计算加一,在各个位加满时,重新置零,并向下一位进一.同时,输出端口会把秒个位,秒十位,分个位,分十位,时个位,时十位的8位数字信号输出到各个模块. 显示模块 LCD显示模块需要将显示代码与位置代码输入控制模块并给与脉冲,就会在相应的位置显示相应的字符,为了使得显示没有滞后,因此给较高的脉冲频率.因为我们要显示时分秒一共6位数字,因此需要写一个LCD扫描输出模块,时刻显示变化的时间. LCD扫描输出需要把计时模块输出的8位BCD码加上48转化为ASC2码.并且在时分秒之间加入冒号区分. 存储器模块 存储器模块的地址信号为计时模块的分个位,分十位,时个位,时十位有效位,写入的信号由拨盘开关sw4控制,输出的信号到声音模块的使能.写入开关由拨盘开关sw3控制.在需要闹铃的时间写入一,那么就会读出一,对声音模块使能,使其发声. 整点报时模块 整点报时模块的输入取上图的几个关键数据,当这些数据都为1时,此时为整点报时的时间,则对声音模块使能,使其发声. 声音模块 声音模块包括音调选择以及开关整点报时与闹铃的模块.用来实现不同的要求与功能. 仿真\下载结果 计时模块仿真图 下载结果 第一次下载的时候,因为很多地方都不知道,不是没接好线就是没有改名字,造成编译正常但是无法下载的结果.后来通过自己的摸索与请教他人,终于实现了下载.但是下载后又发现了许多意想不到的错误.用了很长的时间,我才把这些都弄清楚并且解决掉.最后终于实现了自己的预定功能. 主要经验 在电子技术课程设计之前,我先做了单片机课程设计.做单片机课程设计的时候,是一边拿着板子一边不断下载测试,一点点完善程序的,但是当我做电子技术课程设计时,因为板子不在身边,所以自己在寝室写的程序无法验证.因此在这些地方浪费了很多时间,直到我在实验室待了两天时间,才把问题解决掉.所以我明白,做这种设计,必须不断的实践测试,才能知道自己不足在哪里,才知道设计有什么不完善的地方.无论做什么事,如果你手边有实验的条件,那么做什么事,学习什么东西都可以事半功倍. 还有,经验很重要.如果是一开始什么都没有做过,那么各种各样的问题会接踵而来,而且你不知道从何解决.但是当你有了经验后,就可以很快知道究竟在什么地方出现了问题.在开始阶段,如果有一个老师,那一定是无比幸运的事情.他能够告诉你你需要知道什么,能够告诉你如何发现错误,那样就节省了很多自己摸索的时间. 最后一点,要知道规则,如果连语言规则和软件规则都不知道,那么怎么能好好地设计呢?靠自己的摸索想要摸索规则不是不可以,但是也会花太多的时间.所以如果在开始阶段能够看几本基础的书,不需要记住,只要有印象,那么以后在碰到问题的时候就知道在哪里可以找到解决方法,就可以容易地学习好这个课程. 总结起来,电子技术课程设计的学习,如果有3点条件,就可以比较简单的入门了. 1/看关于语言规则,软件操作的书.熟悉基础. 2/多做实验,从实验中获得丰富的经验. 3/多向别人请教. 操作指南 本设计使用拨盘开关作为控制输入. sw0为LCD灯开关,打上为关,打下为开. sw1为闹铃开关,打上为关,打下开. sw2为整点报时开关, 打上为关,打下开. sw3为闹铃写入开关,打上为关,打下为RAM写入模式,此时可以利用sw4设定闹铃. sw4为闹铃设定开关,在sw3为写入时有效,打上为取消闹铃,打下为设定闹铃. sw5为时调整,打上为关,打下为开始时调整,此时分秒均置为零,时以每秒1的速度增加. sw6为分十位调整, 打上为关,打下为开始分十位调整,此时分个位和秒均置为零,分十位以每秒1的速度增加. sw7为分十位调整, 打上为关,打下为开始分个位调整,此时秒均置为零,分个位以每秒1的速度增加. 提醒,调整时间时,应按一下顺序调整.时-分十位-分个位 相关代码 整点报时音调选择模块 chose.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity chose is port ( en,chosein,clkin1,clkin2: in std_logic; clkout: out std_logic ); end chose; architecture change of chose is begin process(clkin1,clkin2,en,chosein) begin if en='1' then if chosein='1' then clkout<=clkin1; else clkout<=clkin2; end if; else clkout<='1'; end if; end process; end change; 计时模块 counter.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity counter is port ( clk,changemint,changemino,changeh: in std_logic; so,st,mino,mint,ho,ht: buffer std_logic_vector(7 downto 0) ); end counter; architecture add of counter is begin process(clk,so,st,mino,mint,ho,ht,changemint,changemino,changeh) begin if rising_edge(clk) then so<=so+1; if so=x“09“ then st<=st+1; so<=x“00“; end if; if (st=x“05“ and so=x“09“) or changemino='1' then mino<=mino+1; st<=x“00“; so<=x“00“; end if; if (mino=x“09“ and st=x“05“ and so=x“09“) or changemint='1'or (changemino='1' and mino=x“09“) then mint<=mint+1; mino<=x“00“; st<=x“00“; so<=x“00“; end if; if (mint=x“05“ and mino=x“09“ and st=x“05“ and so=x“09“) or changeh='1' or (changemint='1' and mint=x“05“) or (changemino='1' and mino=x“09“ and mint=x“5“) then ho<=ho+1; mint<=x“00“; mino<=x“00“; st<=x“00“; so<=x“00“; end if; if( ho=x“09“ and mint=x“05“ and mino=x“09“ and st=x“05“ and so=x“09“) or (changeh='1' and ho=x“09“) then ht<=ht+1; ho<=x“00“; mino<=x“00“; st<=x“00“; so<=x“00“; mint<=x“00“; end if; if(ht=x“02“ and ho=x“03“ and mint=x“05“ and mino=x“09“ and st=x“05“ and so=x“09“) or (changeh='1' and ht=x“02“ and ho=x“03“) then ht<=x“00“; ho<=x“00“; mino<=x“00“; st<=x“00“; so<=x“00“; end if; end if; end process; end add; 声音开关模块 onoff.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity onoff is port ( en,clkin: in std_logic; clkout: out std_logic ); end onoff; architecture en of onoff is begin process(clkin,en) begin if en='1' then clkout<=clkin; else clkout<='1'; end if; end process; end en; 闹铃音乐模块 ring.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ring is port ( clkin1,clkin2,clkin3,clkin4,clk,en: in std_logic; clkout: out std_logic ); end ring; architecture change of ring is signal num : integer; begin process(clk,num,clkin1,clkin2,clkin3,clkin4,en) begin if en='1' then if rising_edge(clk) then num<=num+1; end if; if num=9 then num<=0; end if; if num=1 then clkout<=clkin1; elsif num=2 then clkout<=clkin2; elsif num=3 then clkout<=clkin3; elsif num=4 then clkout<=clkin4; elsif num=5 then clkout<=clkin4; elsif num=6 then clkout<=clkin3; elsif num=7 then clkout<=clkin2; elsif num=8 then clkout<=clkin1; end if; else clkout<='1'; end if; end process; end change; 显示扫屏模块 show.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity show is port ( clk: in std_logic; data1,data2,data3,data4,data5,data6: in std_logic_vector(7 downto 0); add: out std_logic_vector(3 downto 0); dataout: out std_logic_vector(7 downto 0) ); end show; architecture change of show is signal num : integer; begin process(clk,data1,data2,data3,data4,data5,data6,num) begin if rising_edge(clk) then num<=num+1; if num=7 then num<=0; end if; end if; if num=0 then add<=x“1“; dataout<=data1+x“30“; elsif num=1 then add<=x“2“; dataout<=data2+x“30“; elsif num=2 then add<=x“3“; dataout<=x“3a“; elsif num=3 then add<=x“4“; dataout<=data3+x“30“; elsif num=4 then add<=x“5“; dataout<=data4+x“30“; elsif num=5 then add<=x“6“; dataout<=x“3a“; elsif num=6 then add<=x“7“; dataout<=data5+x“30“; elsif num=7 then add<=x“8“; dataout<=data6+x“30“; end if; end process; end change; 整点报时声音使能模块 sound.vhd library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity sound is port ( timein: in std_logic_vector(7 downto 0); enout: out std_logic ); end sound; architecture en of sound is begin process(timein) begin if timein=x“ff“ then enout<='1'; else enout<='0'; end if; end process; end en;

推荐访问:
上一篇:年9月话务员岗前培训工作总结
下一篇:年9月房产评估工作总结

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有