资源描述
单片机原理及应用课程设计 题 目: 电子万年历 专 业:电子信息工程技术 班 级: 姓 名: 学 号: 指导老师: 日 期: 成 绩: 目录摘要1概述1.1单片机原理及应用简介1.2设计目的1.3设计要求2 系统总体方案及硬件设计2.1系统总体方案2.2硬件电路的总体框图设计2.3硬件电路原理图设计3 软件设计3.1主程序流程图设计3.2显示模块流程图4 课程设计体会5 参考文献6 附图摘要:本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。我选用的是单片机AT89C51来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。该电子万年历使用12MHZ晶振与单片机AT89C51相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机AT89C51。另外, 单片机AT89C51的指令系统和引脚与AT89C51完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。因此,采用单片机AT89C51原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。1 概述 1.1单片机原理及应用简介随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业控制系统、数据采集系统、自动测试系统、万年历电子表等。单片机的出现,并在各个技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以及应用有最少的联接外,还可以方便地采用软、硬件技术。2、系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功能。4、有优异的性能、价格比。可以说,对于广大的电子应用专业技术人员,目前国和内国外面临的单片机应用技术,如同60年代面临晶体管技术,70年代面临数字集成电路一样。单片机和可编程门阵列相结合,构成新一代电子应用技术是不可能回避的一项新型的工程应用技术。单片机是微型计算机的一个重要分枝,单片机是把中央处理器、随机存储器、只读存储器、定时器/计数器、并行接口接口、串行接口、A/D转换器等主要计算机部件,集中在一块集成电路芯片上。虽然只是一个芯片,但从功能上它就相当于一台完整的微机。随着科学技术的迅猛发展,单片计集成度高、体积小、运算速度快、功耗低、运行可靠、价格低廉等诸多优点,越来越显现出来。目前可以说单片机已经渗透到我们的生活的各个领域,在工业方面:像过程控制、数据采集,机电一体化、智能化仪器仪表,特别在军事武器控制方面尤为突出。在日常生活方面,我们使用彩电、洗衣机、电冰箱,录放机、VCD、照相机、手机、高级定时闹钟以及公共汽车上的报站器等等可以说举不胜举。1.2设计目的1、熟悉MCS-51定时/计数器、中断的应用。2、熟悉时钟时、分、秒计时方法,掌握编程技巧。3、掌握键盘的基本工作原理,键的识别,键抖动和重键问题的解决,键盘工作方式和键盘程序的编程。4、掌握七段码LED显示器的结构,七段码LED显示器的工作方式和显示程序的编程。5、掌握串行通信程序的编写。1.3.设计要求 1、设计实现电子万年历的硬件原理图。2、用T0定时器,产生时钟信号,设计定时中断程序。3、通过按键切换,分别显示时、分、秒,设计显示程序。4、可用键盘进行校对时间,设计键盘程序。5、当前时间可通过串口在其他单片机系统上显示。AT89C51的引脚图及部分引脚功能RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000 H- FFFFH),不管是否有内部程序存储器。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。 口管脚备选功能P1.0P1.78位双向口P2.0P2.78位双向口P3.0P3.78位双向口P3.0 RXD串行输入口P3.1 TXD串行输出口P3.2 /INT0外部中断0P3.3 /INT1外部中断1P3.4 T0记时器0外部输入P3.5 T1记时器1外部输入P3.6 /WR外部数据存储器写选通P3.7 /RD外部数据存储器读选通2 系统总体方案及硬件设计2.1系统总体方案 我选用的是单片机(AT89C51)来实现电子万年历的功能。共具备两个功能:(1)显示年月日及分秒信息(2)具有可调整日期和时间功能。1微处理器在设计过程中我使用12MHZ晶振与单片机AT89C51相连接,通过软件编程的方法实现了以24小时为一个周期同时显示小时,分钟和秒的要求,该定时闹钟设有九个按键,使之具备了校时、定时功能。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。2.2硬件电路的总体框图设计 该设计的硬件电路的总体框图如图所示2.3硬件电路原理图设计该万年历是以单片机89s52为核心来完成的。在硬件电路中采用P0口作为6位液晶显示电路的驱动接口,这是由于P0口输出驱动电路工作处于开漏状态,它的驱动能力强,故只需外接上拉电阻便可以把LED数码管点亮。因为共阴的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故该电路中的8位LED数码管均用共阳阴极的数码管。8位LED数码管的位选线分别由相应的P2. 0P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口。P3口与八个校时按键相连,以成功实现万年历校时的功能。主控制原理图:开始初始化按键扫描有键按下按键处理,确定模式时间显示模式根据按键状态显示相应时间段时间修改模式根据按键状态修改时间NONOYESYES图1 主程序流程框图3.软件设计程序框图:num=20?YESNO图2 定时中断流程框图结束时间加1秒num=0计数标志num+装入计数初值(50ms中断)开始开始清零按键状态位按键为低电平?延时,去抖动按键为低电平?按键为低高平?有按键,置按键状态YESYES结束图3 按键扫描流程框图NONOYES清零按键状态程序中使用到了T0,T1和串口中断,P0,P2口为LED的输出数据口,P32,P33,P34分别为时分秒转换,时间校验和时间停止位(一):主机程序:org 0000hljmp mainorg 000bhljmp timeorg 0023hljmp chuanxingorg 0030hmain:setb p3.2setb p3.3setb p3.7setb p3.5mov pcon,#00hmov scon,#01010000bmov tmod,#21hmov tl0,#0b0hmov th0,#3chmov th1,#0cch ;产生600波特率mov tl1,#0cchmov r5, #20 ;20次以达到1S的计时mov r4,#3 ;切换标志位mov r6,#0ffh ;恢复暂停标志mov r7,#1 mov r3,#0ffh ;暂停标志mov 50h,#0 ;存放时分秒的数据空间地址mov 51h,#0mov 52h,#0mov 53h,#0mov 54h,#0mov 55h,#0mov 60h,#0ffh;串性发送标志mov 61h,#0ffhmov 62h,#0ffhmov 70h,#0 ;存放串行接受的数 mov 71h,#0 ;接受从机发送的切换标志setb easetb essetb et0setb tr0setb tr1start:call keymov a,70h cjne a,#0f1h,qiehuan;是否为串性标接受到的切换志mov 70h,#0mov 71h,#1ljmp xianshiqiehuan:cjne a,#0f2h,qiehuan1mov 70h,#0mov 71h,#2ljmp xianshiqiehuan1:cjne a,#0f3h,qiehuan2mov 70h,#0mov 71h,#3ljmp xianshiqiehuan2:mov a,r0jnz xianshimov a,70hcjne a,#0f6h,qiehuan3;是否为串性接受到的恢复暂停标志mov r6,#0ljmp stopqiehuan3:mov a,r3jz stop1mov a,70hcjne a,#0f7h,xianshimov 70h,#0mov r6,#0ffhsjmp xianshistop1:ljmp stop;51h, 50h miao;53h,52h fen ;55h,54h shixianshi: ;显示子程序mov dptr,#segtab ;显示秒mov a,71hcjne a,#1,bingxing1sjmp bingxing2bingxing1:cjne r4,#3 ,fenbingxing2:mov a,51hmovc a,a+dptrmov p0,amov a,50hmovc a,a+dptrmov p2,amov a,60h ;串行发送秒jnz biaozhiclr timov a,50hmov sbuf,acall t10msjb ti ,$mov a,51hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi:ljmp startfen: ;显示分mov a,71hcjne a,#2,bingxing3sjmp bingxing4bingxing3:cjne r4,#2 ,shibingxing4:mov a,53hmovc a,a+dptrmov p0,amov a,52hmovc a,a+dptrmov p2,amov a,61h ;串行发送分jnz biaozhi1clr timov a,52hmov sbuf,ajb ti ,$call t10msmov a,53hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi1:;call t10msljmp startshi: ;显示时mov a,71hcjne a,#3,bingxing5sjmp bingxing6bingxing5:cjne r4,#1,shi1bingxing6:mov a,55hmovc a,a+dptrmov p0,amov a,54hmovc a,a+dptrmov p2,amov a,62h ;串行发送时?jnz biaozhi2clr timov a,54hmov sbuf,ajb ti ,$call t10msmov a,55hmov sbuf,ajb ti,$mov 60h,#0ffh;call t10msbiaozhi2:;call t10msshi1:ljmp startstop: ;暂停子程序mov a,r6jz xianshi1ljmp startxianshi1:mov a,70hcjne a,#0f4h,aa mov 70h,#0ljmp num1aa:mov a,r1jnz num1mov a,70hcjne a,#0f5h,bbmov 70h,#0ljmp num2bb:mov a,r2jnz num2ljmp startnum1: ;高位累加cjne r4,#3,fen1 ;秒inc 51hmov a,51hcjne a,#6 ,qingling0mov 51h,#0qingling0:ljmp xianshifen1: ;分cjne r4,#2,shi11inc 53hmov a,53hcjne a,#6 ,qingling1mov 53h,#0qingling1:ljmp xianshi ;时shi11:cjne r4,#1,qingling2inc 55hmov a,55hcjne a,#6 ,qingling2mov 55h,#0qingling2:ljmp xianshi num2: ;低位累加cjne r4,#3,fen2 ;秒inc 50hmov a,50hcjne a,#10,qingling3mov 50h,#0qingling3:ljmp xianshifen2:cjne r4,#2,shil2 ;分inc 52hmov a,52hcjne a,#10 ,qingling4mov 52h,#0qingling4:ljmp xianshi ;时shil2:cjne r4,#1,qingling5inc 54hmov a,54hcjne a,#10 ,qingling5mov 54h,#0qingling5:ljmp xianshi time: ;中断子程序mov a,r6jnz fanhui11retifanhui11:djnz r5,nextmov r5,#20inc 50hmov a,60hcpl amov 60h,amov a,50hcjne a,#10,nextinc 51hmov 50h,#0mov a,51hcjne a,#6,nextinc 52hmov a,61hcpl amov 61h,amov 51h,#0mov a,52hcjne a,#10,nextinc 53hmov 52h,#0mov a,53hcjne a,#6,nextinc 54hmov a,62hcpl amov 62h,amov 53h,#0mov a,54hcjne a,#10,nextinc 55hmov 54h,#0mov a,55hcjne a,#6,nextmov 55h,#0 ;重装初值next:ljmp fanhui1key ;键盘扫描子程序 p3.2切换 p3.3十位加p3.5暂停 p3.7个位加 mov r0,#0mov r1,#0mov r2,#0jb p3.2, rel1call t10msjnb p3.2,fanhui ;第一个键按下子程序mov r0,#1mov p1,#0fehdec r4mov a,r4jnz rel5mov r4,#3rel5:ljmp t10msrel1: ;第二个键按下子程序jb p3.3,rel2call t10msjnb p3.3 ,fanhuimov r1,#1ljmp fanhui ;第三个键按下子程序rel2:jb p3.7,rel3call t10msjnb p3.7 ,fanhuimov r2,#1ljmp fanhui ;第四个键按下子程序rel3:jb p3.5,fanhuicall t10msjnb p3.5 ,fanhuimov a,r3cpl amov r3,amov a,r6cpl amov r6,aljmp fanhuit10ms: ;十毫秒延时程序push 50hpush 51hmov 50h,#0ffh loop1: mov 51h,#0ffh nop loop2: nop djnz 51h,loop2djnz 50h,loop1pop 51hpop 50hfanhui: retfanhui1:mov tl0,#0b0hmov th0,#3chreti ;查表段segtab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90hchuanxing:;串性中断子程序jb ri,loop clr tiajmp endtloop:mov a,sbufmov 70h,aclr riendt: retit1ms:;一豪秒的延时?push 50hpush 51hmov 50h,#0ffhloop11:mov 51h,#0ffhnoploop22:nopdjnz 51h,loop22djnz 50h,loop11pop 51hpop 50hretend4课程设计体会通过这一周的课程设计,我学到了不少的知识。把以前没有学好的模拟电路的知识进行了补充和加强。这使我受益很大。加深了我对于单片机和数字电路的认识,相信在以后的学习和工作中碰到这些基础的元器件我会更加得心应手。通过查阅大量的资料,我获得了以前在课堂上学不到的东西,我想这对于以后的毕业设计,或者工作也好,都是很有帮助的。我很认真地对待这个过程中的每一个细节,希望自己能做得更好。希望今后还有这样的机会,能够让我学到更多的知识。在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。5 参考文献1李建忠.单片机原理及应用.西安电子科技大学出版 2006.02 2张俊谟.单片机中级教程.北京航空航天大学出版 2006.033余发山.单片机原理及及应用技术.中国矿业大学出版社 2003.124杨凌霄.微型计算机原理及应用.中国矿业大学出版社 2004.085何立民.单片机应用技术选编.北京航空航天大学出版社 2000.086万光毅.单片机实验与实践教程.北京航空航天大学出版社 2005.017周航慈.单片机程序设计基础.北京航空航天大学出版社 1991.118黄遵熹.单片机原理接口与应用.西北工业大学出版社 1997.056. 附图:(整体原理图)
展开阅读全文