单片机课设时钟跑表_第1页
单片机课设时钟跑表_第2页
单片机课设时钟跑表_第3页
单片机课设时钟跑表_第4页
单片机课设时钟跑表_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、成绩课 程 设 计课程名称单片机原理与应用课程设计课题名称时钟跑表设计专 业自动化班 级1303班学 号201301020331姓 名卓彬彬指导老师林国汉、王迎旭、李晓秀等2016年6月10日电气信息学院课程设计任务书课题名称时钟跑表设计姓 名卓彬彬专业自动化班级1303班学号31指导老师林国汉课程设计时间2016年5月30日-2016年6月10日一、任务及要求一、任务及要求设计任务:本课题要求以MCS-51系列单片机为核心,设计一个数字时钟。(1) 具有时钟和跑表功能,用LED或者液晶显示器进行显示;(2) 具有时钟调整功能(3) 具有闹钟功能(4) *能将闹钟时间在AT24C02保存(5)

2、 *其它功能 设计要求:(1) 确定系统设计方案;(2) 进行系统的硬件设计;(3) 完成应用程序设计;(4) 应用系统的硬件和软件的调试。二、进度安排第一周:周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。周二周三:完成硬件设计和电路连接周四周日:完成软件设计第二周:周一周三:程序调试周四周五:设计报告撰写。周五进行答辩和设计结果检查。三、参考资料1、王迎旭等.单片机原理及及应用M. 2版.机械工业出版社,20122、胡汉才.单片机原理及其接口技术M.3版.清华大学出版社,2010.3、戴灿金.51单片机及其C语言程序设计开发实例M.清华大学出版社,2010目 录第一章 总体方

3、案设计11.1 设计方案11.2 设计思路及系统框架图1第二章 硬件电路设计32.1 单片机AT89C5132.2 矩阵键盘电路42.3 蜂鸣器电路52.4 LED数码管显示电路52.5 24C02存储电路6第三章 软件设计73.1 系统主程序73.2 数码管显示程序73.3 矩阵键盘功能程序73.4 定时功能程序9第四章 调试114.1 系统调试方法114.2 调试结果114.3 调试中遇到的问题及其解决方法12第五章 总结13附录14附录A 电路仿真原理图14附录B 程序清单15第1章 总体方案设计1.1 设计方案 (1)通过单片机内部的计数/定时器,采用软件编程来实现时钟计数,一般称为软

4、时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合。 (2)采用时钟DS1302芯片,它的功能强大,功能部件集成在芯片内部,具有自动产生时钟等相关功能,硬件成本相对较高;软件编程简单,通常用在对时钟精度要求较高的场合。方案选择:最终这次我选择的是方案(1),因为方案(1)硬件电路简单,操作更方便简单。1.2 设计思路及系统框架图我们采用的是AT89C51作为时钟控制芯片。本次方案主要由时钟模块、秒表模块和闹钟模块组成,其中时钟模块包含时钟显示功能、时钟调整功能和时钟暂停功能,秒表模块包含秒表启动功能、秒表暂停功能、秒表时间存储功能和秒表回显功能,闹钟模

5、块包含闹钟调整功能、闹钟显示功能和闹钟存储功能。时钟通过定时器T0对时、分、秒的数值进行操作,并且秒计算到60的时候,要自己清零并向分进1,分计算到60的时候,要自己清零并向时进1,时进到24的时候,要清零,这样才能进行循环计时。秒表模块需要重新显示一个秒表界面,同时也应该需要通过另外一个定时器T1对秒表进行操作,从而保证在秒表界面,时钟显示模块的时间还在进行。闹钟模块则需要设计闹钟时间,当设计的闹钟时间和时钟的时间相等,蜂鸣器响起,从而达到闹钟功能,此外通过外接24c02存储芯片,将闹钟时间进行存储,且具有断电存储功能,当系统断电重新开启以后,可显示之前设定的闹钟值。此外还要实现对时间的调整

6、功能,AT89C51的P1口外接一个矩阵键盘,当按下K3键时,进行时钟调整,当K3按下一次时,是对时间的分钟进行调整,按下K5键数值加一,按下K6键数值减一。当按下K12键时,进行闹钟的调整,当K3按下一次时,是对闹钟的分钟进行调整,按下K5键数值加一,按下K6键数值减一。对于秒表模块,当按下K7键时,秒表启动,当按下K8键时,显示秒表当前值,但秒表继续走动。在秒表计时过程中,每按下一次K9键,则对秒表当前值进行存储,每按下K10键,则对存储值进行一一回显(矩阵键盘按键标号详见电路仿真图)。在单片机内部构建两个模块:控制模块、定时模块,用以实现根据要求进行自动计数功能。单片机外部构建四个电路:

7、矩阵键盘电路、数码管显示电路、蜂鸣器电路、24C02存储电路,用以实现对单片机内部计数选择控制、闹钟响铃、闹钟存储和时间输出的正确显示。该电子时钟是显示分、时值,秒为数码表的DP位闪烁的一种计时装置本次计时周期设置为24小时。为了确保时间正常校对,在系统中设有校对按钮,用以实现对数码管显示的正确调整,如图1.1所示为系统框架图。数码管显示电路矩阵键盘电路51单片机定时模块控制模块蜂鸣器电路24C02存储电路图1.1 系统框架图第2章 硬件电路设计2.1 单片机AT89C51AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS的8位微处理器,俗称单片机。AT89C51是一种带2

8、K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,如图2.1所示为AT89C51的管脚图。本次电路中用到单片机的P0、P1、P2、P3口,所示下面对这四个端口进行详细介绍。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入

9、。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。本次课设中P0口接的是数码管的8个管脚,P00P07依次接数码管的ADP管脚。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。本次P1课设口接的数码管的6个位选端口。 图2.1 89C51引脚图P2口:P2口为一

10、个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。本次课设中P2口的P24P27分别接的是数码管的位选W1W4。P3口:本次课设中P3口的P33和P34分别接的是24C02的S

11、CL和SDA,P37接的是蜂鸣器的一端。2.2 矩阵键盘电路在本次设计中,矩阵键盘的S1S4列分别接P17P14引脚,H1H4行分别接的是P13P10引脚。先从P1口的高四位输出高电平,低四位输出低电平,从P1口的高四位读取键盘状态。再从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到16个键的特征编码。举例说明如何得到按键的特征编码: 假设“K1”键被按下,找其按键的特征编码。从P1口的低四位输出低电平,即P10P13为输出口。高四位输出高电平,即P14P17为输入口。读P1口的高四位状态为“

12、0111”,其值为“70H”。再从P1口的低四位输出高电平,即P10P13为输入口。高四位输出低电平,即P14P17为输出口,读P1口的低四位状态为“1110”,其值为“0EH”。 将两次读出的P0口状态值进行逻辑或运算就得到其按键的特征编码为“7EH”。 用同样的方法可以得到其它15个按键的特征编码,如图2.2所示为矩阵键盘接线图。图2.2 矩阵键盘接线图2.3 蜂鸣器电路 因本次课设包含闹钟功能,故在P3口的P37接了一蜂鸣器。当时钟显示的时间与闹钟存储的时间相同时,P37引脚输出低电平,使蜂鸣器接通,发出滴滴的响声,响声持续时间为20秒,20秒后P37引脚输出高电平,蜂鸣器关断,如图2.

13、3所示为蜂鸣器接线图。图2.3 蜂鸣器接线图2.4 LED数码管显示电路在本次的设计中,采用的4位的数码管显示器。数码管如果按照段数分可为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多了一个小数点的显示;如果按照发光二极管单元的连接方式又可以分为共阳极数码管和共阴极数码管。共阳极的数码管是将所有发光二极管的阳极接到一起后就形成公共阳极(COM)的数码管,共阳极数码管在应用时要将公共极(COM)接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴极数码管是将所有发光二极管的阴极接到一起形成公共阴极(COM

14、)的数码管,共阴极数码管在应用时应将公共极(COM)接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。本次课设的数码管选用共阳极八段数码管,如图2.4所示为LED数码管接线图。图2.4 LED数码管接线图2.5 24C02存储电路根据本次课设要求,在闹钟时间调整以后要能够存储起来,当系统断电以后,能够将闹钟进行,等待系统再次接通电源后,启动时钟程序后,当时钟时间与存储的闹钟时间一致时,蜂鸣器发出响声。故选用AT24C02芯片,进行闹钟时间的存储。AT24C02芯片为256×8的EEPROM,采用8引脚DIP,其中Vcc

15、、GND为电源引脚,SCL、SDA为C总线引脚,A0A2为地址引脚,TEST为测试端,系统中可接地处理,如图2.5所示为AT24C02的引脚图。图2.5 AT24C02引脚图本次课设中AT24CO2的SCL和SDA分别接P34和P35,A0、A1、A2端接地,电路接线图,如图2.6所示。图2.6 AT24C02接线图第3章 软件设计3.1 系统主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,检测矩阵按键值,则转入相应的功能程序。主程序流程图如图3.1所示。 图3.1 主程序流程图 图3.2 数码管显示流程图 3.2 数码管显示程序本设计有4个数码管,从右到左

16、为时、分、秒。在本系统中数码管显示采用动态显示。在系统中从P1端口控制数码管的段选,输入数码管数组对数码管进行显示。同时用P2端口的P24P27对4位数码管实现位选。由于本次课设要求时钟和秒表的功能,因为我分别写了两个数码管显示函数,两个功能显示的格式进行了更改。数码管显示程序流程图如图3.2所示。3.3 矩阵键盘功能程序本次设计的16个矩阵按键共用到了12个按键,每个按键都有相应的功能。K1键为时钟启动键,按下K1键后数码管显示时钟。此时按下K3键以后进行时钟调整,按一下进行分钟调整,按两下进行小时调整。接着按K5键数值加一,按K6键数值减一。每次调整分钟或小时之后都要按K1键进行确定之后才

17、能重新按K3键进行调整。按下K7键启动秒表,接着按下K8键,秒表暂停,但此时秒表还在走动,只是显示按键时秒表的当前值。在秒表走动过程中,按下K9键则存储当前按下值,每按一下,存储一个值,按下K10键后则回显秒表之前存储的值,每按一下,回显一个时间,循环显示。K11键为闹钟显示功能按键,K12为闹钟调整按键,按一下进行分钟调整,按两下进行小时调整。接着按K5键数值加一,按K6键数值减一。每次调整分钟或小时之后都要按K11键进行确定之后才能重新按K12键进行调整。此外K2键为时钟暂停键,K4键为系统清零键。时钟模块、秒表模块和闹钟模块对应的矩阵键盘功能程序流程图分别如图3.3、图3.4、图3.5所

18、示。 图3.3 时钟模块矩阵键盘功能流程图 图3.4 秒表模块矩阵键盘功能流程图图3.5 闹钟模块矩阵键盘功能流程图3.4 定时功能程序T0用于时钟定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。秒单元加到60则对分单元加一,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到24则对时单元清0,标志一天时间计满。T1用于秒表定时,定时时间设为20ms,定时时间到则中断,在中断服务程序中用一个计数器对20ms计数,计5次则对秒表的100毫秒单元加一。100毫秒单元加到10则对秒单元加一,同时100毫秒单元清0

19、;秒单元加到1000则自动清0。时钟的秒显示为数码管第四位管子的DP值闪烁,每次秒加一DP就会闪烁一次。定时器T0功能流程图如图3.4所示,定时器T1功能流程图如图3.5所示。 图3.4 定时器T0功能流程图 图3.5 定时器T1功能流程图第4章 调试4.1 系统调试方法本次实验是采用的是硬件调试,由于有做好的电路板和硬件,所以调试起来比较方便。本次课题,通过在Keil软件里编写程序,通过对各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序,并生成相应的*.hex文件,然后通过使用stc-isp-15xx-v6.80软件下载到单片机中,进行程序的运行和调试,观察显示结果,根据显示的

20、结果和课题的要求再修改程序,再运行查找错误,直到满足要求。4.2 调试结果时钟显示、秒表显示和闹钟显示的调试结果分别如图4.1、4.2、4.3所示。图4.1 时钟显示调试图图4.2 秒表显示调试图图4.3 闹钟显示调试图4.3 调试中遇到的问题及其解决方法在调试的过程我遇到了一些问题,当我在编写秒表瞬时存储和回显程序的时候,我定义了两个数组,分别把瞬时秒表值存到数组里面然后再把它们一一读出来。在实际调试过程中,当按下回显按键时并没有显示出一些存储值,经过和同学的探讨才发现是用来读取数组值的变量定义成了局部变量,将其改正成全局变量以后就可以显示出一部分的值,但也没有全部的显示。在检查程序过程中发

21、现了用于秒表回显的一些判断条件以及一些变量的赋值有的错误,经过老师的提醒和同学的帮助最终把存储的秒表值都能够会显出来了。第5章 总结通过本次课程设计,将许多在之前在课本上学习过或者了解过的知识真正的运用到实践中。本次课题为时钟跑表,因为之前自己在课余的时候学习过一些关于时钟的程序并且自己也在开发板上做过一些时钟的程序,所以关于时钟和秒表的计时相应程序的编写就轻松许多。所以本次课设主要就是在时钟和闹钟调整以及秒表的回显和用24C02存储闹钟时间花了大量的时间来编写相应的程序。通过看书和查阅有关资料慢慢就有了一些思路,然后就根据自己的设想以及对矩阵键盘的各个按键定义的功能一点点编程。每次编写完相应

22、的程序,都会先下载到开发板中进行调试。每个模块程序的编写都不是一帆风顺,在调试过程中都会遇到这样或者那样的问题。发现问题就要学会解决,所以本次课设也充分锻炼了我的独立思考的能力以及解决问题的能力。遇到问题主要就是检查程序,一步步的运行和调试,通过问同学和请教老师使得问题在多次试验后都能够轻松的解决。本次实验还让我更加熟练的掌握和学会了Proteus的使用技巧和方法知道了怎样将Proteus与Keil连接进行单步调试。通过对新加的功能(闹钟时间的存储)让我懂得了AT24C02的原理和使用方法,了解了一些单片机I/O模拟C总线扩展AT24C02连接电路和原理,通过和同学讨论和请教老师最后成功的完成

23、了相应程序的编写,以及调试出理想的功能效果。在这里感谢林国汉老师对本次课设的悉心指导,使我的课设能够成功的完成。附录附录A 电路仿真原理图 附录B 程序清单3#include"reg52.h"#include"intrins.h"#ifndef _I2C_H_#define _I2C_H_#define uint unsigned int#define uchar unsigned charuint xdata resultm100;uint xdata resultf100;uchar code duanxuan= 0xc0,0xf9,0xa4,0xb

24、0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f,0x83,0xc6,0xa1,0x86,0x8e ,0xff;/共阳极0f数码管编码uchar code duanxuan1= 0xc0-0x80,0xf9-0x80,0xa4-0x80,0xb0-0x80,0x99-0x80,0x92-0x80,0x82-0x80,0xf8-0x80,0x80-0x80,0x90-0x80,0x7f-0x80,0x83-0x80,0xc6-0x80,0xa1-0x80,0x86-0x80,0x8e-0x80 ,0xff-0x80;uchar code weixuan=0xe0,0xd0

25、,0xb0,0x70;uchar flag3;uchar temp,timer0_shi,timer0_fen,timer0_miao;uchar timer1_fm,nao1,nao2,nao3,nao4;uint timer1_zm;uchar timer1_bw, timer1_sw, timer1_gw; uchar c,z,k; sbit beep =P37 ;sbit scl=P34;sbit sda=P35;uint t0=0,t1=0;/-定义使用的IO口-/sbit I2C_SCL = P34;sbit I2C_SDA = P35;void I2C_Delay10us();v

26、oid I2C_Start();void I2C_Stop();uchar I2C_SendByte(uchar dat, uchar ack);uchar I2C_ReadByte();void At24c02Write(unsigned char addr,unsigned char dat);unsigned char At24c02Read(unsigned char addr);#endifvoid init(void)TMOD=0x11;TCON=0x01; TH0=0x3c; /定时50ms TL0=0x0b0; TH1=0xb1;/定时20ms TL1=0xe0; EA=1;

27、EX0=1; ET0=1; ET1=1;void delay(uint x) /12Mhz延时xmsuint i,j;for(i=x;i>0;i-)for(j=20;j>0;j-);void smg_display(uchar dx,uchar wx)/数码管位选P0=duanxuandx;P2=weixuanwx-1;delay(1); void smg_display1(uchar dx,uchar wx)/数码管位选P0=duanxuan1dx;P2=weixuanwx-1; delay(1); uchar keyscan()uchar temp_keyvalue,temp1

28、_keyvalue;16P1=0xf0;delay(1);temp_keyvalue=P1;if(temp_keyvalue!=0xf0)delay(2); temp_keyvalue=P1; if(temp_keyvalue!=0xf0)temp1_keyvalue=temp_keyvalue&0xf0; P1=0x0f; delay(2);temp_keyvalue=P1;temp1_keyvalue=temp1_keyvalue|temp_keyvalue; while(temp_keyvalue!=0x0f)P1=0x0f;temp_keyvalue=P1; return te

29、mp1_keyvalue;void naozhong(uchar s,uchar f) if(s=timer0_shi&&f=timer0_fen) if(timer0_miao<=20) beep=0; if(timer0_miao>20) beep=1;void disposal(void) uchar hour,second,timer1_ffm; uchar zt_bw,zt_sw,zt_gw,zt_fm;uchar nao_fen,nao_shi; uchar nao_gsw,nao_ggw,nao_dsw,nao_dgw; uchar key_progr

30、ess,timer0_gsw,timer0_ggw,flag1,flag2; uchar timer0_dsw,timer0_dgw,s1,s2,f1,f2; key_progress=keyscan(); switch(key_progress)case 0xbe:/ 时钟暂停TR0=0;timer0_gsw=timer0_shi/10;timer0_ggw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_display1(timer0_ggw,2);

31、 smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break;case 0xee: /清零TR0=0; TR1=0;timer1_zm=0; timer1_fm=0; timer0_shi=0; timer0_fen=0;timer0_dgw=timer0_fen%10;timer0_gsw=timer0_shi/10;timer0_ggw=timer0_shi%10;timer0_dsw=timer0_fen/10;timer0_dgw=timer0_fen%10;smg_display(timer0_gsw,1); smg_disp

32、lay1(timer0_ggw,2); smg_display(timer0_dsw,3);smg_display(timer0_dgw,4); break; case 0x7e:/时钟启动 keyscan(); temp=P1; nao1=At24c02Read(1); nao1=At24c02Read(1); nao2=At24c02Read(2); nao2=At24c02Read(2); while(temp =0xf0) TR0=1; flag3=1; timer0_gsw=timer0_shi/10; timer0_ggw=timer0_shi%10; timer0_dsw=tim

33、er0_fen/10; timer0_dgw=timer0_fen%10; smg_display(timer0_gsw,1); delay(30); smg_display1(timer0_ggw,2); delay(30); smg_display(timer0_dsw,3); delay(30); smg_display(timer0_dgw,4); delay(30); if(nao1|nao2)!=0) naozhong(nao2,nao1); temp=P1; break; case 0xde: / 时钟调整 keyscan(); flag3=0; temp=P1; flag2=0

34、; flag1+; if(flag1>2) flag1=2; while(temp =0xf0) s1=timer0_gsw; s2=timer0_ggw;f1=timer0_dsw;f2=timer0_dgw; hour=s2+s1*10; second=f2+f1*10; smg_display(s1,1);delay(50);smg_display1(s2,2);delay(50);smg_display(f1,3);delay(50); smg_display(f2,4);delay(50);temp=P1; break; case 0x7d: /加时钟 flag3=0; if(

35、flag1=1|flag2=1) second+; if(flag1=2|flag2=2) hour+; if(hour>=24) hour=0; if(second>=60) second=0;keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay(50);smg_display(f1,3);delay(50);smg_display(f2,4); de

36、lay(50);nao1=f2+f1*10; nao2=s2+s1*10;temp=P1;if(keyscan()=0x7e) timer0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10; flag1=0; flag2=0; break; case 0xbd: /减时钟 flag3=0; if(flag1=2|flag2=2) if(hour<=0) hour=24; hour-; if(flag1=1|flag2=1)

37、if(second<=0) second=60; second-; keyscan(); temp=P1; while(temp =0xf0) s1=hour/10; s2=hour%10; f1=second/10;f2=second%10; smg_display(s1,1); delay(50); smg_display(s2,2);delay(50);smg_display(f1,3);delay(50);smg_display(f2,4); delay(50);temp=P1;nao1=f2+f1*10; nao2=s2+s1*10;if(keyscan()=0x7e) tim

38、er0_fen=f2+f1*10; timer0_shi=s2+s1*10; flag1=0; flag2=0; if(keyscan()=0xdb) nao_fen=f2+f1*10; nao_shi=s2+s1*10; flag1=0; flag2=0; break; case 0xeb:/ 闹钟调整 keyscan(); flag3=0; temp=P1; flag2+; flag1=0; if(flag2>2) flag2=2; while(temp =0xf0) nao_gsw=nao2/10; nao_ggw=nao2%10; if(flag2=1)nao_dsw=nao1/

39、10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(50); smg_display1(nao_ggw,2);delay(50); smg_display(nao_dsw,3);delay(50);smg_display(nao_dgw,4); delay(50);temp=P1; break;case 0xdb:/闹钟确定 flag3=0; keyscan(); temp=P1; while(temp =0xf0) nao_gsw=nao2/10; n

40、ao_ggw=nao2%10;nao_dsw=nao1/10;nao_dgw=nao1%10;nao3=nao_ggw+nao_gsw*10; nao4=nao_dgw+nao_dsw*10;smg_display(nao_gsw,1);delay(20); smg_display1(nao_ggw,2);delay(20); smg_display(nao_dsw,3);delay(20);smg_display(nao_dgw,4); delay(20);temp=P1;At24c02Write(1,nao1);At24c02Write(1,nao1);At24c02Write(2,nao

41、2);At24c02Write(2,nao2);break; case 0xdd:/跑表启动 keyscan(); flag3=0; temp=P1; while(temp =0xf0) TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%10; timer1_ffm=timer1_fm; smg_display(timer1_bw,1); delay(10); smg_display(timer1_sw,2); delay(10); smg_display1(timer1_g

42、w,3); delay(10); smg_display(timer1_fm,4); delay(10); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; break; case 0xed:/ 跑表暂停 flag3=0; smg_display(zt_bw,1); delay(20); smg_display(zt_sw,2); delay(20); smg_display1(zt_gw,3); delay(20); smg_dis

43、play(zt_fm,4); delay(20); break;case 0x7b:/ 跑表计次数 k+; c=k;z=k;flag3=0; keyscan(); temp=P1;resultfk-1=timer1_fm; resultmk-1=timer1_bw*100+timer1_sw*10+timer1_gw; while(temp =0xf0) TR1=1; timer1_bw=timer1_zm/100; timer1_sw=(timer1_zm/10)%10; timer1_gw=timer1_zm%100%10; timer1_ffm=timer1_fm; smg_displa

44、y(timer1_bw,1); delay(5); smg_display(timer1_sw,2); delay(5); smg_display1(timer1_gw,3); delay(5); smg_display(timer1_fm,4); delay(5); temp=P1; keyscan();if(keyscan()=0xed) zt_bw=timer1_bw; zt_sw=timer1_sw; zt_gw=timer1_gw; zt_fm=timer1_fm; keyscan();if(keyscan()=0xbb) k=0; break;case 0xbb:/ 跑表回显 flag3=0; k=0;c-;timer1_ffm=resultfc;timer1_bw=resultmc/100; timer1_sw=(resultmc/10)%10; timer1_gw=resultmc%100%10; keyscan(); temp=P1; while(temp =0xf0) if(c=

温馨提示

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

评论

0/150

提交评论