C51单片机课程设计--定时闹钟

更新时间:2023-04-27 05:58:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机及信息工程学院课程设计报告

学年学期

题目

专业、学号

授课班号

学生姓名

指导教师

单片机课程设计---定时闹钟

单片机课程设计---定时闹钟

[摘要]单片机电子闹钟是集电子技术、数字显示技术为一体的产品,具有按时闹铃,使用

方便等优点。本论文从电子闹钟系统的功能、软件设计、软件调试等方面论述这一系统。本设计使用学校提供的单片机试验箱为基础,以AT89C52RC芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用的驱动电路,实现在4个LED数码管上显示时间、定时、闹铃的功能,并通过4个按键实现设置日期、进行调时、设定闹铃等功能。在实现各功能时数码管进行相应显示,闹铃或定时时间到时蜂鸣器响,整点报时等功能。本课程设计主要的问题,在于如何编写与调试用C语言实现的单片机程序。在此,我通过不断地修改程序与仿真,让程序达到我期望的程度。

[关键词]定时闹钟、C52单片机、软件分析、软件设计

Timing alarm of MCU Course Design [Abstract]The design uses microcontroller chamber to AT89C52RC chip as the core,

the use of dynamic scanning display, through the use of the microcontroller, in addition to part of the circuit used in the display drive circuit, to achieve the 4 LED digital tube display time, time, alarm functions, and implementation through 4 keys to set the date, the tone, the alarm and other functions, all functions in the realization of the corresponding digital display, alarm or timer time when the buzzer sounds, The whole point timekeeping functions. I use the C language as the programming language,and by the relevant simulation software emulation, through hardware and software to achieve the ultimate goal.

MCU-based alarm clock is a set of electronic technology, digital display technology for the integration of products, with time and alarm, ease of use. This paper from the electronic alarm system features, software design, software debugging, we discussed the system.

[Key words]Clock, C52 Microcontroller, Software Analysis, Software Programming

ii

单片机课程设计---定时闹钟

目录Contents

摘要 (ii)

关键词 (ii)

一、绪论 (4)

二、系统设计

2.1电子闹钟要求与提高 (5)

2.2主要器件功能说明 (5)

2.3电路框图 (8)

2.4软件流程图 (8)

三、实验结果与讨论

3.1实际电路设计及主要程序设计 (10)

3.2串口功能实现 (14)

四、结论

4.1本课程设计的特点 (15)

4.2总结 (15)

附录

1)参考文献 (17)

2)软件程序 (17)

3)附图 (31)

iii

单片机课程设计---定时闹钟

一、绪论

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

单片机系统被定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。实际上单片机系统是计算机的一种应用形式,是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物,具有软件代码小、高度自动化、响应速度快等特点。因此它是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。特别适合于要求实时的和多任务的系统。

电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。本文给出了一种以51芯片电子闹钟设计方法,从而给人们带来更为方便的工作与生活。

设计电子打铃的最终目的是能把它应用到实际中去。如学校的作息时钟打铃,车站的日期时间显示,实时控制系统以及仪器仪表,家用电器等各个领域。由于它的应用领域广,技术要求各不相同,因此应用系统的硬件设计是多样化的,但总设计方法和研制步骤相同。本论文主要介绍一下电子打铃的设计过程与方法,以及在单片机系统上的调试方法。

电子闹钟课题设计着重于实践和动手能力的培养,通过阅读并学习本论文可以大概了解单片机的发展及其工作方法,掌握一定的单片机知以及用指令编程方法和技巧。另一方面通过本论文可以了解电子闹钟的时钟走时、显示、定时器等的工作方式以及时钟控制编程方法。同时,通过时间掌握单片机串口通信的基本原理。

该时钟电路主要以单片机AT89C52RC为核心而设计的,通过单片机对信息的分析与处理控制外围设备。电路整体设计思想是想把它做成一个实用的器件。利用动态数码管作为显示器,K20-K23作为输入按键,蜂鸣器作为声音输出。

4 / 32

单片机课程设计---定时闹钟

5 / 32

二、 系统设计

2.1 电子闹钟要求与提高

● 基本要求

a) 正确显示时钟时分

b) 可以利用按钮调整时间和设定闹钟时间

c) 当时间到达设定的闹钟时间时,蜂鸣器发出滴、滴、滴的报警声

● 提高功能

a) 通过按钮快速切换显示闹钟所定时的时间

b) 通过计算机串口在PC 上快速设定时间和闹钟

c) 整点报时功能

d) 一定程度上防止误操作

2.2 主要器件功能说明

1) AT89C51单片机:

该单片机功能强大,不仅能满足设计的需要,也可以在设计要求的基础上进行一些扩展。 单片机的结构如下:

图2.2.1 单片机引脚图

单片机课程设计---定时闹钟

在使用时VCC接电源电压,GND接地。P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。XTAL1和XTAL2接复位电路。这些可以在硬件设计部分体现出来。

单片机为内含8K FLASH程序存储器的STC98C52RC,EA接高电平;各并行口都加了10K的上拉电阻;晶振为11.0592M。设置了上电复位和手动复位电路。

2)7407驱动器:

7407是集电极开路六正相高压驱动器,1入2出,3进4出,5进6出,9进8出,11进10出,13进12出,7接地,14接高电平。

图2.2.2 7407引脚图

图2.2.3 7407逻辑图

6 / 32

单片机课程设计---定时闹钟

7 / 32

3) 数码管:

图2.2.4数码管

使用共阴极数码管时将4个数码管按相同功能连接起来,3与8相连,并联在一起,连接在P0口上。当选通端所接管脚为低电平时该数码管选通。

LED1用于完成LED 动态显示实验,单片机的P2口的4-7口作为选通端,断码由P0口输出。连接各数码管的3、8引脚轮流显示,连接时要加7407和上拉电阻。

单片机的P2口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。

单片机课程设计---定时闹钟

2.3电路框图说明

1)单片机通过T0产生的脉冲计时,并通过键盘或者串口来调整闹钟及时钟时间。

2)单片机发送的信号通过程序控制最终在数码管上显示出来。

3)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。

4)单片机通过控制闹铃电路来完成定时闹钟的功能。

2.4软件流程图说明

图2.4.1 主程序流程图

8 / 32

单片机课程设计---定时闹钟

图2.4.2 串口输入流程图

系统功能及使用方法:

系统上电后,自动进入时钟状态,初始化值为1:01。若在此时按下KEY1键,显示器上将显示闹钟时间,默认为0:00,再次按下KEY1返回时钟时间。若按下KEY2,则进入时间可调状态,按下KEY1一次,则所显示的时钟的分位显示为“99”,再按KEY3或KEY4键则可以加或减该位内容,修改完一位后再按KEY1可改变选择位位置继续修改下一位,依次显示为小时位显示为99(时钟小时位),分钟显示为88(闹钟分钟位),小时位显示为88(闹钟小时位),之后再次循环。修改完成后按KEY2键即可退出设定状态进入正常显示时钟状态。

串口的使用方法是,当计算机连接试验箱后,打开串口助手软件,选择正确的COM口,并选择波特率为9600,选择发送16位进制数,以“时钟小时时钟分钟闹钟小时闹钟分钟”的格式发送给单片机,单片机会立即显示。例如,发送数据为“01020304”,则时钟时间为01:02,闹钟时间为03:04。

9 / 32

单片机课程设计---定时闹钟

10 / 32

三、 实验结果与讨论

3.1 实际电路设计及程序设计

图3.1.1 protues 7.7仿真示意图,D1为蜂鸣器,此处用发光二极管代替

系统硬件电路的设计:

电路是由控制部分和显示部分两大部分组成。利用单片机程序进行控制,单片机以晶体振荡器的振荡周期(或外部引入的时钟周期)为最小的时序单位,片内的各种微操作都以此周期为时序基准。振荡频率二分频后形成状态周期或称s 周期,所以,1个状态周期包含有2个振荡周期。振荡频率foscl2分频后形成机器周期MC 。所以,1个机器周期包含有6个状态周期或12个振荡周期。1个到4个机器周期确定一条指令的执行时间,这个时间就是指令周期。AT89C52单片机指令系统中,各条指令的执行时间都在1个到4个机器周期之间。锁相环允许用户在片外使用频率较低的晶振,可以很大地减小板级噪声;而且,由于时钟频率可由程序控制,系统时钟可以在一个很宽的范围内调整,总线频率往往能升得很高。但是,使用锁相环也会带来额外的功率消耗。单就时钟方案来讲,使用外部晶振且不使用锁相环是功率消耗最小的一种。AT89C52单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。

单片机课程设计---定时闹钟

在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。

图中,电容器C01,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为12MH2,采用6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。

外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。外部振荡方式的外部电路如下图所示。

各模块分析:

1)显示模块:

电路先通过电源电路送出+5V电压,单片机AT89C52通过74LS47和CD4515(4—16译码器)驱动数码管显示数值,显示部分采用普通共阳极数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描12位数码管显示时会出现闪烁情况,设计时分两排显示,一排显示时间和年月日,一排显示星期和温度,共阳极数码管中8个发光二极管的阳极(二极管正端)连在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。采用动态显示方式,比较节省I/O口,硬件电路也较静态显示简单,但其亮度不如静态显示方式,而且在显示位数较多时,CPU要依次扫描,占用CPU较多时间。

为了提供共阳LED数码管的驱动电压,用三极管9012作电源驱动输出。采用12MHz 晶振,有利于提高秒计时的精确性。三极管采用9012。数码管采用红色的共阳型LED数码管,亮度高些,因为是扫描的显示方式,所以各个数码管的abcdefg各脚采用了总线并联,改动510欧姆的电阻可以改变显示亮度;

2)时钟模块

利用芯片内部的振荡器,然后在引脚XTAL1和引脚 XTAL2两端接晶体谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部的时钟电路,如图外接晶振时,C1和C2的值通常选择30pF;C1、C2对频率有微调作用,晶体谐振器的频率12MHz。为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。设置了12—24两种显示状态,调整计时的按键、设置定时的按键且定时设置了3次定时、还另加载了星期、年、月、日的调整及闰年的自动调整;

时间显示程序部分代码为:

11 / 32

单片机课程设计---定时闹钟

void display() //显示子函数,用于显示时间数值

{

uchari,j;

table_1[0]=miao%10; //分离秒的各位与十位

table_1[1]=miao/10;

table_1[2]=fen%10+11; //分离分的各位与十位

table_1[3]=fen/10;

table_1[4]=shi%10+11; //分离时的各位与十位

table_1[5]=shi/10;

j=0x7f; //从秒到时的扫描

for(i=2;i<6;i++)

{

P2=j;

P0=table[table_1[i]];//显示数值

delay(10);

j=_cror_(j,1);//循环右移

}

}

3)复位模块

单片机复位电路是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从该状态开始工作,例如复位后PC=0000H,使单片机从第一个单元取指令。无论是在单片机刚接上电源时,还是断电后或者发生故障后都要复位;单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值。

4)按键电路的设计

作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说当我们按下一个按键时,总希望某个命令只执行一次。而在按下的过程中不要有干扰进来,因为在按下的过程中,一旦有干扰过来可能造成误触发过程,因此我们在设计按键电路的时候应注意不要有干扰进来以用在焊接时应注意:

独立式按键。如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。

考虑到电路不要复杂性,因而设计成4个按键,一个为选择,一个为更改确认,其它2个为按数字时间加减。按键功能在前文中已有描述。

12 / 32

单片机课程设计---定时闹钟

13 / 32

KEY1代码:

if(key1==0) //判断key1是否按下

{ “…”//防掉显程序

cnt++; //记下按键key1按下的次数

cnt=cnt%5; if(cnt==1&&cnt1==1) //以下含义同上

{ fen1=fen; fen=99; for(i=0;i<100;i++) display(); fen=fen1; } if(cnt==2&&cnt1==1) { shi1=shi; shi=99; for(i=0;i<100;i++) display(); shi=shi1;

} if(cnt==3&&cnt1==1)

{ fen1=fen2;

fen2=88;

for(i=0;i<100;i++) display_1(); fen2=fen1;

}

if(cnt==4&&cnt1==1)

{

shi1=shi2;

shi2=88;

for(i=0;i<100;i++)

display_1(); shi2=shi1;

}

}

5) 防掉显模块

当按钮按下后,由于各种原因会造成一瞬间的数码管显示出错。为了解决这一问题,在每个按钮按下之后加了一段与主程序内相同的显示代码,使得程序立即刷新显示,解决了无法立即刷新的问题。

KEY1的防掉显代码:

while(!key1) //防止掉显

{ if(cnt==0) { display(); } if(cnt==3||cnt==4) { display_1(); }

if(cnt==1&&(cnt1==0||cnt1==2)) display_1();

if(cnt==2&&(cnt1==0||cnt1==2)) { display();

cnt=0;

}

if(cnt1==1&(cnt==1||cnt==2)) display():

3.2 串口功能实现

在课设要求中提到,要求通过计算机串口在PC 上快速设定时间和闹钟。在程序中是通过

单片机课程设计---定时闹钟

14 / 32

两段程序代码实现的,即为串口通信初始化,及串口中断程序。串口工作在方式二,波特率9600,默认为8位数据位。程序如下:

void init() //初始化函数

{

TMOD=0X21; //使用T0和T1

TH0=(65536-50000)/256; //定时时间为:50ms

TL0=(65536-50000)%256;

ET0=1; //打开定时器

EA=1; //开总中断

TR0=1; //启动定时器

SCON = 0x50; //0101 0000 SM1SM2=10,方式二 REN=1允许接受 (串口初始化)

TH1 = 0xFD;

TR1 = 1; //启动T/C1

ES = 1;

}

void sint(void) interrupt 4 //串口中断程序 { unsigned char temp; flag2++; flag2=flag2%4; if(RI&&flag2==1) { RI=0; temp=SBUF; shi=temp; } if(RI&&flag2==2) {

RI=0;

temp=SBUF;

fen=temp;

}

if(RI&&flag2==3) {

RI=0;

temp=SBUF;

shi2=temp;

}

单片机课程设计---定时闹钟

15 / 32

if(RI&&flag2==0)

{

RI=0;

temp=SBUF; fen2=temp; } )

四、 结论

4.1 本课程设计的特点

总体来说,这次课程设计还是比较独特的。与之前的其他课程的课程设计相比而言,此次老师提供了试验箱,减轻了设计硬件电路的压力,使得此次课设更侧重于软件代码的编写以及软件的上机调试。当然,在实验前我们须了解该试验箱的相关电路配置以及元件信息,使得可以更好地编程。另外,我们也通过此课程设计了解了相关单片机下载软件及调试软件的使用方法,为今后学习打下基础。

在选择设计课题时,老师也提供了若干个不同的选择,让同学们有机会去选择自己感兴趣的课题进行研究。这几个课题难度相当,就给了我们更大的空间发挥自己对程序的理解,激发开放性思维。

4.2 总结

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在,作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。

本次课程设计是利用AT89C52单片机设计的有调时、定时、闹铃功能的电子钟。并详细说明了软件和硬件设计方法及仿真、硬件实现。通过本次单片机原理及应用课程设计使我充分认认到了课程设计的理要性和必要性,本次设计使我对已学过的基础知识有了更深入的理解,学会了独立思考、独立工作以及对应用所学基本理论分析和解决实际问题的能力有了很

单片机课程设计---定时闹钟

大的提高。

回想起此次课设的过程,从选题到编程,从理论到实践,在两周的日子里,我们组花了很多的心血,当然这一切都在最后得到了回报。可以说得是苦多于甜,但是从中却学到很多很多的的东西,不但巩固了以前所学过的知识,而且对单片机原理课外知识也的到了拓展。另外,在编程过程中,由于不方便使用试验箱,仿真软件的使用也成为一项重要的验证代码的方式。在对protues的使用过程中,发现了在仿真过程中有许多需要注意的地方,比如C51芯片的最小系统的搭建,元器件的链接等等。往往一个简单的误操作就让程序运行出错。同时,对已编译的hex文件下载到试验箱也是需要关注的地方。下载前需要关闭单片机电源,并打开波特率按钮,确定设置后点击“下载”按钮,之后快速打开单片机电源。若操作不当或者接线接触不好很容易造成软件下载失败。当然,出现这种情况并不是严重的,只需要重新按步骤再次下载就可以了。

在最关键的程序设计过程中,我体会到了坚持不懈的恒心。为了让程序达到自己的要求,必须对一段代码数次的更改,每次更改后还要在仿真软件里实现,重复这样的操作的确是无味的,但却是必要的,只有一次次的修改代码才会让程序运行的更有效率,更人性化,更易理解,这也是我们所追求的。

在此次单片机课程设计之后,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我们还学会了如何去培养创新精神和严谨的科学作风,从而不断地战胜自己,超越自己。更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。当然,该电子钟还有很多不足之处,比如闹钟不能关闭,且只能定一个闹钟。在今后的学习过程中,我们需要继续努力,锻炼自己。

16 / 32

单片机课程设计---定时闹钟

附录:

1)参考文献

a)田希晖C51单片机技术教程.北京:人民邮电出版社,2007

b)谭浩强.单片机课程设计. 北京:清华大学出版社,2000

c)王效华. 单片机原理及应用.北京: 北京交通大学出版社,2007

d)刘华东.单片机原理与应用.北京:电子工业出版社,2002.

e)谢自美.电子线路设计?实验?测试(第二版) .武汉:华中科技大学出版社,2000.

f)何小艇.电子系统设计.浙江:浙江大学出版社,2004.

g)胡宴如.模拟电子技术.北京:高等教育出版社,2004.

h)杨树.数字电子技术.北京:高等教育出版社,2004.

2)软件程序

#include //头文件

#include

#define uchar unsigned char //宏定义

#define uint unsigned int //宏定义

#define fmq RD

sbit key1=P2^0; //位声明//MODIFIED

sbit key2=P2^1;

sbit key3=P2^2;

sbit key4=P2^3;

uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,

0xbf,0x86,0xdb,//带小数点的数值

0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

void plus(); //函数声明

void minus();

17 / 32

单片机课程设计---定时闹钟

voidsint();

uchar table_1[6]; //定义数组,数组内含有6个数值

uchar table_2[6];

ucharshi=1,fen=1,miao=30; //显示初始值

uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定义全局变量

uchar flag,flag1,flag2,cnt,cnt1,count;//定义全局变量

void delay(uchar i) //延时函数,用于动态扫描数码管

{

ucharx,y;

for(x=i;x>0;x--)

for(y=110;y>0;y--);

}

void init() //初始化函数

{

TMOD=0X21; //使用T0和T1

TH0=(65536-50000)/256; //定时时间为:50ms

TL0=(65536-50000)%256;

ET0=1; //打开定时器

EA=1; //开总中断

TR0=1; //启动定时器

SCON = 0x50; //0101 0000 SM1SM2=10,方式二REN=1允许接受(串口初始化)

TH1 = 0xFD;

TR1 = 1; //启动T/C1

ES = 1;

}

void display() //显示子函数,用于显示时间数值

{

uchari,j;

18 / 32

单片机课程设计---定时闹钟

table_1[0]=miao%10; //分离秒的各位与十位

table_1[1]=miao/10;

table_1[2]=fen%10+11; //分离分的各位与十位

table_1[3]=fen/10;

table_1[4]=shi%10+11; //分离时的各位与十位

table_1[5]=shi/10;

j=0x7f; //从秒到时的扫描

for(i=2;i<6;i++)

{

P2=j;

P0=table[table_1[i]];//显示数值

delay(10);

j=_cror_(j,1);//循环右移

}

}

void display_1() //显示子函数,用于显示定时时间

{

uchari,j;

table_2[0]=miao2%10; //以下含义同上

table_2[1]=miao2/10;

table_2[2]=fen2%10+11;

table_2[3]=fen2/10;

table_2[4]=shi2%10+11;

table_2[5]=shi2/10;

j=0x7f;

for(i=2;i<6;i++)

{

P2=j;

P0=table[table_2[i]];

delay(10);

19 / 32

单片机课程设计---定时闹钟

j=_cror_(j,1);

}

}

void shijian() //时间子函数

{

if(flag>=20) //判断是否到一秒

{

flag=0; //到了,则标志位清零

miao++; //秒加1

if(miao>=60) //判断秒是否到60s

{

miao=0;//到了,则清零

fen++; //分加1

if(fen>=60) //以下含义同上

{

fen=0;

shi++;

if(shi>23)

shi=0;

}

}

}

}

void key_scan() //键盘扫描子函数

{

uchar i; //定义局部变量

if(key1==0) //判断key1是否按下

{

20 / 32

单片机课程设计---定时闹钟

while(!key1) //防止掉显

{

if(cnt==0)

{

display();

}

if(cnt==3||cnt==4)

{

display_1();

}

if(cnt==1&&(cnt1==0||cnt1==2))

display_1();

if(cnt==2&&(cnt1==0||cnt1==2))

{ display();

cnt=0;

}

if(cnt1==1&(cnt==1||cnt==2))

display();

}

cnt++; //记下按键key1按下的次数

cnt=cnt%5;

if(cnt==1&&cnt1==1) //以下含义同上

{

fen1=fen;

fen=99;

for(i=0;i<100;i++)

display();

fen=fen1;

}

if(cnt==2&&cnt1==1)

21 / 32

本文来源:https://www.bwwdw.com/article/h8rq.html

Top