




已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录一、引言1(一)课题背景1(二)设计目的及系统功能2二、系统方案设计2(一)主体设计及相关方案选择31、模式转换键的方案选择32、显示方案的选择33、时间计时方案的选择44、系统软件结构设计4(2)计算部分设计5(3)时钟部分设计5三、硬件设计5(一)单片机接口部分设计51、单片机I/O口分配52、单片机周围电路5(二)输入部分设计6(三)输出部分设计7(四)模式控制、发声及其他部分设计8四、软件设计9(一)显示部分设计91、显示部分的设计思路92、显示部分的实现代码10(二)输入部分设计101、输入部分设计思路102、实现代码11(三)计算部分设计121、计算部分设计思路122、计算部分设计框图133、计算部分实现代码14(四)时钟模块设计181、时钟部分设计思路182、时钟部分设计框图203、时钟部分实现代码20五、总结24参考文献2482基于STC89S51带时钟简易计算器设计摘 要:计算器在人们的生活中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的带闹钟的八位计算器。该设计系统是以AT89C51为单片机,用LCD1602作为计算器的显示器,外接4X4的键盘,通过键盘扫描来对输入数的控制,并外接DS1302实现计时,软件程序采用均采用C语言编写,便于移植与升级。下文详细介绍了整个系统的硬件组成结构、工作原理和系统的软件程序设计。计算器将完成的功能有整数的加,减,乘,除等功能。 关键字:计算器 LCD1602 74LS245 一、引言近年来,随着大规模集成电路的发展,单片机继续朝快速、高性能方向发展,从4位、8位单片机发展到16位、32位单片机。单片机主要用于控制,它的应用领域遍及各行各业,大到航天飞机,小至日常生活中的冰箱、彩电,单片机都可以大显其能。单片机技术与传感与测量技术、信号与系统分析技术、电路设计技术、可编程逻辑应用技术、微机接口技术、数据库技术以及数据结构、计算机操作系统、汇编语言程序设计、高级语言程序设计、软件工程、数据网络通信、数字信号处理、自动控制、误差分析、仪器仪表结构设计和制造工艺等的结合,使得单片机的应用非常广泛。同时,单片机具有较强的管理功能。采用单片机对整个测量电路进行管理和控制,使得整个系统智能化、功耗低、使用电子元件较少、内部配线少、成本低,制造、安装、调试及维修方便。本设计是基于STC89S51单片机的带时钟的计算器,通过本次设计的产品可以实现简易的计算以及计时功能。 (一)课题背景自从1976年Intel公司推出第一批单片机以来,80年代单片机技术进入快速发展时期,近年来,随着大规模集成电路的发展,单片机继续朝快速、高性能方向发展,从4位、8位单片机发展16位、32位单片机。单片机主要用于控制,它的应用领域遍及各行各业,大到航天飞机,小至日常生活中的冰箱、彩电,单片机都可以大显其能。单片机在国内的三大领域中应用得十分广泛:第一是家用电器业,例如全自动洗衣机、智能玩具;第二是通讯业,包括电话、手机和BP机等等;第三是仪器仪表和计算机外设制造,例如软盘、硬盘、收银机、电表。除了上述传统领域外,汽车、电子工业在国外也是单片机应用十分广泛的一个领域。它成本低、集成度高、功耗低、控制功能多能灵活的组装成各种智能控制装置,由它构成的智能仪表解决了长期以来测量仪器中的误差的修正、线性处理等问题。单片机将微处理器、存储器、定时/计数器、I/O接口电路等集成在一个芯片上的大规模集成电路,本身即是一个小型化的微机系统。单片机技术与传感与测量技术、信号与系统分析技术、电路设计技术、可编程逻辑应用技术、微机接口技术、数据库技术以及数据结构、计算机操作系统、汇编语言程序设计、高级语言程序设计、软件工程、数据网络通信、数字信号处理、自动控制、误差分析、仪器仪表结构设计和制造工艺等的结合,使得单片机的应用非常广泛。同时,单片机具有较强的管理功能。采用单片机对整个测量电路进行管理和控制,使得整个系统智能化、功耗低、使用电子元件较少、内部配线少、成本低,制造、安装、调试及维修方便。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。 (二)设计目的及系统功能 本设计的目的是以单片机为核心设计出一个简易的计算器和显示时间的小型系统。通过使用KILL以及protel等一些相关的软件进行相应的编辑调试及方正来实现用较低成本开发出新的产品。通过本课题设计,综合运用单片机及接口技术,锻炼动手操作能力,综合运用能力,学习论文的写作方法和步骤。 设计的带时钟计算器有以下功能及特点: (1) 能够实现8位的整数的加减乘除的计算 (2) 能够实现时间的显示,并能够实现时间的调整 (3) 能够实现闹钟,并能够实现闹钟的调整 二、系统方案设计 (一)主体设计及相关方案选择 1、模式转换键的方案选择本次设计的目的是实现计算器和带日历时钟的功能,要实现两个功能的相互转换有两种方案:(1) 利用按键实现相应的两种模式的换如图(2.11.1(a))(2) 利用开关的高低电平实现相应的模式的转换如图(2.11.1(b)) (a) (b)图 2.11.1在两种方案中方案(1)由与按钮按下前后的状态是相同的,所以在程序的执行期间不但要实现对键盘的扫描还要实现单独的对于这个键的扫描,所以这加大了程序中键盘扫描的时间控制的难度,而且对于稳定性,有时由于程序中其他事件对于时间的占用使得按键有时不太灵敏,导致使用者对于产品的个人印象有所下降。但是相对于方案(1),方案(2)由于采用了电平方式触发模式的转换,在不同的模式下有不同的电平,在程序个执行期间只要稍微去判断一下相应的引脚的电平就能够轻易的发现用户的模式转换的意向从而实现对于模式的控制,如此便能够实现相对稳定的监控用户的模式意向,使得用户使用更加的舒适。而且在实现的过程中,单片机的I/O引脚还未用完,所以这个方案不但尽可能的利用到了各个单片机I/O引脚还增强了整体的系统的稳定性和使用的舒适度。综上就能够很轻易去选择地二个方案。 2、显示方案的选择信息的显示是两个模式都需要实现的,然而在选用相应的显示方案的时候有如下的两种方案: (1) 利用LED数码管实现数据的显示 (2) 利用LCD1602实现数据的显示首先,方案(1)显示的亮度足够大,在几乎所有的情况下都能够看的比较清楚,而且产品的成本比较低。但是缺点是控制难度较LCD1602液晶显示器难,且硬件的驱动较为复杂。然而选择方案(2)显示,则能够实现程序对于输出的控制简单的目标,而且LCE1602显示相对于LED显示功耗较低比较符合现在发展的能源节约的目标,而且在实现显示时,LCD1602能够提供更多的诸如字符显示的功能,使得系统显示更加清楚明了,方便用户读取需要的信息。但是其缺点是成本较LED显示较高。综合LED和LCD1602的优点及缺点以及系统对于产品的性能要求,最终还是选择LCD1602作为系统的显示器,主要是它能够有效地降低单片机的工作负荷使得程序更加合理化,用户观看界面更加的美观、清晰、明了。 3、时间计时方案的选择 时间的计时有两种方案的选择: (1) 利用单片机的中断计时器进行中断计时 (2) 利用DS1302时钟芯片进行计时,单片机从芯片读取时间在选择计时器是首先需要考虑的是计时的准确性,在这点上应选择DS1302进行计时,其次是成本,对于单片机的中断计时而言几乎不需要另外增加成本,而对于DS1302则成本较高,对于软件的设计显然使用单片机的内部中断时软件的代码量较少而且软件结构比较简单,但是对于使用而言我们应该选择计时较为正确的一个方案,而且DS1302的成本也不会增加多少所以,在本系统中我倾向于选择第二套方案。 4、系统软件结构设计 系统有万年历及时钟的部分,要实现这个功能那么就需要实现两种模式的相互转换,其主要的框图如下(2.14.1): 图 2.14.1 (2)计算部分设计计算部分主要的部分为计算和输入的处理部分,首先是输入部分需要设置两个数组用于存储两个计算的数据,其次是要分不同的情况将数据存入不同的组在进行计算。在计算部分有两个方案:(1) 利用进位对数据的每位逐计算并进位(2) 数据转化为相应数据类型后直接计算对于两种算法,第一种显然对于单片机的计算量能够减轻而且能够节约RAM的使用量,首先是不需要进行数据类型的转化,而且在计算后无需转化,其次是产生的中间变量较少能够节约资源,但缺点是计算方法较第二种复杂很多。第二种方案最突出的优点是算法简单易于理解,但耗费的资源较多,在这次的设计中由于单片机的各项资源都能够满足第二种方案,所以我选择了第二种方案。 (3)时钟部分设计 时钟部分主要是闹钟存储和时间显示,在先前的方案中已选择了用DS1302计时所以在这个部分主要是要完的任务较为简单,主要对DS1302的数据的读取和修改其次是在函数中比较当前时间和闹钟存储器中的数据是否相等,如果相等那么就是能闹钟控制引脚,再等待键盘的输入,当有任意键输入时关闭闹钟,其次是监测时钟指定功能键是否又按下,如果有则进行相应的处理,否则不断地进行键盘扫描和时钟读取的动作。 三、硬件设计 (一)单片机接口部分设计 1、单片机I/O口分配 (1)LCD显示数据口接P0口,RS为P20,P21为RW,P22为E口 (2)键盘为4*4键盘,接在P1口,盘P23作为模式手动转换输入口 (3)时钟芯片接 P2.5RET,P2.6SCLK,P2.7I/O (4)P2.4为蜂鸣器接口 (5)P2.3为模式(计算器及万年历)转换键接口 2、单片机周围电路 (1)首先是时钟部分,由于对于单片机的时钟部分没有其他特殊要求所以在此次设计使用的单片机的时钟信号原件为12MHz的晶振,只用常用的晶振电路如下图(3.12.1):图 3.12.1 (2)其次是复位电路,由于在使用时无需对系统进行复位所以在设计时不选用可复位的单片机复位电路而是用不能进行再次复位的单片机的复位电路,其电路图如下(3.12.2):图 3.12.2其中,C的电容为10uF,R为8.2K。 (二)输入部分设计输入部分有时间输入和用户操作数据的输入两部分,首先时间输入部分的芯片的接法如下图(3.1.1):图3.1.1Vcc_5V:为电路中的主电源;Vcc2,也就是BT1为备份电源。当Vcc2Vcc1+0.2V 时,由 Vcc2向 DS1302供电,当 Vcc2Vcc1+0.2V 时由Vcc2向 DS1302供电,当 Vcc2Vcc1时,由Vcc1向DS1302供电。键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。由于其经济实用,较多地应用于单片机系统中。键盘的电路图如下(3.1.2):图3.1.2 (三)输出部分设计输出部分主要部件是LCD1602,它是一个2*16的液晶显示屏,相对于单片机的数据输出端的引脚为P0口为数据输出口P20为RS数据/命令选择控制输出口P21为RW读/写选择控制输出口,P22为EN使能信号控制口输出,具体连接如下图(3.3.1)图 3.3.1由于P0口在单片机内部没有上拉电阻,如果直接接上会使得单片机总电流大于71mA,那么容易损坏单片机,所以在实际电路中必须使用上拉电阻将减少流经单片机的总电流,且如图所示需要有R=10K的可变电阻用于调节液晶显示器的对比度,以适应不同用户的对于对比度的不同要求。 (四)模式控制、发声及其他部分设计模式选择部分为一个双态开关(高电平或低电平)用来方便调节系统至当前的用户所需的模式,在开关接高电平时选择的是计算器模式,接低电平时选择的是时间模式。发声部分使用的是蜂鸣器,由于单片机的I/O口驱动能力有限所以在输出时外加了一个放大电路,其图如下(3.4.1):图 3.4.1为了能够在断电的状态下也能够同时计时而且DS1302也能够支持双电源,所以在DS1302周围添加一个小的电池用于对DS1302断电状态下的供电,所以DS1302接线如下图(3.4.2)所示:图 3.4.2四、软件设计 (一)显示部分设计 1、显示部分的设计思路 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD, 当前使用的是16*2,1602 液晶模块内部的控制器共有 11 条控制指令,如下表(3.21.3)所示:表 4.1.1由于在不同的模块内不都需要将不同的数据显示到LCD1602,然而在数出数据时由于有比较多的数据是用于提示用户的信息,如时间显示的(D,S等),所以在每个模块显示时会有很多的重复的代码,而且在不同的模块都需要对数据进行修改。为了简化数据的显示部分的结构,而且使得显示部分比较清晰所以为显示分配了32个字节的物理存储空间作为显示的数据的缓存区,在以后的各个模块的数据需要输出时,只需要将数据写到相应的显示的数据缓冲区的位置,以后的显示部分可以全部由显示模块进行相应的处理,减轻了各个模块的工作的量。由于显示部分自成一个独立的模块,又要实现数据的正常显示,那么就只能每次在数据更新后调用显示函数,从而实现了数据的同步更新和显示。在显示时,由于在时间模式下需要有相应的时间修改和闹钟的调整,所以在模块中还针对相应的标志号对显示的局部加上相应的指示光标一提示用户正在修改的是哪一项数据,使得用户使用的时候更加方便。2、 显示部分的实现代码void display() /利用定时器中断实现间时显示DisplayListChar(0,0,dsp0);DisplayListChar(0,1,dsp1);void DisplayListChar(unsigned char X,unsigned char Y,unsigned char *DData) unsigned char ListLength=0; Y&=0x01; X&=0x0f; while(X16) DisplayOneChar(X,Y,DDataListLength); ListLength+; X+; (二)输入部分设计 1、输入部分设计思路在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。因此,键信息输入是与软件结构密切相关的过程。 对于一组键或一个键盘,通过接口电路与单片机相连。单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。抖动时间的长短与开关的机械特性有关,一般为5 10 ms。在触点抖动期间检测按键的通与断状态,可能导致判断出错。即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。一般来说,在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。检测到有键按下时,应延时等待一段时间(可调用一个5ms10ms的延迟子程序),然后再次判断按键是否被按下,若此时判断按键仍被按下,则认为按键有效,若此时判断按键没有被按下,说明为按键抖动或干扰,应返回重新判断。键盘真正被按下才可进行相应的处理程序,此时基本就算实现了按键输入,进一步的话可以判断按键是否释放。 2、实现代码 char keyscan() unsigned char i,j,k=0; unsigned char keycode=0xef,0xdf,0xbf,0x7f; unsigned char keytable=0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77; P1=0x0f; if( P1!=0x0f) for( i=0;i4;i+) P1=keycodei; for(j=0;j4;j+) k=i*4+j; if(P1=keytablek) while(P1=keytablek) ;return k; else return 80; (三)计算部分设计 1、计算部分设计思路本此设计需要实现的计算器部分大致可分为两个模块:(1)计算控制模块(2)数据计算模块在计算控制模块入口部分设置有模式检测部分,在每次的键盘扫描前先扫描模式控制口,如果模式控制口为低电平那么就返回主函数并设置标志位为0,从而实现模式从计算模式转到时间模式。其次是检测当前输入状态,如果输入的是数据那么需要根据相应的标志位判断当前输入的是第一个数还是第二个数从而将数据存入相应的地址空间以便于在计算部分提取数据进行计算,如果输入的为运算符号,那么需要确定当前的所处的输入状态。如果再输入符号前没有数据输入,那么将提示输入错误,如果在输入当前符号前已经有一个数据输入,那么,就将数据存入标志改变到相应的状态,以便下一次数据存入到正确的空间,并将当前符号保存下来用于计算时的调用,如果输入当前符号前已经有两个数据了,那么先将前面已经数据的数据进行对应的计算并将结果存入第一个变量存储区,将存入标志调整到第二个数据输入状态,存储计算符号,进入等待下一次数据输入。在数据计算模块,首先需要对计算控制模块传过来的字符串进行转换,将两个字符串转换成相应的整形数据,并进行计算,如果计算结果为负数那么,将负数标志置为使能,计算后再调用计算器的数据显示处理模块,计算其数据显示首先需要将整型数据转换为字符串并存入显示缓存,并检测数据正负标志,若果为负数则将最高位(即显存的最低位)设置为-号,并将计算后的数据存入第一个数据区,返回计算器控制模块,到此就一轮计算结束。其次是需要运算的继承性(即将上次的数据作为下次数据的运算数据,减少用户在计算式不断重复的输入上次计算的结果),在进入下一次的计算时先将上次计算的数据存入第一个计算数据存储单位,判断第二次数据输入的第一个数据是运算符还是数字,如果是数字,那么将所有数据清空,并将数据存入第一个需要计算的数据的存储单元,如果第一个数据位运算符那么就保存运算符,下次输入的数据存入第二个数据区,以便可以在上次的运算的基础上进行下一次的运算给使用者带来方便。 2、计算部分设计框图图 4.32.0 3、计算部分实现代码void counter()unsigned char dat,set_nu=0;/dat用于存放当前键盘输入值,set_nu存放当前数组数据所到达的位置unsigned char a8=0,b8=0;/a8,b8存放当前输入的运算数据unsigned char symbol=10;/符号存储unsigned char j,k=0;unsigned char in_flag=0;/in_flag为输入是否完全标志1为输入了1个参数,2为输入了两个参数for (j=0;j16;j+)dsp0j=0;for (j=0;j16;j+)dsp1j=0;dsp00=0;display(); /调用键盘扫描程序loop:dat=keyscan();if (j=P2&0x08)=0)/转至时钟程序mod_flag=0;return;if (dat9)if (in_flag=0&dat!=15)error();display();if (in_flag=3)in_flag=1;if(dat=15)/当键值为15,即清零时/将输出现存区清空,将结果标志置零for (set_nu=0;set_nu8;set_nu+)/清空被运算数a8存储位aset_nu=0;for (set_nu=0;set_nu8;set_nu+)/清空被运算数b8存储位bset_nu=0;for (j=0;j16;j+)dsp1j=0;for (j=0;j9&dat14)/10为加法、11为减法、12为乘法、13为除法、14等号if (in_flag=2)/原来已经有还未计算的值calculate(symbol,a,b);symbol=dat;for (j=0;j8;j+)bj=0;in_flag=2;/再次输入数据时将数据存入b8else if (in_flag=1)/原来只输入一个数据symbol=dat;in_flag=2;/当再次输入数据时数据存入b8else if (dat=14)calculate(symbol,a,b);in_flag=3;/当下次输入数据时存入a8,不对结果进行存储symbol=10;for (j=0;j8;j+)bj=0;set_nu=0;goto loop;else if (dat=9)/当键值为09时if (in_flag=0)in_flag+;if (in_flag=3)for (j=0;j8;j+)aj=0;in_flag=1;if (set_nu=2;i-)ai-1=ai-2;a0=d; (四)时钟模块设计 1、时钟部分设计思路本次设计使用的计时方案为使用DS1302进行时间的统计并保存,通过相应的接口将时间数据传入单片机,在单片机中单片机对接收到的数据进行相应的处理,从而实现时钟的功能。首先是时间格式的控制,这一部分是用户对于LCD1602所显示的时间能否能够简单的理解的关键,在时间显示方面格式如下:第一行 | 20*YE *M *D |第二行 |*h *M *S *W | 如上可知,在显示时有很多的数据时不需要改变的数据(如 20、YE、M等格式提示数据),所以在时间程序开始时需要首先对显示缓冲区进行相应的初始化处理,在相应在以后都不需要改变的位置值的设置,在以后都无需再次改变以减轻单片机的处理任务。随后从DS1302读取当前的时间数据,并将数据分别同步到相应的位的显示的缓存空间,以便显示时显示函数能够正确显示当前信息。在实现闹钟功能上则只需要将当前时间和已设置的闹钟的时间(默认为00:00)进行对比,如果时间相等,那么就执行蜂鸣器鸣叫程序,将蜂鸣器的位设置为高电平,从而使得蜂鸣器响,实现闹钟的定时提醒的功能,在按键模块调用后,如果有任意的键的输入那么则将蜂鸣器输出端置为低电平,从而实现了闹钟的开和关的功能。在时间的调节方面,首先设置的有效键为:(调时/调闹钟/正常)模式转换键键值为14,(当前修改的位的)位切换键键值为12(+)和13(-),(数据调整的)调时键键值为10(+)和11(-)。在键盘扫描后得到键盘的返回值,通过队返回值的分析可以进行相应的数据的处理,从而实现了时间及闹钟的相应数据的修改,实现对系统的控制。 对 DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器, 其中有: 7个寄存器与日历、时钟相关,存放的数据位为 BCD码形式。 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器 及与RAM 相关的寄存器等。 时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。时钟日历包含在7个读/写寄存器内,读/写寄存器中的数据是BCD码。 秒寄存器的BIT7定义为时间暂停位,当BIT1为1时,时钟振荡器停止工作, DS1302进入低功耗模式,电源消耗小于100微安,当BIT1为0时,时钟振荡 器启动,DS1302正常工作。 小时寄存器的BIT7定义为12或24小时工作模式选择位,当BIT7为高时, 为12小时工作模式,此时BIT5为AM/PM位,低电平标示AM,高电平标示PM,在24小时模式下,BIT5为第二个10小时位标示(2023时)。 写保护寄存器的BIT7:WP是写保护位,工作时,出WP外的其他位都置为 0,对时钟/日历寄存器或RAM进行写操作之前,WP必须为0,当WP为高电平的时候,不能对任何时钟/日历寄存器或RAM进行写操作。 关于突发模式(burstmode或称多字节传输模式),突发模式可以指定任何的时钟/日历或者RAM寄存器为突发模式,和以前一样,第6位指定时钟或RAM而0位指定读或写。突发模式的实质是指一次传送多个字节的时钟信号和RAM 数据。 2、时钟部分设计框图图 4.42.03、 时钟部分实现代码void time (void)char dat;unsigned char j,time_1,flag_sound=0;while (1)/读取时钟芯片的时间值 if (state=0)GetTime(); dsp00=0;dsp01=2;dsp02=0;dsp05=Y;dsp06=E; dsp07=0;dsp010=M;dsp011=0;dsp014=D;dsp015=0;dsp12=H;dsp13=0;dsp16=M;dsp17=0;dsp110=S;dsp111=0;dsp113=W;dsp114=0x20; elseswitch (set_nu) case1:dsp00=0,dsp07=0,dsp011=0,dsp13=0,dsp17=0x3E,dsp111=0;break;case2:dsp00=0,dsp07=0,dsp011=0,dsp13=0x3E,dsp17=0,dsp111=0;break;case3:dsp00=0,dsp07=0,dsp011=0,dsp13=0x3C,dsp17=0,dsp111=0;break; case4:dsp00=0,dsp07=0,dsp011=0x3E,dsp13=0,dsp17=0,dsp111=0;break; case5:dsp00=0,dsp07=0x3E,dsp011=0,dsp13=0,dsp17=0,dsp111=0;break;case6:dsp00=0,dsp07=0,dsp011=0,dsp13=0,dsp17=0,dsp111=0x3E;break;case7:dsp00=0x3E,dsp07=0,dsp011=0,dsp13=0,dsp17=0,dsp111=0;break;case8:dsp00=0,dsp07=0,dsp011=0,dsp13=0x3E,dsp17=0,dsp111=0;break;case9:dsp00=0,dsp07=0,dsp011=0,dsp13=0x3C,dsp17=0,dsp111=0;break;if (state=2)/写入显示缓存dsp14=tableTableDs13027/10;dsp15=tableTableDs13027%10;dsp10=tableTableDs13028/10;dsp11=tableTableDs13028%10;dsp115=T;/调闹钟提示标志elsedsp14=tableTableDs13021/10;dsp15=tableTableDs13021%10;dsp10=tableTableDs13022/10;dsp11=tableTableDs13022%10;dsp18=tableTableDs13020/10;dsp19=tableTableDs13020%10;if (state=1)dsp115=N;/非调闹钟提示标志dsp112=tableTableDs13025;dsp03=tableTableDs13026/10;dsp04=tableTableDs13026%10;dsp08=tableTableDs13024/10;dsp09=tableTableDs13024%10;dsp012=tableTableDs13023/10;dsp013=tableTableDs13023%10;if(TableDs13027=TableDs13021)&(TableDs13022=TableDs13028)&(!flag_sound)/检测闹钟sound=1;/打开闹钟time_1=TableDs13021;flag_sound=1;if (flag_sound)if (TableDs13021-time_1)=1)sound=0;flag_sound=0;dat=keyscan();/扫描键盘display();if (j=P2&0x08)=0x08)/转至计算程序mod_flag=1;return;if (dat9&dat20)if (state!=0)switch (dat)case 10: chagne_time(&dat);break;/时间加case 11: chagne_time(&dat);break;/时间减case 12: if (state=1)if (set_nu!=7)set_nu+;else set_nu=1;break;elseif(set_nu=8)set_nu=9;elseset_nu=8;break;/转换当前需要改变时间的段case 13:if (state=1)if (set_nu!=1)set_nu-;else set_nu=7;break;elseif(set_nu=8)set_nu=9;elseset_nu=8;break;if (dat=14)/键值为14模式转换if (state!=2)state+;if(set_nu=0)set_nu+;elseset_nu=0;else state=0; 五、总结本次设计主要使用的是AT89S52单片机进行设计的一款带闹钟时钟的8位计算器,在这个设计中用到了诸如DS1302、LCD1602、44矩阵键盘等等一些硬件,通过对系统的功能分析先画出了系统的大致框图,再通过进一步的进行细化将设计进一步完善。在设计过程中其实还是遇到了一些问题,比如LCD1602以及DS1302的驱动的问题,通过查阅相关的文档并仔细阅读后根据相关说明才写出了与系统相关的硬件的操作的函数,在这个过程中其实也学到了一些查找资料以及遇到问题解决问题的方法。其实这个设计可以通过改用处理能力更强的处理芯片就能够实现更多位数计算,如果可能的,更可以使用专用的芯片和显示器从而提高产品的性价比迎合更多使用者的意向。参考文献1 胡 辉. 单片机原理与应用. 北京:中国水利水电出版社,20072 林志琦. 单片机原理接口及应用(C语言版).北京:中国水利水电出版,20073 赵克林. C语言实例教程. 北京:人民邮电出版社,20074 李全利. 单片机原理及应用技术(第三版).高等教育出版社,2009.15 胡宴如 模拟电子技术基础(第二版).高等教育出版社,2010.4 /*基于STC89C52的简易计算器(毕业论文程序)*主要程序模块包括:1、实现计算功能模块(当系统处于计算模式时从44键盘输入* 并通过CPU计算出结果,再有显示程序将结果写入LCd并显示)* 2、时钟功能模块(当系统处于时钟模式时,系统会从时钟模块定时读入始终数据* 并通过一定的处理输出到LCD显示,所输出的时钟包括时、分、秒、月、日、* 年,以及到整点提醒,提醒时间最多为30S,如中间有人输入停止信号则停止)* 3、控制输入模块(不断扫描44键盘,若有输入则进行判定当前模式并调用相* 对应的模块进行处理)*主要硬件连接描述:1、LCD显示数据口接P0口,RS为P20,P21为RW,P22为E口* 2、键盘为4*4键盘,接在P1口,盘P23作为模式手动转换输入口* 3、时钟芯片接 P2.5RET,P2.6SCLK,P2.7I/O*4、P2.4为扬声器接口*5、P2.3为模式(计算器及万年历)转换键*/#include#include #define keyboard P1;#define key_mod P2;#define BUSY 0x80 /常量定义 sbit rs=P20;/*/ sbit rw=P21;/*/ sbit en=P22;/*/ sbit sound=P24;/*声音输出引脚*/ sbit T_CLK = P26; /*实时时钟时钟线引脚 */ sbit T_IO = P27; /*实时时钟数据线引脚 */ sbit T_RST = P25; /*实时时钟复位线引脚 */ sbit bg=P30;/背光/*按键程序*/char keyscan();/*显示程序*/void display();idata unsigned char dsp016,dsp116;/显示缓冲区/*计算程序*/void calculate(unsigned char k,unsigned char *c1,unsigned char *c2);/c1、c2用于指向存放计算数据的地址,k为运算符/*将计算后的数据转化到显示缓冲区以便输出*/void dat_change(long *p,unsigned char *a,unsigned char sy);/*错误时输出提示 Enter Error !*/void error();/*将需要显示的数据传送至显存*/void transfer(unsigned char *a,unsigned char sy);void counter();void time();idata unsigned char TableDs130217=55,59,23,4,3,5,11,0,0,0,0,0,0,0,0,0,0; /初始化时时间日期设置1秒、2分、3时、4日、5月、6星期、7年、8闹分、9闹时void Write1302(unsigned char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宁夏回族自治区银川市兴庆区高级中学2025届高考化学试题考前最后一卷预测卷(一)含解析
- 云南省文山壮族苗族自治州富宁县2025年三年级数学第二学期期末达标检测试题含解析
- 上海市杨浦区名校2025年中考化学试题模拟试卷解析含解析
- 山东泰安2024-2025学年初三下学期考试物理试题理试题分类汇编含解析
- 浙江舟山群岛新区旅游与健康职业学院《食品感官分析》2023-2024学年第一学期期末试卷
- 盆底康复治疗规范与方法
- 湛江市大成中学高一下学期第一次月考物理试题
- 康复护理颈椎病课件
- 2025海运合同样本范文
- 2025版企业办公租赁合同范本
- 不动产登记数据安全保密责任书
- 物业小区保洁清洁方案
- 银行从业资格考试题库附参考答案(共791题精心整理)
- 年产20吨阿齐沙坦原料药生产车间的设计和实现材料学专业
- 原地面高程复测记录表正式版
- 高等学校建筑学专业本科(五年制)教育评估标准
- 沪宁城际接触网专业验收标准
- MQ2535门座起重机安装方案
- 过程审核VDA6.3检查表
- 安徽省融资性担保公司代偿损失核销管理暂行办法
- 长城哈弗h6驱动桥毕业设计
评论
0/150
提交评论