
怎样写数字时钟设计的心得
题 目: 数字钟的设计心得学 年: 学 期: 专 业: 班 级: 学 号: 姓 名: 指导教师及职称: 时 间: 一、设计目的1. 熟悉集成电路的引脚安排。
2. 掌握各芯片的逻辑功能及使用方法。
3. 了解面包板结构及其接线方法。
4. 了解数字钟的组成及工作原理。
5. 熟悉数字钟的设计与制作。
二、设计要求1.设计指标时间以24小时为一个周期;显示时、分、秒;有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
2.设计要求画出电路原理图(或仿真电路图);元器件及参数选择;电路仿真与调试;PCB文件生成与打印输出。
3.制作要求 自行装配和调试,并能发现问题和解决问题。
4.编写设计报告 写出设计与制作的全过程,附上有关资料和图纸,有心得体会。
三、设计原理及其框图1.数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路构成数字钟。
图 3-1所示为数字钟的一般构成框图。
图3-1 数字钟的组成框图⑴晶体振荡器电路 晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵分频器电路 分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数。
分频器实际上也就是计数器。
⑶时间计数器电路 时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
⑷译码驱动电路 译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
⑸数码管 数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
2.数字钟的工作原理1)晶体振荡器电路晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定。
图3-2所示电路通过CMOS非门构成的输出为方波的数字式晶体振荡电路,这个电路中,CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。
输出反馈电 阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。
电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。
由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。
晶体XTAL的频率选为32768HZ。
该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。
从有关手册中,可查得C1、C2均为30pF。
当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施。
由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10MΩ。
较高的反馈电阻有利于提高振荡频率的稳定性。
非门电路可选74HC00。
图3-2 COMS晶体振荡器2)分频器电路通常,数字钟的晶体振荡器输出频率较高,为了得到1Hz的秒信号输入,需要对振荡器的输出信号进行分频。
通常实现分频器的电路是计数器电路,一般采用多级2进制计数器来实现。
例如,将32768Hz的振荡信号分频为1HZ的分频倍数为32768(215),即实现该分频功能的计数器相当于15极2进制计数器。
常用的2进制计数器有74HC393等。
本实验中采用CD4060来构成分频电路。
CD4060在数字集成电路中可实现的分频次数最高,而且CD4060还包含振荡电路所需的非门,使用更为方便。
CD4060计数为14级2进制计数器,可以将32768HZ的信号分频为2HZ,其内部框图如图3-3所示,从图中可以看出,CD4060的时钟输入端两个串接的非门,因此可以直接实现振荡和分频的功能。
图3-3 CD4046内部框图3)时间计数单元时间计数单元有时计数、分计数和秒计数等几个部分。
时计数单元一般为12进制计数器计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
一般采用10进制计数器74HC390来实现时间计数单元的计数功能。
为减少器件使用数量,可选74HC390,其内部逻辑框图如图 2.3所示。
该器件为双2—5-10异步计数器,并且每一计数器均提供一个异步清零端(高电平有效)。
图3-4 74HC390(1\\\/2)内部逻辑框图秒个位计数单元为10进制计数器,无需进制转换,只需将QA与CPB(下降沿有效)相连即可。
CPA(下降没效)与1HZ秒输入信号相连,Q3可作为向上的进位信号与十位计数单元的CPA相连。
秒十位计数单元为6进制计数器,需要进制转换。
将10进制计数器转换为6进制计数器的电路连接方法如图3-5所示,其中Q2可作为向上的进位信号与分个位的计数单元的CPA相连。
图3-5 10进制——6进制计数器转换电路分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的Q3作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的Q2作为向上的进位信号应与时个位计数单元的CPA相连。
时个位计数单元电路结构仍与秒或个位计数单元相同,但是要求,整个时计数单元应为12进制计数器,不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行12进制转换。
利用1片74HC390实现12进制计数功能的电路如图3-6所示。
另外,图3-6所示电路中,尚余-2进制计数单元,正好可作为分频器2HZ输出信号转化为1HZ信号之用。
图3-6 12进制计数器电路4)译码驱动及显示单元计数器实现了对时间的累计以8421BCD码形式输出,选用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流,选用CD4511作为显示译码电路,选用LED数码管作为显示单元电路。
5)校时电源电路当重新接通电源或走时出现误差时都需要对时间进行校正。
通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。
根据要求,数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,并采用正常计时信号与校正信号可以随时切换的电路接入其中。
图3-7所示即为带有基本RS触发器的校时电路,图3-7 带有消抖动电路的校正电路6)整点报时电路一般时钟都应具备整点报时电路功能,即在时间出现整点前数秒内,数字钟会自动报时,以示提醒。
其作用方式是发出连续的或有节奏的音频声波,较复杂的也可以是实时语音提示。
根据要求,电路应在整点前10秒钟内开始整点报时,即当时间在59分50秒到59分59秒期间时,报时电路报时控制信号。
报时电路选74HC30,选蜂鸣器为电声器件。
四、元器件1.实验中所需的器材5V电源。
面包板1块。
示波器。
万用表。
镊子1把。
剪刀1把。
网络线2米\\\/人。
共阴八段数码管6个。
CD4511集成块6块。
CD4060集成块1块。
74HC390集成块3块。
74HC51集成块1块。
74HC00集成块5块。
74HC30集成块1块。
10MΩ电阻5个。
500Ω电阻14个。
30p电容2个。
32.768k时钟晶体1个。
蜂鸣器。
2.芯片内部结构图及引脚图图4-1 7400 四2输入与非门 图4-2 CD4511BCD七段译码\\\/驱动器图4-3 CD4060BD 图4-4 74HC390D 图4-5 74HC51D 图4-6 74HC303.面包板内部结构图面包板右边一列上五组竖的相通,下五组竖的相通,面包板的左边上下分四组,每组中X、Y列(0-15相通,16-40相通,41-55相通,ABCDE相通,FGHIJ相通,E和F之间不相通。
五、个功能块电路图1. 一个CD4511和一个LED数码管连接成一个CD4511驱动电路,数码管可从0---9显示,以次来检查数码管的好坏,见附图5-1。
图5-1 4511驱动电路2. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00连接成一个十进制计数器,电路在晶振的作用下数码管从0—9显示,见附图5-2。
图5-2 74390十进制计数器3. 利用一个LED数码管,一块CD4511,一块74HC390,一块74HC00和一个晶振连接成一个六进制计数器,数码管从0—6显示,见附图5-3。
图5-3 74390六进制计数器4. 利用一个六进制电路和一个十进制连接成一个六十进制电路,电路可从0—59显示,见附图5-4。
图5-4 六十进制电路5. 利用两个六十进制的电路合成一个双六十进制电路,两个六十进制之间有进位,见附图5-5。
图5-5 双六十进制电路6. 利用CD4060、电阻及晶振连接成一个分频——晶振电路,见附图5-6。
图5-6 分频—晶振电路7. 利用74HC51D和74HC00及电阻连接成一个校时电路,见附图5-7。
图5-7 校时电路8. 利用74HC30和蜂鸣器连接成整点报时电路。
见附图5-8。
图5-8 整点报时电路9. 利用两个六十进制和一个十二进制连接成一个时、分、秒都会进位的电路总图,见附图5-9。
图5-9 时、分、秒的进位连接图六、总接线元件布局简图,见附图6-1七、芯片连接图见附图7-1八、总结1. 设计过程中遇到的问题及其解决方法。
1) 在检测面包板状况的过程中,出现本该相通的地方却未通的状况,后经检验发现是由于万用表笔尖未与面包板内部垂直接触所至。
2) 在检测CD4511驱动电路的过程中发现数码管不能正常显示的状况,经检验发现主要是由于接触不良的问题,其中包括线的接触不良和芯片的接触不良,在实验过程中,数码管有几段二极管时隐时现,有时会消失。
用5V电源对数码管进行检测,一端接地,另一端接触每一段二极管,发现二极管能正常显示的,再用万用表欧姆档检测每一根线是否接触良好,在检测过程中发现有几根线有时能接通,有时不能接通,把接触不好的线重新接过后发现能正常显示了。
其次是由于芯片接触不良的问题,用万用表欧姆档检测有几个引脚本该相通的地方却未通,而检测的导线状况良好,其解决方法为把CD4511的芯片拔出,根据面包板孔的的状况重新调整其引脚,使其正对于孔,再用力均匀地将芯片插入面包板中,此后发现能正常显示,本次实验中还发现一块坏的LED数码管和两块坏的CD4511,经更换后均能正常显示。
3) 在连接晶振的过程中,晶振无法起振。
在排除线与芯片的接触不良问题后重新对照电路图,发现是由于12脚未接地所至。
4) 在连接六进制的过程中,发现电路只能4、5的跳动,后经发现是由于接到与非门的引脚接错一根所至,经纠正后能正常显示。
5) 在连接校正电路的过程中,出现时和分都能正常校正时,但秒却受到影响,特别时一较分钟的时候秒乱跳,而不校时的时候,秒从40跳到59,然后又跳回40,分和秒之间无进位,电路在时、分、秒进位过程中能正常显示,故可排除芯片和连线的接触不良的问题。
经检查,校正电路的连线没有错误,后用万用表的直流电压档带电检测秒十位的QA、QB、QC和QD脚,发现QA脚时有电压时而无电压,再检测秒到分和分到时的进位端,发现是由于秒到分的进位未拔掉所至。
6) 在制作报时电路的过程中,发现蜂鸣器在57分59秒的时候就开始报时,后经检测电路发现是由于把74HC30芯片当16引脚的芯片来接,以至接线都错位,重新接线后能正常报时。
7) 连接分频电路时,把时个位的QD和时十位的1脚断开,然后时十位的1脚接到晶振的3脚,时十位的3脚接到秒个位的1脚,所连接的电路图无法正常工作,时十位从0-9的跳,时个位只能显示一个0,在这个电路中3脚的分频用到两次,故无法正常显示,因此要把12进制接到74HC390的一个逻辑电路空出来用于分频即可,因此把时十位的CD4511的12、6脚接地,7脚改为接74HC390的5脚,74HC390的3、4脚断开,然后4脚接9脚即可,其中空出的74HC390的3脚就可用于2Hz的分频,分频后变为1Hz,整个电路也到此为正常的数字钟计数。
2.设计体会在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
在连接六进制、十进制、六十进制的进位及十二进制的接法中,要求熟悉逻辑电路及其芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并及时纠正了。
在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如仿真的连接示意图中,往往没有接高电平的16脚或14脚以及接低电平的7脚或8脚,因此在实际的电路连接中往往容易遗漏。
又例如74HC390芯片,其本身就是一个十进制计数器,在仿真电路中必须连接反馈线才能正常显示,而在实际电路中无需再连接,因此仿真图和电路连接图还是有一定区别的。
在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的。
3.对该设计的建议此次的数字钟设计重在于仿真和接线,虽然能把电路图接出来,并能正常显示,但对于电路本身的原理并不是十分熟悉。
总的来说,通过这次的设计实验更进一步地增强了实验的动手能力。
数字钟实训报告怎么写
主要看你用什么来制作了 在数电课程有要求设计的,EDA中也有设计的
数字电子技术实习心得体会
心得体会 这一课程设我们将课堂上的理论知识有了进步的了解,并增强数字电子技术课程的兴趣。
了解了更多电子元件的工作原理,如:74LS138、74LS148、7448等。
同时也发现自对数电知识和电子设计软件掌握得不够。
其次在此次设计过程中由于我们频繁的使用一电子设计软件如:Proteus、protel等,因此使我进一步熟悉了软件的使用,同时在电脑的电子设计和绘图操作上进一步提高。
我认识到:数电设计每一步都要细心认真,因为任何一步出错的话,都会导致后面的环节发生错误。
比如在protel中画SCH电路时,就一定要细心确保全部无误,否则任何一个错误都会导致生成PCB板时发生错误,做成实物后就无可挽救了。
在PCB板的设计中,焊盘的大小,线路的大小,以及线间的距离等参数都要设置好,因为这关系到下一步的实物焊接。
在设计过程中遇到了一些问题,使得我查找各种相关资料,在增长知识的同时增强解决问题和动手的能力,锻炼我做事细心、用心、耐心的能力。
这一课程设计,使我向更高的精神和知识层次迈向一大步。
在以后的学习生活中,我会努力学习,培养自己独立思考的能力,积极参加多种设计活动,培养自己的综合能力,从而使得自己成为一个有综合能力的人才而更加适应社会。
跪求数字钟的设计与制作毕业论文一篇
摘要 第一章绪论 第二章数字时钟简介 1.1振荡器 1.2分频器电路 1.3计数器 1.4 译码显示电路 1.5校时电路 1.6报时电路 第三章设计步骤与方法 3.1振荡电路 3.2分频器电路 3.3计数器 3.3.1计数器六十进制的接法 3.3.2二十四进制计数器的接法 3.4译码显示电路 3.5校时电路 3.6整点报时电路 3.6.1控制门电路部分 3.6.2音响电路部分 第四章组装与调试 4.1接通电源逐步调试 4.2按顺序对电路连线和调试 总结 致 谢 参考文献
单片机数字钟课程设计小结
在小结中你所要阐述的内容:11、简述你所完成的工作;2、你在此过程中的收获;3、你的设计的不足之处以及你觉得应该如何改进至于具体的小结只有看了你的整个设计才可以写出,因为你的硬件设计软件设计别人都不知道,所以没法给你写。
EDA数字钟设计
1.Topclock(元件例化 顶层文件) Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity topclock is Port(clk,clr,en,m1,h1:in std_logic; alarm:out std_logic; secs,secg,mins,ming,hours,hourg:buffer std_logic_vector(3 downto 0)); End; 2. 秒模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic; sec1,sec0:out std_logic_vector(3 downto 0); co:out std_logic);end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clr='1' thencnt1:=0000;cnt0:=0000;elsif clk'event and clk='1' thenif cnt1=0101 and cnt0=1000 thenco<='1';cnt0:=1001;elsif cnt0<1001 thencnt0:=cnt0+1;elsecnt0:=0000;if cnt1<0101 thencnt1:=cnt1+1;elsecnt1:=0000;co<='0';end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;3.分模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(clk,en:in std_logic; min1,min0:out std_logic_vector(3 downto 0); co:out std_logic);end MINUTE;architecture MIN of MINUTE isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thenif en='1' thenif cnt1=0101 and cnt0=1000 thenco<='1';cnt0:=1001;elsif cnt0<1001 thencnt0:=cnt0+1;elsecnt0:=0000;if cnt1<0101 thencnt1:=cnt1+1;elsecnt1:=0000;co<='0';end if;end if;end if;end if;min1<=cnt1;min0<=cnt0;end process;end MIN;4.时模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity HOUR isport(clk,en:in std_logic; h1,h0:out std_logic_vector(3 downto 0));end HOUR;architecture hour_arc of HOUR isbeginprocess(clk)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thenif en='1' thenif cnt1=0010 and cnt0=0011 thencnt1:=0000;cnt0:=0000;elsif cnt0<1001 thencnt0:=cnt0+1;end if;end if;end if;h1<=cnt1;h0<=cnt0;end process;end hour_arc;----5.扫描模块程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SELTIME is port( clk:in std_logic; sec1,sec0,min1,min0,h1,h0:in std_logic_vector(3 downto 0); daout:out std_logic_vector(3 downto 0); sel:out std_logic_vector(2 downto 0));end SELTIME;architecture fun of SELTIME is signal count:std_logic_vector(2 downto 0);begin sel<=count; process(clk) begin if(clk'event and clk='1') then if(count>=101) then count<=000; else count<=count+1; end if; end if; case count is when000=>daout<= sec0; when001=>daout<= sec1; when010=>daout<= min0; when011=>daout<= min1; when100=>daout<=h0; when others =>daout<=h1; end case; end process;end fun;6.显示模块程序library ieee;use ieee.std_logic_1164.all;entity DISPLAY is port(d:in std_logic_vector(3 downto 0); q:out std_logic_vector(6 downto 0));end DISPLAY;architecture disp_are of DISPLAY isbegin process(d) begincase d is when0000 =>q<=0111111; when0001 =>q<=0000110; when0010 =>q<=1011011; when0011 =>q<=1001111; when0100 =>q<=1100110; when0101 =>q<=1101101; when0110 =>q<=1111101; when0111 =>q<=0100111; when1000 =>q<=1111111; when others =>q<=1101111;end case; end process;end disp_are;-----7.定时闹钟模块程序 library ieee;use ieee.std_logic_1164.all;entity ALERT isport(m1,m0,s1,s0:in std_logic_vector(3 downto 0); clk:in std_logic; q500,qlk:out std_logic);end ALERT;architecture sss_arc of ALERT is begin process(clk) begin if clk'event and clk='1' then if m1=0101 and m0=1001 and s1=0101 then if s0=0001 or s0=0011 or s0=0101 or s0=0111 then q500<='1'; else q500<='0'; end if; end if;if m1=0101 and m0=1001 and s1=0101 and s0=1001 thenqlk<='1';elseqlk<='0';end if;end if;end process;end sss_arc;Architecture one of topclock is Component second1 Port( clks,clr:in std_logic; secs,secg: buffer std_logic_vector(3 downto 0); cout1: out std_logic); End Component; Component min1 Port(clkm,clr:in std_logic; mins,ming:buffer std_logic_vector(3 downto 0); enmin,alarm: out std_logic); End Component; Component hour1 Port(clkh,clr:in std_logic; hours,hourg:buffer std_logic_vector(3 downto 0)); End Component; Component madapt Port(en,m1,clk,secin:in std_logic; minset:out std_logic); End Component; Component hadapt Port(en,h1,clk,minin:in std_logic; hourset:out std_logic); End Component; signal a,b,c,d: std_logic; begin u1:second1 port map(clr=>clr, secs=>secs,secg=>secg,clks=>clk, cout1=>a); u2:min1 port map(clr=>clr,alarm=>alarm, mins=>mins,ming=>ming,clkm=>b,enmin=>c); u3:hour1 port map(clr=>clr, hours=>hours,hourg=>hourg,clkh=>d); u4:madapt port map(en=>en,m1=>m1,clk=>clk,secin=>a,minset=>b); u5:hadapt port map(en=>en,h1=>h1,clk=>clk,minin=>c,hourset=>d); end;以上回答你满意么
电子技术课程设计 多功能数字钟 谁能帮忙弄份啊
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;系统名称: 数字钟 ;创健人:济南, 日期:2005.6.19 ;系统功能描述: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;修改人: 修改日期: ;修改原因: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;蕊片型号:AT89C51 晶振:12MHZ ;-------------硬件连接--------------------- ; ; ;----------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称: 声明区 ;功能描述: 声明各常量和变量 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SECOND EQU 30H ;存储妙 MINITE EQU 31H ;存储分 HOUR EQU 32H ;存储时 SPEAKER BIT P3.7 HOURK BIT P3.2 ;时键 MINITEK BIT P3.3 ;分键 SECONDK BIT P3.0 ;妙键 FLAG BIT 00H FLAG1S BIT 01H ;1S到标志位. DISPBUF EQU 40H ; 段选标志 DISPBIT EQU 48H ; 位选通标志 T2SCNTA EQU 49H ; 中断次数 T2SCNTB EQU 4AH ; 中断次数 TEMP EQU 4BH ; 初始化位 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:主程序 ;功能描述; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 00H LJMP START ORG 0BH LJMP INT_T0 ;T0中断入口 START: MOV SECOND,#00H ;妙初始化0 MOV MINITE,#00H ;分初始化0 MOV HOUR,#12 ;时始化送12 MOV DISPBIT,#00H ;位选通标志 MOV T2SCNTA,#00H ;标志 MOV T2SCNTB,#00H ;标志 CLR FLAG CLR FLAG1S SETB SPEAKER MOV TEMP,#07FH ;初始位,让第一个位选通 LCALL DISP ;调用显示处理程序 MOV TMOD,#01H ;方式1 MOV TH0,#0F8H ;赋值20MS MOV TL0,#030H SETB TR0 ;开中断启动 SETB ET0 SETB EA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:按键程序 ;功能描述;调整分,秒. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WT: JNB FLAG,CC LCALL SPEAKING CC: JB SECONDK,NK1 ;妙末按下,转去判断分键 LCALL DELY10MS ;按下,延时,消抖动 JB SECONDK,NK1 ;再次判断是否按下? INC SECOND ;按下,按下一次加1 MOV A,SECOND ;送A判断 CJNE A,#60,NS60 ;妙末到60转分 MOV SECOND,#00H ;到了,回0 NS60: LCALL DISP JNB SECONDK,$ ;等待妙键释放 NK1: JB MINITEK,NK2 ;跟妙键分析相似 LCALL DELY10MS JB MINITEK,NK2 INC MINITE MOV A,MINITE CJNE A,#60,NM60 MOV MINITE,#00H NM60: LCALL DISP JNB MINITEK,$ NK2: JB HOURK,NK3 ;时键 LCALL DELY10MS JB HOURK,NK3 INC HOUR MOV A,HOUR CJNE A,#24,NH24 MOV HOUR,#00H NH24: LCALL DISP JNB HOURK,$ ;等待时键释放 NK3: LJMP WT ;返回 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:显示处理程序 ;功能描述;,该程序实现时,分,秒计时转换为BCD码并存储在以47H起始地址的显示 ;输出数据存储单元里,即显示缓冲区47H至40H单元 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISP: MOV A,#DISPBUF ;送40H ADD A,#7 ;加8 ;DEC A MOV R1,A ;送47H MOV A,HOUR ;送时 MOV B,#10 DIV AB MOV @R1,A ;存储时十位 DEC R1 ;指向时个位 MOV A,B ;送时个位 MOV @R1,A ;存储时个位 DEC R1 MOV A,#10 MOV @R1,A DEC R1 MOV A,MINITE ; 送分,处理与时处理类似 MOV B,#10 DIV AB MOV @R1,A DEC R1 MOV A,B MOV @R1,A DEC R1 MOV A,#10 MOV @R1,A DEC R1 MOV A,SECOND ;送秒 MOV B,#10 DIV AB MOV @R1,A DEC R1 MOV A,B MOV @R1,A DEC R1 RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:显示程序 ;功能描述;在LED上显示为12-12-12显示模式. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INT_T0: MOV TH0,#0F8H ;重赋值 MOV TL0,#030H MOV A,#DISPBUF ;段偏移存储 ADD A,DISPBIT ;位偏移量 MOV R0,A ;段偏移存储 MOV A,@R0 ;段偏移量 MOV DPTR,#TABLE ;指向字形表 MOVC A,@A+DPTR ;取字形 MOV P0,#0 ;防闪烁 MOV P0,A ; 字形选P1口显示 MOV A,DISPBIT ;位移偏量 MOV DPTR,#TAB ;指向位选 MOVC A,@A+DPTR ;取位选通 MOV P2,A ;位送P3口选通 INC DISPBIT ;位偏移加1 MOV A,DISPBIT ;位偏移送A CJNE A,#08H,KNA ;八个数管码扫描完不? MOV DISPBIT,#00H ;描完重新开始 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:1秒计时程序 ;功能描述; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KNA: INC T2SCNTA MOV A,T2SCNTA CJNE A,#100,DONE MOV T2SCNTA,#00H INC T2SCNTB MOV A,T2SCNTB CJNE A,#05H,DONE SETB FLAG1S MOV T2SCNTB,#00H INC SECOND ;秒加1 MOV A,SECOND CJNE A,#50,BB ;50S到. MOV A,MINITE CJNE A,#59,BB ;59分 SETB FLAG ;打开正点响标志. BB: MOV A,SECOND CJNE A,#60,NEXT ;秒超过60了没有? 没有,调用显示处理程序 MOV SECOND,#00H INC MINITE ;分加1 MOV A,MINITE CJNE A,#60,NEXT MOV MINITE,#00H ;分超过60,清0 INC HOUR ;并时加1 MOV A,HOUR CJNE A,#24,NEXT ;是否超过24小时?不是,则跳至NEXT MOV HOUR,#00H NEXT: LCALL DISP ; 调用显示处理程序 DONE: RETI ;中断返回 TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H ;0到9字形(40表示横扛) TAB: DB 07FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:正点报时子程序 ;功能描述; 前十秒报第一声,每隔一秒报一声. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SPEAKING:MOV R5,#6 AA: CLR SPEAKER JNB FLAG1S,$ ;延时1S. CLR FLAG1S SETB SPEAKER JNB FLAG1S,$ CLR FLAG1S DJNZ R5,AA CLR FLAG RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;程序名称:延时子程序 ;功能描述;按键消抖调用. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DELY10MS:MOV R6,#10 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET 十、调试运行 1、录入程序,并保存为.C文件。
2、按硬件接线图接线。
3、联机并编译。
4、修改语法错误,并存盘。
5、编译并把烧进单片机,并运行。
6、先连续运行,如不能正常运行,再用断点运行或单步运行法进行调试,直至达到设计要求。
十一、设计结果 经过调试,能够顺利运行,符合设计要求,时钟走动正常, 十二、参考文献 单片机原理,接口及应用—嵌入式系统技术基础,李群芳 肖看 编著。
清华大学出版社 十三、设计心得体会 通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西



