电脑钟的设计与制作_第1页
电脑钟的设计与制作_第2页
电脑钟的设计与制作_第3页
电脑钟的设计与制作_第4页
电脑钟的设计与制作_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、长治职业技术学院信息工程系毕业设计说明书设计课题名称 电脑钟的设计与制作 专业班级 09 电气大专班 学生姓名 任 韶 杰 指导教师 史 曙 光 2011年 6月19日毕业设计任务书专业: 电气自动化技术 班级:09电气大专班设 计 课 题电脑钟的设计与制作指 导 教 师史曙光学生姓名任韶杰设计起止时间2011年5月3日-2011年6月19日共五周毕业设计的目的与任务通过毕业设计将前面所学知识融会贯通,锻炼独立设计、制作和调试应用系统的能力,深入领会单片机应用系统的软、硬件调试方法和系统研制开发过程。进一步熟悉单片机特性,掌握单片机硬件系统结构,软件对硬件的控制功能,熟练掌握MCS-51单片机

2、指令系统的应用及程序设计、开发环境。毕业设计报告内容要求要求利用单片机设计制作电脑钟。具体指标如下:1、自动计时,由6位LED显示器显示时、分、秒。2、具备校准功能,可以直接由09数字键设置当前时间。3、具备定时启闹功能。4、一天时差不超过1钞钟。拟定的工作进度(以周为单位)1、第一周确定课题,收集资料;2、第二周初步确定控制方案;3、第三至六周完成设计任务书要求的设计内容;4、第七周完成毕业设计说明书的编写工作。任务下达人(签字):史曙光 日期:2011年5月3日任务接受人(签字):任韶杰 日期:2011年5月3日信息工程系毕业设计综合评价表指导教师对设计及说明书的评语指导教师签字: 年 月

3、 日 毕业设计指导小组意见毕业设计指导小组组长签字: 年 月 日毕业设计及答辩评语答辩小组组长签字: 年 月 日备注毕业设计成绩答辩小组组长签字年 月 日目录摘 要1第一章 概 述21.1 单片机的发展21.2 单片机的应用3第二章 总体方案42.1计时方案42.2键盘/显示方案5第三章 显示电路介绍63.1数码管简介63.2 数码管工作原理63.3显示种类63.4 数码管字形编码7第四章 硬件设计84.1电路原理图84.2系统工作流程8第五章 软件设计115.1系统资源分配115.2软件流程11第六章 毕业设计心得体会26摘 要时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科

4、学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工

5、作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。第一章 概 述1.1 单片机的发展1971年微处理器研制成功不久,就出现了单片微型计算机即单片机,但最早的单片机是1位的,处理能力有限。单片机的发展可分为4个阶段: 第一阶段(1974-1976):单片机初级阶段。因为受工艺限制,单片机采用单片的形式而且功能比较简单。例如

6、美国仙童公司生产的F8单片机,实际上只包括了8位CPU、64个字节的RAM和2个并行接口。 第二阶段(1976-1978):低性能单片机阶段。以INTEL公司制造的MCS-48系列单片机为代表,该系列单片机片内集成有8位CPU、8位定时器/计数器、并行I/O接口、RAM和ROM等。但是最大的缺点就是无串行接口,中断处理比较简单而且片内RAM和ROM容量较小且寻址范围不大于4KB。第三阶段(1978-1983):高性能单片机阶段。这个阶段推出的单片机普遍带有串行接口,多级中断系统,16位定时器/计数器,片内ROM、RAM容量加大,且寻址范围可达64KB,有的片内还带有A/D转换器。这类单片机的典

7、型代表是INTEL公司的MCS-51系列的8051、Motorola公司的6801和ZILOG公司的Z8等。由于这类单片机的性能价格比高,所以直到现在仍被广泛使用,是目前应用数量最多的单片机。 第四阶段(1983年至今):8位单片机巩固发展以16位单片机、32位单片机推出阶段。此阶段的主要特征是:一方面发展16位单片机、32位单片机及专用型单片机;另一方面不断完善8位高档单片机,改善其结构,增加其片内器件,以满足不同用户的需要。16位单片机的典型产品,如早期Intel公司生产的MCS-96系列单片机,片内带有多通道10位逐次逼近比较式A/D转换器和高速输入/输出部件,实时处理的能力很强;再如近

8、几年IT公司推出的MSP430系列微功耗的16位单片,更是降低了功耗,可采用1.8-3.6V电压供电,并集成了更丰富的片内资源。而32位单片机除了具有更高的集成度外,其晶振已达20MHZ,这使32位单片机的数据处理速度比16位单片机增快许多,性能比8位、16位单片机更加优越,也能处理较复杂的图形和声音数据。1.2 单片机的应用工业自动化:在自动化技术中,无论是过程控制技术、数据采集技术还是测控技术,都离不开单片机。在工业自动化的领域中,机电一体化将发挥愈来愈重要的作用,在这种集机械、为电子和计算机技术为一体的综合技术中,工业自动化也发展到了一个新的高度,出现了无人工厂、机械人作业、网络化工厂等

9、,不仅将人从繁重的、重复的和危险的工业现场解放了出来,还大大的提高了工作效率,降低了生产成本。智能仪器仪表:目前对仪器仪表的自动化和智能化要求越来越高。在自动化测量仪器仪表中,单片机应用十分普及单片机的使用有助于提高仪器仪表的精度和准确度,简化结构,减小体积,易于携带和使用,加速仪器仪表向数字化、智能化和多功能方面发展。消费类电子产品:该应用主要应用在家电领域。目前家电领域的一个重要发展趋势是不断提高其智能化程度。例如,电子游戏机、照相机、电冰箱、电视机、微波炉、手机、洗衣机、空调、IC卡、汽车电子设备等。在这些电子产品中应用单片机后,其功能和性能大大提高、并实现了智能化、最优化控制。通信方面

10、:较高档的单片机都具有通信接口,因此为单片机在通信设备中的应用创造了很好的条件。例如,在微波通信、短波通信、载波通信、光纤通信、程控交换等通信设备和仪器中都能找到单片机的应用。武器装备:在现代化的武器装备中,如飞机、军舰、坦克、导弹、鱼雷制导、智能武器装备、航天飞机导航系统,都有单片机在其中发挥重要作用。终端及外部设备控制:计算机网络终端设备,如银行终端、以及计算机外部设备如打印机、硬盘驱动器、绘图机、传真机、复印机等,在这些设备中都使用了单片机。近年来随着科技的飞速发展,同时带动自动控制系统日新月异更新,单片机的应用正在不断地走向深入。第二章 总体方案2.1计时方案方案一:采用实时时钟芯片。

11、针对计算机系统对实时时钟功能的普遍要求,各大芯片生产厂家陆续推出了一系列的实时集成电路,如DS1287、DS12887、DS1320等。这些实时时钟芯片具备年、月、日、时、分、秒计时功能,计时数据的更新每秒自动进行一次,不需要程序干预。计算机可以通过中断或查询方式读取计时数据并进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能:具有可编程方波输出功能,可用作实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需要变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不

12、用占用CPU时间,因此,在工业实时测控系统中多采样用这一类专用芯片来实现实时时钟功能。方案二:软件控制。当今单片机厂商琳琅满目,产品性能各异。常用的单片机有很多种:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、台湾Winbond(华邦)W78系列、荷兰Pilips的PCF80C51系列、Microchip公司的PIC系列、Zilog的Z86系列、Atmel的AT90S系列、韩国三星公司的KS57C系列4位单片机、台湾义隆的EM-78系列等。我们最终选用了ATMEL公司的AT89C51单片机。AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位

13、单片机,片内含8Kbytes的可反复擦写的只读程序存储器(PEROM)和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8051产品引脚兼容,片内置通用8位中央处理器(CPU)和FLASH存储单元,功能强大AT89C51单片机适用于许多较为复杂控制应用场合。所以我们最终选用AT89C51单片机。利用MCS-51内部的定时、计数器进行中断定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,切可以使我们在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,因此本系统将采用软件方法实现计时。2.2键盘/显示方

14、案对于实时时钟而言,显示显然是另一个重要的环节。通常有两种显示方式:动态显示和静态显示。方案一:串口扩展,LED静态显示。如图2.1(a)所示,该方案占用接口资源少,采用串口传输实现静态显示,显示亮度有保证,但硬件开销大,电路复杂,信息刷新速度慢,比较适用于并行口资源较少的场合。 方案二:8155扩展,LED动态显示。如图2.1(b)所示,该方案硬件连接简单,但动态扫描的显示方式需要占用CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。串行口8031P1口移位寄存器LED1移位寄存器LED24×4键盘(a) 静态显示框图80318155键盘显示接口LED显示4×

15、;4键盘(b) 动态显示框图图2.1 显示方式框图本系统选择动态显示方式。第三章 显示电路介绍3.1数码管简介数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 9、字符A F及小数点“·”。数码管的外形结构如图3.1(a)所示。数码管又分为共阴极和共阳极两种结构,分别如图3.1(b)和图3.1(c)所示。(a) 外型结构;(b) 共阴极;(c)共阳极图3.1 数码管结构图3.2 数码管工作原理由于我们采用的是共阴极数码管所以介绍共阴极数码管的工作原理如下。共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚

16、接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。3.3显示种类静态显示静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别与一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU时间少

17、,编程简单,显示便于监测和控制,但其占用的接口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。 动态显示动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常,各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示,必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码。依此规律循环,即可使各位数码管显示将要显示的字符。虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示

18、间隔足够短就可以给人以同时显示的感觉。采用动态显示方式比较节省I/O口,硬件电路也较静态显示方式简单,但其亮度不如静态显示方式,而且在显示位数较多时,CPU要依次扫描,占用CPU较多的时间。3.4 数码管字形编码要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。共阴极LED显示字型码如表3-1所示:显示字符共阴极显示字符共阴极03FH96FH106HA77H25BHB7CH34FHC39H466HD5EH56DHE79H67DHF71H707H87FH表3-1 LED显示字型码表第四章 硬件设计4.1电路原理图电脑钟电路的核心是89C51单片机,其内部带有4KB的FLASHR

19、OM,无须外扩展存储器;电脑时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必扩展片外RAM。系统配备6位LED显示和4×3键盘,采用8155作为键盘/显示接口电路。利用8155的A口作为6位LED显示的位选接口,其中PA0PA5分别对应位LED0LED5,B口则作为段选口,C口的3位为键盘输入口,对应02行,A口同时用作键盘的列扫描口。由于采用共阴极数码管,因此口输出低电平选中相应的位,而B口输出高电平点亮相应的段。P1.0接蜂鸣器,低电平驱动蜂鸣器鸣叫启闹。由图4.1可见,8155的地址分配如下:由控制寄存器:8000H,定义为PORTA口:8001H,定

20、义为PORTAB口:8002H,定义为PORTBC口:8003H,定义为PORTC如果使用本书配备的实验板实现该电脑钟,需将8511地址改变为控制寄存器:4400HA口:4401HB口:4402HC口:4403H并通过引出的P1口外接一个蜂鸣器电路,或是用P1口上的发光二极管模拟闹钟功能。需要指出的是,实验板使用的是8031芯片,使用外扩程序存储器EPROM2764,因此其EA脚必须接地。原理图如图4.1所示。4.2系统工作流程本电脑钟具备以下功能:(1) 时钟显示:6位LED从左到右依次显示时、分、秒,才用24小时计时(2) 键盘功能:采用4×3键盘,包括:图4.1原理图09 数字

21、键,键号为00H09HC/R键 时间设定/启动计时,键号为0AHALM键闹钟设置/启闹/停闹键,键号为0BH其工作流程如下:(1) 时间显示:上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间。(2) 时间调整:按下C/R键,系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间。按下09数字键可以顺序设置时、分、秒,并在相应LED管上显示设置值,直至6位设置完毕。系统将自动由设定后的时间开始计时显示。(3) 闹钟设置/启闹/停闹:ALM键,系统继续计时,显示00:00:00,进入闹钟设置状态,等待键入启闹时间。按下09数字键可以顺序进行相应的时间设置,

22、并在相应LED管上显示设置值,直至6位设置完毕。这将启动定时启闹功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下ALM键停闹,并取消闹钟设置。第五章 软件设计5.1系统资源分配为方便阅读程序,先对系统的资源分配加以说明。(1)定时器:定时器0用作时钟定时,按方式1工作,每隔100ms溢出中断一次。(2)片内RAM及标志位的分配与定义见表5-1。地址功能名称初始化值30H35H显示缓冲区,小时、分、秒(高位在前)DISP0DISP500H3CH3FH计时缓冲区,时、分、秒、100msHOUR,MIN,SEC,MSEC00H40H42H闹钟值寄存区,时、分、秒AHOUR,AMIN,ASE

23、CFFH50H7FH堆栈区PSW.5计时允许位(1:禁止,0:允许)F00PSW.1闹钟标志位(1:正在响闹,2:未响闹)F10表5-1电子钟控制软件片内RAM及标志位分配表5.2软件流程根据上述工程流程,软件设计可分为以下几个功能模块:(1) 主程序:初始化与键盘监控。(2) 计时:为定时器0中断服务子程序,完成刷新计时缓冲区的功能。(3) 时间设置与闹钟设置:由键盘输入设置当前时间与定时启闹时间。(4) 显示:完成6位动态显示。(5) 键盘扫描:判断是否有键按下,并求取键号。(6) 定时比较:判断启闹时间到否?如时间到,则启动蜂鸣器鸣叫。(7) 其它辅助功能子程序,如键盘设置、拆字、合字、

24、时间合法性检测等。下面分模块进行软件设计:(1)主程序模块MAIN:流程图如图5.1所示。NYYYN开始定义堆栈区8155、定时器0、数据缓冲区、闹钟标志位初始化是C/R键调用定时比较程序停闹清零闹钟标志请用键扫描子程序是ALM键闹钟标志位=1地址指针指向闹钟值寄存区调用时间设置/闹钟定时程序地址指针指向计时缓冲区图5.1 主程序流程图(2)计时程序模块CLOCK:流程图如图5.2所示。如前所述,系统定时采用定时器与软件循环相结合的方法。定时器0每隔100ms溢出中断一次,则循环中断10次延时时间为1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:0

25、0:。设系统使用6MHz的晶振,定时器0工作在方式1,则100ms定时对应的定时器初值可由下式计算得到:定时时间=(216-定时器0初值)×(12/fosc)时间校正重装定时器0初值循环次数减1满10次秒单位加160秒到秒单位清零分单位加160分到分单位清零小时单位加1小时单位清零24小时到打、到恢复现场返回保护现场因此,定时器0初值=3CB0H,即TH0=3CH,TL0=0B0H当系统使用其它频率的晶振时,可以由上式计算相应的定时器0初值,也可以改变定时时间。例如当系统晶振为12MHz时,同样的初值对应的定时时间为50ms,则循环中断次数为20次时,延时时间为1s.这里有两个问题需

26、要特别重视。NNNYY第一,定时器溢出产生中断请求,CPU并不一定立即响应中断,而可能需要延迟一个中断响应时间之后才能响应中断,中断响应时间大约38个机器周期。显然,这将在定时时间中加入额外的延时时间,导致计时误差。为了保证计时精度,必须采取措施经行补偿。我们采用增大重装的定时器0初值的方法来减少定时器0定时时间。具体应调整为多大,一般需要通过调试来确定。经测试,定时器0重装初值设为3CB7H3CBFH可以满足精度要求。Y第二,时间是按十进制递增,而MCS-51单片机只有二进制加法指令,因此用加法指令计时必须进行二十进制转换。N(3)时间设置程序和闹钟定时程序模块MODIFY:流程图如图5.3

27、所示。Y图5.2 计时程序流程图将键盘输入的6位时间值合并为3位压缩BCD码(时、分、秒)送入及时缓冲区和闹钟寄存区,作为当前及时起始时间和闹钟计时时间。该该模块的入口为计时缓冲区或闹钟值寄存取得首地址,置入R1忠程序调用一个键盘设置子程序KEYIN(如图5.4所示将键入的6 位时间值送入键盘设置缓冲区,然后用合字子程序COMB将键盘设置缓冲区中的6位BCD码合并为3位压缩BCD码,送入计时缓冲区或闹钟值寄存区。该程序同时作为时间之合法性检测程序,若键盘输入的小时值大于23,分和秒值大于59,则不合法,将取消保护现场调用键盘设置子程序ACALL KEYIN调用合字程序ACALL COMB恢复现

28、场返回图5.3 时间设置/闹钟定时流程图图5.4 键盘设置子程序流程图YN保护现场调用键盘扫描程序ACALL KEYSCAN显示缓冲区首地址送R0键盘输入次数送R7键号送R0显示缓冲区地址加1INC R0循环次数减1循环次数到恢复现场返回YY扫描键盘有键按下NN调用显示程序调用定时比较程序有键按下求取键号返回调用显示程序调用定时比较程序调用显示程序调用定时比较程序图5.5 键盘扫描流程图本次设置,清零重新开始计时。 (4)键盘扫描程序模块KEYSCAN流程图如图5.5所示。判断是否有键按下,无键按下则循环等待;有键按下则求取键号并将键号送入A累加器返回。程序中的去抖延时和循环等待延时都用DIS

29、PLAY子程序来代替,从而保证随时刷新显示。(5) 显示程序模块DISPLAY:流程图如图5.5所示。将显示缓冲区中的6位BCD码用动态扫描方式显示。为此,必须首先将3字节计时缓冲区中的时、分、秒压缩BCD码拆分为6字节(时、分、秒的十位、个位分别占有一字节)BCD这一功能由拆字子程序SEPA来实现。需要注意的是,当按下时间或闹钟设置键后,在6位设置完成之前,应显示键入的数据,而不显示当前时间。为此,我们设置了一个计时显示允许标志位F0,在时间/闹钟设置期间F0=1,不调用SEPA,即调用SEPA 刷新显示缓冲区的前提条件是F0=0。图5.6 显示流程图保护现场允许显示计时时间动态扫描显示返回

30、调用拆字程序NY(6)定时比较程序模块ALARM:流程图如图5.7所示。将当前时间(计时缓冲区的值)与预设的启闹时间(闹钟设置寄存区的值)比较,二者完全相同时,启动蜂鸣器鸣叫,并置位闹钟标志位。返回后,待重新按下ALM键停闹,并清零闹钟标志。保护现场恢复现场闹钟值与计时值秒单位相等闹钟值与计时值分单位相等启闹闹钟标志置位闹钟值与计时值小时单位相等图5.7 定时比较流程图返回NNNYYY(7)拆字程序SEPA与合字程序COMB:如前所述,拆字程序的功能是将3字节计时缓冲区中的时、分、秒压缩BCD码拆分为6字节(时、分、秒的个位、十位分别占有一字节)位压缩BCD码送入计时缓冲区或闹钟值寄存区,同时

31、检测时间值得合法性。下面给出各模块的源程序。;*主程序*ORG 0000HAJMP MAINORG 000BHAJMP CLOCKORG 0030HPORT EQU 8000HPORTA EQU 8001HPORTB EQU 8002HPORTC EQU 8003HDISP0 EQU 30HDISP1 EQU 31HDISP2EQU 32HDISP3EQU33HDISP4EQU34HDISP5EQU35HHOUREQU3CHMINEQU3DHSECEQU3EHMSECEQU3FHAHOUREQU40HAMINEQU41HASECEQU42HF1BITPSW.1MAIN:MOVSP,#50H;设

32、置堆栈区MOVXDPTR,#PORTMOVA,#03HMOVXDPTR,A;8155初始化CLRF1;清零闹钟标志位CLRF0;允许计时显示MOVAHOUR,#0FFHMOVAMIN,#0FFHMOVASEC,#0FFHMOVR7,#10HMOVR0,#DISP0CLRALOOP:MOVRO,AINCR0DINZR7,LOOP;设置初值MOVTMOD,#01HMOVTL0,#0B0HMOVTH0,#3CH;定时器0初始化,定时时间100msSETBTR0;启动定时器SETBEASETBET0;开中断BEGIN:ACALLALARM;调用定时比较ACALLKEYSCAN;调用键盘扫描CJNEA,

33、#0AH,NEXT1;是CLRRET键否CLRTR0;是则暂时停止计时MOV R1,#HOUR;地址指针指向计时缓冲区首地址AJMP MODNEXT1:CJNEA,#0BH,BEGIN;是ALARM键否JB F1,NEXT2;闹钟正在闹响否MOV R1,#AHOUR;地址指针指向闹钟值寄存区首地址MOD:SETBF0 ;置位时间设置/闹钟定时标志,禁止显示计时时间ACALLMODIFY ;调用时间设置/闹钟定时程序SETBTR0 ;重新开始计时AJMPBEGINNEXT2:SETBP1.0;闹钟正在响闹,停闹 CLRF1;清零闹钟标志 AJMPBEGIN;*时间设置/闹钟定时模块MODIFY*

34、MODIFY: ACALL KEYIN ;调用键盘设置子程序ACALL COMB ;调用合字子程序 RET键盘设置子程序KEYIN:KEYIN: PUSH PSW PUSH ACC SETB RS1 ;保护现场 MOV R0,#DISP0 ;R0指向显示缓存区首地址 MOV R7,#06H ;设置键盘输入次数L1: CLR RS1 ACALL KEYSCAN ;调用键盘扫描程序取按下的键号 SETB RS1 CJNE A,#0AH, L2 ;键入数合法性检测(是否大于9)L2: JNC L1 ;大于9,重新输入 MOV R0,A ;键号送显示缓冲区 INC R0 DINZ R7,L1 ;6位时

35、间输入完否,未完继续,否则返回 POP ACC POP PSW CLR RS1 ;恢复现场 ERT;*键盘扫描 子程序KEYSCAN*KEYSCAN: ACALL TEST ;判断按键是否按下子程序TEST JNZ REMOV;有键按下调消抖延时 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN;无键按下继续判断是否按键REMOV: ACALL DISPLAY;调用显示子程序延时消抖 ACALL ALARM ACALL TEST;再判是否有键按下 JNZ LIST;有键按下转逐列扫描 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN;无按

36、键按下继续判断是否按键LIST: MOV R2, #OFEH;首列扫描字送R2 MOV R3, #00H;首列键号送R3LINE0:MOV DPTR, #PORTA ;DPTR指针指向8155的A口 MOV A, R2;首列扫描字送R2 MOVX DPTR, A;首列扫描字送8155的A口 MOV DPTR, #PORTC;DPTR指针指向8155的C口 MOVX A, DPTR ;读入C口地行状态 JB ACC.0, LINE1;第0行键无键按下转第1行 MOV A, #00H ;第0行有键按下,行首键号送A AJMP TRYK;求键号LINE1: JB ACC.1, LINE2 ;第1行键

37、无键按下,转第2行 MOV A, #04H ;第1行有键按下,行首键号送A AJMP TRYK ;求键号LINE2: JB ACC.2, NEXT ;第2行键无键按下,转第3行 MOV A, #08H ;第2行有键按下,行首键号送A AJMP TRYK ;求键号NEXT: INC R3 ;扫描下一列 MOV A, R2 ;列扫描字送A JNB ACC.3, EXIT;4列扫描完,重新进行下一轮扫描 RL A ;4列未扫描完,扫描字左移扫描下一列 MOV R2, A ;扫描字送A AJMP LINE0 ;转向扫描下一列EXIT: AJMP KEYSCAN ;等待下一次按键TRYK: ADD A,

38、 R3 ;按公式计算键码,求得键号 PUSH ACC ;键号入栈保护LETK: ACALL TEST ;等待按键释放 JNZ LETK ;按键未释放,继续等待 POP ACC ;按键释放,键号出栈 RET ;键盘扫描结束,返回TEST: MOV DPTR, #PORTA ;DPTR指针指向8155的A口 MOV A, #00H MOVX DPTR, A;全扫描字00H送8155的A口 MOV DPTR, #PORTC ;DPTR指针指向8155的C口 MOVX A, DPTR;读入C口行状态 CPL A;A取反,以高电平表示有键按下 ANL A, #07H;屏蔽高5位 RET;*显示子程序DI

39、SPLAY*DISPLAY: JB F0, DISP ;允许时间显示标志F0=1转DISP ACALL SEPA ;否则调用SEPA刷新显示缓冲区DISP: PUSH PSW ;动态扫描显示子程序 PUSH ACC SETB RS0 MOV DPTR, #PORTA MOV A, #0FFH MOVX DPTR, A;关显示 MOV R0,#DISP0 MOV R7, #00H MOV R6, #06H MOV R5,#0FEHDIS1: MOV DPTR, #TAB MOV A, R0 MOVC A, A+DPTR MOV DPTR, #PORTB MOVX DPTR, A MOV DPTR

40、, #PORTA MOV A, R5 MOVX DPTR, AHRE: DJNZ R7, HERE INC R0 MOV A, R5 DJNZ R6, DIS1 CLR RS0 POP ACC POP PAW RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH, 6FH,77H,7CH,39H,5EH,79H,71H ;共阴极字形码表;*合字子程序COMB*COMB: MOV R0, #DISP1 ;R0指向显示缓冲区小时低位 ACALL COMB1 ;合字 CJNE A, #24H,CHK ;小时大于24否CHK: JNC EXIT1 ;大于2

41、4则取消本次设置,推出 MOV R1, A ;否则小时送计时缓冲区/闹钟值寄存区小时单元 INC R1 MOV R0,#DISP3 ;R0指向显示缓冲区分低位 ACALL COMB1 CJNE A, #60H, CHK1CHK1:JNC EXIT1 MOV R1, A INC R1 MOV R0,#DISP5 ;R0指向显示缓冲区秒低位 ACALL COMB1 CJNE A, #60H, CHK2CHK2:JNC EXIT1 MOV R1,A RETEXIT1: AJMP MAIN ;输入不合法退出,重新清零计时COMB1: MOV A, R0 ANL A, #0FH ;取出低位 MOV 43

42、H, A ;暂存于43H单元 DEC R0 ;指向高位 MOV A, R0 ANL A, #0FH SWAP A ;高位送高4位 ORL A, 43H ;高低位合并 RET;*拆字子程序SEPA* SEPA: PUSH PSW PUSH ACC SETB RS0 MOV R0,#DISP5 ;指向显示缓冲区秒低位 MOV A, SEC ACALL SEPA1 MOV A,MIN ACALL SEPA1 MOV A, HOUR ACALL SEPA1 POP ACC POP PSW CLR RS0 RETSEPA1: MOV 44H, A ;暂存44H ANL A, #0FH ;取出低位 MOV R0, A ;送显示缓冲区低位 DEC R0 ;指向显示缓冲区高位 MOV A, 44H ANL A, #0F0H ;取出高位 SWAP A ;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论