版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEXX学院毕业设计(论文)题目:基于单片机的电子万年历设计院系:电子工程学院专业:电子科学与技术班级:学生姓名:导师姓名:职称:教授起止时间:2010年03月PAGEXIV西安邮电学院毕业设计(论文)任务书学生姓名指导教师职称教授院系电子工程学院专业电子科学与技术题目基于单片机的电子万年历设计任务与要求一、任务:设计基于单片机的电子万年历,达到同时显示年、月、日、时、分、秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。二、要求:1、熟悉单片机,C语言等相关知识。2、学会使用KeilC软件开发环境。3、定时器整体硬件设计,中断系统设计,软件编程,系统调试等。4、能自己独立解决设计中的问题,加强自主学习能力。5、成果形式:软件程序,硬件模块,论文。开始日期年月日完成日期年月日系主任(签字)年月日西安邮电学院毕业设计(论文)工作计划学生姓名____指导教师___职称教授_院别_____电子工程学院_______专业电子科学与技术__________题目基于单片机的电子万年历设计工作进程起止时间工作内容起止时间工作内容第一周至第二周熟悉课题,找导师了解设计的相关事宜,搜集相关资料第三周至第四周认真的研读相关资料,找出其中对自己有用的部分,加以整理第五周至第六周花两周时间学好KeilC软件的使用,做一些对自己的设计有用的编程第七周至第八周编写程序,熟悉8051单片机第九周至第十周下载程序,调试结果第十一周至第十二周撰写毕业论文,准备答辩。
主要参考书目(资料)主要参考书目(资料)主要参考书目(资料)单片机原理及应用2、单片机原理及接口技术单片机编程实例4、单片机实验教程相关网站:主要仪器设备及材料主要仪器设备及材料1、计算机及配套软件2、单片机3、元件若干论文(设计)过程中教师的指导安排论文(设计)过程中教师的指导安排除每周定时具体指导外,学生有问题也可随时联系指导。对计划的说明对计划的说明如有特殊原因可适当调整,否则按计划执行。XX学院电子工程学院电子科学与技术专业级班课题名称:基于单片机的电子万年历设计学生姓名:学号:00指导教师:报告日期:2010年3月15号1.本课题所涉及的问题及应用现状综述在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中。在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现额外的功能:世界时、农历显示。人类不断研究,不断创新纪录。发展到现在人们广泛使用的电子万年历。
电子万年历是采用基于单片机以实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得电子钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表电子化为基础的。因此,研究电子万年历及扩大其应用,有着非常现实的意义。它可以对年、月、日、时、分、秒进行计时,对于电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒等信息,还具有时间校准等功能。2.本课题需要重点研究的关键问题、解决的思路及实现预期目标的可行性分析关键问题:(1)系统硬件的设计与实现;(2)系统软件总体的设计和调试,以实现完成年、月、日、时、分、秒的控制与显示;(3)中断模块的设计;(4)定时计数模块的设计;解决思路:该电子万年历使用12MHZ晶振与单片机8051相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。可行性分析:由于深入学习过单片机原理及应用、模拟电路、数字电路与逻辑设计、C语言程序设计、电路分析、传感器原理及应用等课程,并应用所学知识做过一些相关的实验项目。而本课题是对所学知识的综合运用,都是比较成熟的技术,因此实现难度不是很大,方案可行。3.完成本课题的工作方案第一周至第二周查阅资料了解关于寄存器,中断,数码管显示的相关知识。第三周至第四周学习各种配套软件的原理和应用,确定需要的型号。第五周至第六周设计各个模块的程序,并进行调试。第七周至第八周调试各个模块,购买相应的单片机,下载调试程序,性能分析。第十周至第十一周调试成功,实现设计的目的,完成设计。第十二周至第十三周撰写毕业论文,准备答辩。4.指导教师审阅意见指导教师(签字):年月日说明:本报告必须由承担毕业论文(设计)课题任务的学生在毕业论文(设计)正式开始的第1周周五之前独立撰写完成,并交指导教师审阅。学生姓名性别男学号课题名称基于单片机的电子万年历设计课题类型硬件设计难度较难2010年(职称教授)课题任务完成情况(千字);(千字);(张);:指导教师意见分项得分:开题调研论证分;课题质量(论文内容)分;创新分;论文撰写(规范)分;学习态度分;外文翻译分指导教师审阅成绩:指导教师(签字):年月日评阅教师意见分项得分:选题分;开题调研论证分;课题质量(论文内容)分;创新分;论文撰写(规范)分;外文翻译分评阅成绩:评阅教师(签字):年月日验收小组意见分项得分:准备情况分;毕业设计(论文)质量分;(操作)回答问题分验收成绩:验收教师(组长)(签字):年月日答辩小组意见分项得分:准备情况分;陈述情况分;回答问题分;仪表分答辩成绩:答辩小组组长(签字):年月日成绩计算方法指导教师成绩20(%)评阅成绩30(%)验收成绩30(%)答辩成绩20(%)学生实得成绩(百分制)指导教师成绩评阅成绩验收成绩答辩成绩总评答辩委员会意见毕业论文(设计)总评成绩(等级):系答辩委员会主任(签字):系(签章)年月日备注XX学院毕业论文(设计)成绩评定表(续表)
目录摘
要 3Abstract 4引言 5第一章绪论 61.1立题背景 61.2电子万年历的发展现状及前景 61.3本课题需要重点研究的关键问题、解决的思路及实现预期目标的可行性分析 6第二章单片机 72.1单片机简介 72.1.1单片机原理 72.1.2单片机历史 72.1.3单片机应用领域 82.2定时/计数器 82.2.1定时/计数器的结构 82.2.2定时/计数器的工作原理 82.2.3定时/计数器的控制 92)控制寄存器TCON 102.2.4定时/计数器的工作方式 102.2.5定时器的初始化过程 112.3中断系统 112.3.1中断概述 112.3.2中断的主要功能及优先级 112.3.380C51定时中断 112.3.4中断响应的过程 122.3.58051中断源 122.4串行接口 122.4.1串行接口的基本概念 122.4.280C51串行口的结构 132.4.3串行口控制寄存器SCON 132.4.480C51串行口的工作方式 142.5矩阵式键盘接口电路 142.5.1矩阵式键盘接口电路的组成 152.5.2矩阵式键盘的按键识别及特点 152.5.3由8052PI口的高低字节构成4×4矩阵式键盘接口电路 16原理图如下图(2.7) 162.6LED动态显示电路 172.6.1动态显示的特点 172.6.2LED显示器的接法 17第三章KeilC软件使用 18第四章设计流程图 214.1总体设计流程图 214.2初始化流程图 224.3按键消抖流程图 234.4时间调整流程图 24致谢 25参考文献 26附录 27摘
要单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本文通过对一个基于单片机的能实现万年历功能电子时钟的设计,从而达到学习、了解单片机相关指令在各方面的应用。系统由主控制器AT89C51、显示电路、按键电路、和复位电路等部分构成,能实现时钟日历显示的功能,能进行年、月、日、时、分、秒的显示。关键词:单片机、万年历、C语言AbstractSingle-ChipMicrocomputerapplicationtechnologydeveloprapidly,lookingaroundusnowinallspheresoflife,frommissiles,navigationequipment,tothevariousinstrumentsontheaircraftcontrolfromacomputernetworkcommunicationsanddatatransmission,industrialautomationtoreal-timeprocesscontrolanddataprocessing,andourlivesextensiveuseofthesmartcard,electronicpets,whichisinseparablefromthemicrocontroller.Monolithicsingle-chipisthesetofCPU,RAM,ROM,thetiming,numberandvarietyofinterfaceintegratedmicrocontrollers.Itssmallsize,lowcost,highperformance,whicharewidelyusedinsmartindustries,andindustrialautomation.And51SeriesSCMisthemosttypicalandthemostrepresentativeone.ThegraduationdesignThroughthestudy,andtherebyachievethestudy,design,developmenthardwareandsoftwarecapabilities.Basedonamicrocontrollerbasedonthewilltoachievecalendarofamulti-functionalelectronicclockdesign,TherebyachievestudyingandunderstandingtherelevantdirectivesMCUinallaspectsoftheapplication.BymaincontrolAT89C51、keystrokecircuitandrestorecircuitcomponented,toachieveclockcalendardisplayfunctioncanbecarriedout,hourssecondsoftheshowandreal-timetemperaturedisplay.
Keywords:Monolithicsingle-chip,lunarcalendardemand,perpetualcalendars引言随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。基于单片机的电子万年历设计PAGE41第一章绪论1.1立题背景在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中。在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现额外的功能:世界时、农历显示。人类不断研究,不断创新纪录。发展到现在人们广泛使用的电子万年历。1.2电子万年历的发展现状及前景电子万年历是采用基于单片机以实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得电子钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表电子化为基础的。因此,研究电子万年历及扩大其应用,有着非常现实的意义。它可以对年、月、日、时、分、秒进行计时,对于电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒等信息,还具有时间校准等功能。综上所述此电子万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。1.3本课题需要重点研究的关键问题、解决的思路及实现预期目标的可行性分析该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们生自主研发。所以在该设计与制作中我选用了单片机8051,它是低功耗、高性能的CMOS型8位单片机。因此,采用单片机8051原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们生来说也更加有用。第二章单片机2.1单片机简介2.1.1单片机原理单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。2.1.2单片机历史1)SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。在开创嵌入式系统独立发展道路上,Intel公司功不可没。2)MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。在发展MCU方面,最著名的厂家当数Philips公司。2.1.3单片机应用领域目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。2.2定时/计数器2.2.1定时/计数器的结构定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。组成图如下图(2.1)图(2.1)2.2.2定时/计数器的工作原理加1计数器输入的计数脉冲有两个来源,一个是由系统的时钟振荡器输出脉冲经12分频后送来;一个是T0或T1引脚输入的外部脉冲源。每来一个脉冲计数器加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。2.2.3定时/计数器的控制80C51单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断申请。1)工作方式寄存器TMOD工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。其格式如下表(2.2):表(2.2)GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了或引脚为高电平这一条件。:定时/计数模式选择位。=0为定时模式;=1为计数模式。M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。设置表如下表(2.2.1)表(2.2.1)2)控制寄存器TCONTCON的低4位用于控制外部中断,已在前面介绍。TCON的高4位用于控制定时/计数器的启动和中断申请。其格式如下表(2.3):表(2.3)TF1(TCON.7):T1溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。TF0(TCON.5):T0溢出中断请求标志位,其功能与TF1类同。TR0(TCON.4):T0运行控制位,其功能与TR1类同。2.2.4定时/计数器的工作方式方式1方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。原理图如下图(2.4):图(2.4)计数个数与计数初值的关系为:定时时间=(216-T0初值)×时钟周期×122.2.5定时器的初始化过程(1)根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。(2)根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器。(3)根据需要开放定时/计数器中断。(4)设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。(5)等待定时/计数时间到,则执行中断服务程序;如果查询处理则编写查询程序,判断溢出标志,溢出标志等于1,则进行相应处理。2.3中断系统2.3.1中断概述中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须中止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被中止的原程序的过程。2.3.2中断的主要功能及优先级1)实现CPU与外部设备的速度配合2)实现实时控制3)实现故障的及时发现与处理4)实现人机联系中断优先级越高,则响应优先权就越高。当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,这时CPU就会暂停当前的中断服务转而处理高级中断申请,待高级中断处理程序完毕再返回原中断程序断点处继续执行,这一过程称为中断嵌套。2.3.380C51定时中断定时中断是为满足定时或计数的需要而设置的。当计数器发生计数溢出时,表明设定的定时时间到或计数值满,这时可以向CPU申请中断。由于定时器/计数器在单片机内部,所以定时中断属内部中断。80C51有二个定时中断源,即:TF0(P3.4)—T0溢出中断TF1(P3.5)—T1溢出中断2.3.4中断响应的过程(1)在每条指令结束后,系统都自动检测中断请求信号,如果有中断请求,且CPU处于开中断状态下,则响应中断。(2)保护现场,在保护现场前,一般要关中断,以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。(3)中断服务,即为相应的中断源服务。(4)恢复现场,用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前要关中断,以防止现场被破坏。在恢复现场后应及时开中断。(5)返回,此时CPU将推入到堆栈的断点地址弹回到程序计数器,从而使CPU继续执行刚才被中断的程序。2.3.58051中断源2.4串行接口2.4.1串行接口的基本概念(1)同步方式是将一大批数据分成几个数据块,数据块之间用同步字符予以隔开,而传输的各位二进制码之间都没有间隔。其基本特征是发送与接收时钟始终保持严格同步。(2)异步通信是按帧传送数据,它利用每一帧的起、止信号来建立发送与接收之间的同步,每帧内部各位均采用固定的时间间隔,但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收的。2.4.280C51串行口的结构示意图如下图(2.5)图(2.5)有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H;接收器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。2.4.3串行口控制寄存器SCONSCON用于控制和监视串行口的工作状态,其各位定义如图5.3所示。相应的各位功能介绍如下:SM0、SM1:用于定义串行口的操作模式,两个选择位对应4种模式,见表6.2。其中fOSC是振荡器频率,UART为通用异步接收和发送器的英文缩写。SM2:多机通信时的接收允许标志位。在模式2和3中,若SM2=1,且接收到的第9位数据(RB8)是0,则接收中断标志(RI)不会被激活。在模式1中,若SM2=1且没有接收到有效的停止位,则RI不会被激活。在模式0中,SM2必须是0串行口操作模式选择表(2.5.1)表(2.5.1)2.4.480C51串行口的工作方式方式1方式1是10位数据的异步通信口。TXD为数据发送引脚,RXD为数据接收引脚,传送一帧数据的格式如图所示。其中1位起始位,8位数据位,1位停止位。原理如下图(2.6)。图(2.6)用软件置REN为1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,检测到RXD引脚输入电平发生负跳变时,则说明起始位有效,将其移入输入移位寄存器,并开始接收这一帧信息的其余位。接收过程中,数据从输入移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到的停止位为1)时,将接收到的9位数据的前8位数据装入接收SBUF,第9位(停止位)进入RB8,并置RI=1,向CPU请求中断。2.5矩阵式键盘接口电路2.5.1矩阵式键盘接口电路的组成矩阵式键盘接口电路是由行线、列线和按键组成的,按键位于行线和列线的交叉点上。按键的连线引到行线、列线的交叉点出,行线、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V电平上。无按键动作时,行线处于高电平状态;当有按键按下时,行线电平状态将由与其连接的列线电平决定。如果列线电平为低,则行线电平为低;如果列线电平为高,则行线电平也为高。这一点是识别矩阵式键盘的按键是否被按下的关键。由于矩阵式键盘中行线、列线为多键公用,各按键均影响该键所在行和列的电平,因此各按键彼此将相互发生影响,所以必须将行线、列线信号配合起来并作适当处理,才能确定闭合键的位置。2.5.2矩阵式键盘的按键识别及特点在矩阵式键盘接口电路中,按键识别的方法有两种:一种是扫描法;另一种是线反转法。用扫描法识别按键状态时分两步进行:识别按键有无按下。让所有列线均置为0电平,检查各行线电平有无变化。若有,则说明有键按下;若无,则说明武键按下。除此之外,实际编程时还要用软件消抖得的方法进行消抖处理。采用扫描法识别具体的按键。逐列置零电平,其余各列置高电平,再检查行线电平的变化。如果行电平由高电平变成低电平,则可确定此行和此列交叉点处的按键被按下。矩阵式键盘采用线反转法识别键状态方法:将行线编程为输入线,列线编程为输出线,并使输出线的输出全为零电平,则行线中电平由高到低所在行为按键所在行。同第1)步完全相反,将行线编程为输出线,并使输出线的输出全为零电平,则行线中电平由高到低所在行为按键所在行。矩阵式键盘特点在矩阵式键盘接口中,对键盘应当做三个层次的工作:第一层:监视键盘的输入。体现在键盘工作方式上就是编程扫描、定时扫描和中断扫描三种工作方式。第二层:确定具体按键。体现在键盘识别方法上就是扫描法和线反转法。第三层:键功能程序执行。同独立式按键的接口一样,一般可用下列方法组成矩阵式键盘接口。直接用8051的I/O口线。用并行接口芯片扩展I/O口线。用三态缓冲锁存器扩展I/O口线。还可用8051的串行端口RXD和TXD线扩展矩阵式键盘的扫描线或用译码器扩展扫描线。2.5.3由8052PI口的高低字节构成4×4矩阵式键盘接口电路原理图如下图(2.7)图(2.7)2.6LED动态显示电路2.6.1动态显示的特点动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。2.6.2LED显示器的接法接法如下图(2.8)图(2.8)第三章KeilC软件使用1)建立一个新工程
单击Project菜单,在弹出的下拉菜单中选中NewProject选项然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51,然后点击保存.
3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.
4)完成上一步骤后,屏幕如下图所示到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。
5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项新建文件后屏幕如下图所示此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。然后,单击“保存”按钮。6)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,弹出如下菜单然后单击“AddFiletoGroup‘SourceGroup1’”选中Test.c,然后单击“Add
”屏幕好下图所示注意到“SourceGroup1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同7)现在,请输入C语言源程序在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keilc51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率8)在上图中,单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”(或者使用快捷键Ctrl+F5),屏幕如下所示9)调试程序:在上图中,单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果10)单击“Project”菜单,再在下拉菜单中单击“”,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。把程序下载到AT89S51单片机中。第四章设计流程图4.1总体设计流程图开始开始系统初始化有无按键按下?选择相应的功能模式调整运行时间进入功能模式运行正常显示YN 此万年历具有显示时间和调整时间的功能;外设有六个按键,一个为复位开关,一个为分层显示时间,其余按键为调整时间。当时间有误差时,按照说明选择相应位来调整时间。 系统初始化时,设置单片机的定时控制寄存器,使单片机精确地输出1秒来产生单位时间。 时间显示放入中断,时间显示就不受按键产生的延迟的影响,使时间更精确。4.2初始化流程图开始开始选择方式控制寄存器TMOD置定时器的高八位TH0置定时器的低八位TL0启动T0(TR0)打开所有中断(EA)为了产生时间,可以用电脑系统时间来定时,但这样定时不精确,采用单片机内部时间,可以将时间精确至毫秒级,所以本次设计采用11.0592MHZ晶振来定时。定时器有多种工作方式,我们采用工作方式1。TMOD为工作方式寄存器,TH0和TL0为时间初值寄存器,通过计算得到十六位的二进制数,置入寄存器的高八位TH0和TL0中,从而产生需要的2ms的初值。启动定时器T0,打开所有中断,使定时器开始工作。4.3按键消抖流程图开始开始检查按键有闭合吗?延时消颤再判按键有闭合吗?延时消颤闭合键已释放了吗?返回延时消颤NNNAYYUY本设计采用机械式开关,由于它的弹性作用,一个按键开关在闭合时不会马上稳定地接通,断开时也不会马上断开,因而在闭合和断开时的瞬间都会有一串的抖动。抖动时间的长短一般为5~10ms,当判断的按键按下后,先执行一段大于10ms的延时程序后再去判断按下的是哪一个,从而消除前沿抖动的影响。对于后沿抖动,只需在接收一个键位后,经过一定时间再去检测有无按键,这样就自然跳过后沿抖动时间而消除后沿抖动了。4.4时间调整流程图致谢本论文是在导师刘老师的悉心指导下完成的。导师渊博的专业知识,严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严以律己、宽以待人的崇高风范,朴实无华、平易近人的人格魅力对我影响深远。不仅使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本论文从选题到完成,每一步都是在刘老师的指导下完成的,倾注了导师大量的心血。在此,谨向刘老师表示崇高的敬意和衷心的感谢!本论文的顺利完成,离不开各位老师、同学和朋友的关心和帮助。在此感谢各位实验室老师的指导和帮助;感谢各位室友及同学的帮助;感谢XXX院母校的关心、支持和帮助;在四年的学习期间,没有你们的帮助和支持是没有办法完成我的学位论文的,愿师生之谊长存,同窗之间的友谊长存。参考文献肖洪兵.跟我学用单片机.北京:北京航空航天大学出版社,2002.8何立民.单片机高级教程.第1版.北京:北京航空航天大学出版社,2001赵晓安.MCS-51单片机原理及应用.天津:天津大学出版社,2001.3李广第.单片机基础.第1版.北京:北京航空航天大学出版社,1999徐惠民、安德宁.单片微型计算机原理接口与应用.第1版.北京邮电大学出版社,1996何立民.从Cygnal80C51F夏继强.单片机实验与实践教程.北京:北京航空航天大学出版社,2001陈志强胡辉.单片机应用系统设计实践指南.自编教材肖洪兵.单片机应用技术.自编教材附录/***************************万年历***************************//**功能:1:年月日上次的事实、是分秒显示转换*****//******:2:调表(闪烁,右移,确定,取消)*********************///**操作:1:正数第4行依次为切换,固定/取消,右移,上翻/**********:正数第3行为保存************************/#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitwela=P2^7;/*位锁*/sbitdula=P2^6;/*段锁*/ucharcodeNumShow[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示数组ucharRuntime=0,temp=0,change=0,spark=0,move=0,add=0,sure=0,clock=0;ucharuYear=8,uMonth=11,uDay=28,uHour=11,uMinute=50,uSecond=50;ucharNum1=0,Num2=0,Num3=0,Num4=0,Num5=0,Num6=0;uchardHour=0,dMinute=0,dSecond=0;voidkeyscan();//矩阵按键的扫描检测函数voidnum_sure();//送入数据函数voidinit();//初始化函数voiddisplay(ucharaa,ucharbb,ucharcc,uchardd,ucharee,ucharff);//数码管显示函数voidDelay(uintz);//延时函数voidshowchange();/*************主函数*******************/voidmain(){ P0=0; init(); while(1) { keyscan();//开始矩阵按键检测 if(spark==0)//未进入闪烁模式 { showchange();//此时为正常走时模式,数据按秒变化 } else//此时为设定移位调表模式 { if(sure==1)//要求将设定的时间存入表中 { num_sure();//确定调好的数据保存,送入显示 } } }}/******************数码管显示函数********************************/voiddisplay(ucharaa,ucharbb,ucharcc,uchardd,ucharee,ucharff){ staticuintSparkTime=0; if(SparkTime>=300)SparkTime=0;//闪烁即计时变量 switch(++SparkTime%6)//多位数码管静态显示时间 { case0: { P0=NumShow[aa];//显示数字 dula=1; dula=0; P0=0Xfe;//显示的数码管 wela=1; wela=0; if(move==1)//进入调表移位模式,下面相同 { if(SparkTime>=0&&SparkTime<150)//闪烁中的熄灭 { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300)//闪烁中的显示 { P0=NumShow[aa]; dula=1; dula=0; } } break; } case1: { P0=NumShow[bb]; dula=1; dula=0; P0=0Xfd; wela=1; wela=0; if(move==2) { if(SparkTime>=0&&SparkTime<150) { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300) { P0=NumShow[bb]; dula=1; dula=0; } } break; } case2: { P0=NumShow[cc]; dula=1; dula=0; P0=0Xfb; wela=1; wela=0; if(move==3) { if(SparkTime>=0&&SparkTime<150) { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300) { P0=NumShow[cc]; dula=1; dula=0; } } break; } case3: { P0=NumShow[dd]; dula=1; dula=0; P0=0Xf7; wela=1; wela=0; if(move==4) { if(SparkTime>=0&&SparkTime<150) { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300) { P0=NumShow[dd]; dula=1; dula=0; } } break; } case4: { P0=NumShow[ee]; dula=1; dula=0; P0=0Xef; wela=1; wela=0; if(move==5) { if(SparkTime>=0&&SparkTime<150) { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300) { P0=NumShow[ee]; dula=1; dula=0; } } break; } case5: { P0=NumShow[ff]; dula=1; dula=0; P0=0Xdf; wela=1; wela=0; if(move==6) { if(SparkTime>=0&&SparkTime<150) { P0=0; dula=1; dula=0; } elseif(SparkTime>=150&&SparkTime<300) { P0=NumShow[ff]; dula=1; dula=0; } } break; } }}/************延时函数***************/voidDelay(uintz){ uinti=0,j=0; for(i=z;i>0;i--) for(j=110;j>0;j--);}/*************按键扫描函数*********************/voidkeyscan(){ P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0)//第一行扫描 { Delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0)//读取按键信息 { temp=P3; switch(temp) { case0xe7:{ //日期和时钟切换按键按下 change++; if(change>1) { change=0; } break; } case0xd7:{ //进入设定模式 spark++; move=1; if(spark>1) //如果已进入设定模式,再按此键退出设定 { spark=0; //停止闪烁 move=0; //关闭右移 } } break; case0xb7:{ //进入右移模式 if(spark>0)//只有处于处于设定模式此键有效 { move++; if(move>6)move=1; //移到最右边时再从头开始 } } break; case0x77:{ //上翻 if(spark>0) { if(move>0) { if(change==1) //显示为时分秒 { if(move==1)//设置时的十位 { Num1++; if(Num1>2)Num1=0;//十位为0-1 } if(move==2)//设置时的个位 { Num2++; if(Num1==2) { if(Num2>4)Num2=0;//当十位为1时,个位0-2 } elseif(Num2>9)Num2=0;//当十位为0时,个位1-9 } if(move==3) //设置分的十位 { Num3++; if(Num3>5)Num3=0; } if(move==4)//设置分的个位 { Num4++; if(Num4>9)Num4=0; } if(move==5)//设置秒的十位 { Num5++; if(Num5>5)Num5=0; } if(move==6)//设置秒的个位 { Num6++; if(Num6>9)Num6=0; } } if(change==0)//当显示为年月日 { if(move==1) Num1==0; if(move==2) { Num2++; if(Num2>9)Num2=0; } if(move==3) { Num3++; if(Num3>1)Num3=0; } if(move==4) { Num4++; if(Num3==1) { if(Num4>2)Num4=0; } elseif(Num4>9)Num4=0; } if(move==5) { Num5++; if(Num5>3)Num5=0; } if(move==6) { Num6++; if(Num5==3) Num6=0; elseif(Num6>0)Num6=0; } } } } } } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { Delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xeb:{ sure++; if(sure>1)sure=0; } break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; }//确认按键,去抖 } }}/*****************日期与时钟切换函数*************************/voidshowchange(){ if(change==0) //年月日显示 { Num1=uYear/10; Num2=uYear%10; Num3=uMonth/10; Num4=uMonth%10; Num5=uDay/10; Num6=uDay%10; } else //时分秒显示 { Num1=uHour/10; Num2=uHour%10; Num3=uMinute/10; Num4=uMinute%10; Num5=uSecond/10; Num6=uSecond%10; }}voidinit() //定时中断初始化{ TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256;//定时2ms TR0=1; ET0=1; EA=1;}/****名称******定时中断函数*********************//*功能*//*参数*/voidtimer0()interrupt1{ staticuintruntime=0; TH0=(65536-50000)/256; TL0=(65536-5000)%256; runtime++;//进入中断次数计时器 display(Num1,Num2,Num3,Num4,Num5,Num6); if(runtime==500)//时间为1s { runtime=0; if(++uSecond==59) { uSecond=0; { if(++uMinute==59) { uMinute=0; if(++uHour==24) { uHour=0; if(++uDay==30) { uDay=0; if(++uMonth==12) { uMonth=0; if(++uYear>9) uYear=0; } } } } } } }}/************更新设定时间***********************/voidnum_sure(){ spark=0;//停止闪烁 move=0;//关闭右移 add=0;//上翻功能关闭 if(sure==1)//确认将改动后的数据保存 { if(change==0) //修改值为年月日 { uYear=Num1*10+Num2; uMonth=Num3*10+Num4; uDay=Num5*10+Num6; } if(change==1) //修改值为时分秒 { uHour=Num1*10+Num2; uMinute=Num3*10+Num4; uSecond=Num5*10+Num6; } sure=0; }}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职航空物流管理(航空货运)试题及答案
- 大学(护理学)外科护理规范2026年阶段测试题
- 2026年注册公用设备工程师(暖通空调专业案例上)试题及答案
- 2026年中职第三学年(中医康复保健)推拿按摩技术试题及答案
- 深度解析(2026)GBT 18290.3-2000无焊连接 第3部分可接触无焊绝缘位移连接 一般要求、试验方法和使用导则
- 深度解析(2026)《GBT 18187-2000酿造食醋》
- 深度解析(2026)《GBT 17980.66-2004农药 田间药效试验准则(二) 第66部分杀虫剂防治蔬菜潜叶蝇》
- 深度解析(2026)《GBT 17857-1999医用放射学术语(放射治疗、核医学和辐射剂量学设备)》
- 深度解析(2026)《GBT 17716-1999青鱼》
- 河南工业和信息化职业学院《城市环境地学》2025-2026学年第一学期期末试卷
- 篇12pmc窗口功能指令举例讲解
- YY/T 1245-2014自动血型分析仪
- GB/T 7332-2011电子设备用固定电容器第2部分:分规范金属化聚乙烯对苯二甲酸酯膜介质直流固定电容器
- GB/T 39392-2020家用电器专用智能功率模块技术规范
- GB/T 16571-2012博物馆和文物保护单位安全防范系统要求
- 2022年南通经济技术开发区控股集团有限公司招聘笔试试题及答案解析
- 化学水车间设备、管道安装作业指导书
- 疲劳与断裂完整
- 幼儿园绘本故事:《十二生肖》 课件
- 电焊工高级理论知识试题库与答案(共550题)
- 2022年研究生考试数学二试题及解析
评论
0/150
提交评论