单片机多功能秒表
基于单片机的多功能秒表
郑州科技学院单片机课程设计题目基于单片机的多功能秒表学生姓名专业班级学号院(系)指导教师完成时间2015 年1 月16 日目录1 设计概述 (1)1.1设计目的 (1)1.2设计要求 (1)1.3设计意义 (1)2 系统总体方案及硬件设计 (2)2.1系统总体方案 (2)2.2硬件设计 (2)2.3时钟电路 (3)2.4复位电路 (4)2.5按键电路 (5)2.6显示电路 (6)3 软件设计 (7)3.1设计思路 (7)3.2程序流程框图设计 (7)4 PROTEUS软件仿真 (9)5 课程设计体会 (10)参考文献 (12)附录1:总体电路原理图 (13)附录2:元器件清单........................................... 错误!未定义书签。
附录3:实物图 . (15)附录4:源程序 (16)1 设计概述1.1 设计目的设计一个单片机控制的秒表系统。
利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计秒表。
将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时具有开始/暂停,记录,上翻下翻,清零等功能。
1.2 设计要求(1)共四位LED显示,显示时间为00:00~59.99(2)共五个按键,分别是开始/暂停,记录,上翻,下翻,清零键;(3)能同时记录多个相对独立的时间并分别显示;(4)按上下翻按钮查看多个不同的计时值;1.3 设计意义(1)通过本次课程设计可以使我们进一步熟悉和掌握单片机内部结构和工作原理,了解单片机应用系统设计的基本步骤和方法。
(2)通过利用A T89C51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法。
(3)通过设计一个简单的实际应用输入及显示模拟系统,掌握单片机仿真软件PROTEUS的使用方法。
(4)该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、功能,并能同时记录多个相对独立的时间利用翻页按钮查看多个不同的计时值,该种秒表在现实生活中应用广泛,具有现实意义。
新建基于单片机的多功能电子秒表提交版
摘要本设计不仅是一个简单的电子秒表,还能够显示电子时钟和年、月、日,还能够提供整点报时等功能,本设计的秒表能显示从毫秒级、秒级和分级三个段,分别用六个数码管显示,秒表能够精确计时,方便应用各个领域,另外硬件部分设置了开始、暂停、清零、复位以及电子时钟和电子秒表的切换按键,可以对秒表和时钟进行实时控制。
本设计的数字电子秒表和时钟是采用AT89C52为控制核心器件利用74LS245作为数码管的驱动芯片,再利用定时/计数器定时和计数原理,结合显示电路、数码管以及中断原理(实时与分时操作)来实现电子秒表的制作。
将软件、硬件有机的结合起来,使得系统能够实现六位数码管显示,能显示分、秒、毫秒,计时精度为0.01秒。
其中软件采用C语言编写程序,包括显示程序、电子秒表定时中断程序、电子时钟定时中断程序、外部中断程序、按键程序、延时程序和主程序。
并在keil中调试运行,利用proteus软件仿真调试,简单且易于观察,在仿真中可以观察到实际的工作状态。
关键字:单片机;AT89C52;74LS245;电子秒表,电子时钟,程序;仿真。
引言近年来,随着科技的飞速发展,单片机的应用正在不断的走向深入,同时带动着传统控制检测日新月异更新,在实时检测和自动控制的单片机应用系统中,单片机往往是作为控制核心来使用,仅是单片机方面的知识是不够的,还要根据具体的硬件结构,以及针对具体的应用对象的软件结合,加以完善。
单片机自二十世纪以来,以极好的性价比受到人们的重视和关注,所以发展很快,应用广泛。
单片机的主要特点是体积小、集成度高、抗干扰能力强。
对环境的要求较低,价格低廉、可靠性高、灵活性强、开发较容易等特点,所以广泛的应用到各个领域。
几乎到了无孔不入的地步,在我国单片机广泛的应用于工业自动化控制、自动检测、智能仪表、航空航天和军事技术领域等各方面我们可以开发利用单片机系统获得更高的经济效益,更重要的意义是单片机应用改变了传统的设计思想和方法。
基于单片机的多功能秒表设计
光电信息综合设计报告多功能秒表设计院(系)名称信息工程学院专业名称光电信息科学与工程姓名学号0指导教师2018年5 月20日摘要近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。
本文阐述了基于单片机的多功能电子秒表设计。
本设计主要特点就是具有倒计时功能,还可以按圈计时,而且误差在0、01s,就是各种体育竞赛的必备设备之一,另外硬件部分设置了查瞧按键,还具备有定时提醒功能,让您时时刻刻都掌握时间。
本设计的数字电子秒表系统采用STC89C52单片机为中心器件,利用其定时器/计数器定时与记数的原理,结合显示电路、数码管以及外部中断电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现4位LED显示,显示时间99s内,能正确地进行计时,同时能记录10组时间,并在暂停就是对时间进行查询。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务延时程序等,并在KEIL中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键字:单片机;数字电子秒表;提醒目录1 总体设计方案 (1)2 硬件设计 (3)2、1 单片机的选择 (3)2、2 显示电路的选择与设计 (5)2、3 按键电路的选择与设计 (6)2、4 时钟电路的选择与设计 (6)2、5 系统总电路的设计 (7)3 软件设计 (9)3、1 程序设计思想 (9)3、2 主程序设计 (9)3、3 中断程序设计 (10)3、4程序模块设计: (11)主程序................................................................................... 错误!未定义书签。
(2)停止子程序...................................................................... 错误!未定义书签。
单片机课设多功能秒表
1 引言设计一个单片机控制的秒表系统。
利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。
将软、硬件有机地结合起来,使得系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
设计要求如下:1、能同时记录四个相对独立的时间并分别显示。
2、两位LED动态显示,显示时间为00~99秒。
3、每秒自动加1。
4、一个开始按键、一个复位按键、一个暂停按钮和一个计录按钮(附加功能)。
5、翻页按钮查看四个不同的计时值。
2 设计方案及原理本系统采用AT80C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,将软、硬件有机地结合起来。
其中软件系统采用汇编语言编写程序,包括显示程序,加减计数程序,,中断,延时程序,按键消抖程序等,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
系统电路原理图如图1所示。
图1 系统电路原理3 硬件设计3.1 单片机MCS-51单片机在一块芯片上集成了CPU,存储器RAM,ROM以及输入与输出接口电路,这种芯片习惯上被称为单片微型计算机,简称单片机。
3.2 复位电路单片机的复位操作有上电自动复位和按键自动复位两种方式。
上电复位是通过外部复位电路的电容充电来实现的。
这个系统中的复位电路是采用上电加按钮来实现的。
因为MCS-51单片机的复位是靠外部电路实现的。
MCS-51单片机工作之后,只要在他的RST引线上加载10ms以上的高点平,单片机就能有效地进行复位。
如图2所示。
图2 复位电路3.3 晶体振荡电路时钟电路用于产生单片机工作所需的时钟信号。
在MCS-51系列单片机芯片外部,通过XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟电路。
如图3所示。
图3 晶体振荡电路3.4 键盘电路我们采用按键电路,用部分P1口做开关,P1.0停止,P1.1复位,P1.3暂停记录,P1.4上翻,P1.5下翻。
基于单片机的多功能秒表系统课程设计
基于单片机的多功能秒表系统课程设计单片机课程设计报告多功能秒表系统设计姓名:学号:专业班级:指导老师:所在学院:2009年6月10日单片机已经无处不在,与我们生活更是息息相关并已渗透到了生活的方方面面。
单片机的特点是体积小,重量轻,功能强,通用性好,也就是说集成度高,其内部的结构是普通的计算机系统的简化。
在增加一些外围电路之后,就能成为一个完整的系统。
在众多单片机中,MCS-51系列单片机具有系统结构完整,特殊功能寄存器规范化以及指令系统的控制功能强等特色,使起成为单片机中的主流机型。
本设计是一个由AT89C51单片机控制,利用单片机的定时器/计数器定时和记数的原理,结合显示电路、电源电路、LED数码管以及键盘电路按键计时来实现的多功能秒表系统。
在本次设计中我们以AT89C51单片机为主要器件,利用它的定时器/计数器定时和记数的原理,结合7809电源提供的+5V稳压电压,上电加按钮复位电路,晶体振荡电路,由P0口驱动的LED动态显示电路,键盘电路等来完成多功能秒表的设计。
这个多功能秒表系统能够实现两位LED显示,显示的时间为00~99秒,每秒自动加1,能正确地进行加、减(倒)计时,能同时记录4个相对独立的时间,通过上翻键和下翻键来查看这4个不同的计时值,还具有快加和复位功能,基本上实现了老师的要求。
我们使用汇编语言来编写程序,采用模块化程序设计方法,主程序有多个子程序构成,这些子程序可以单独的设计,调试和管理,其中包括加1子程序、减1子程序、延时子程序、快加子程序,复位子程序和显示子程序等。
将源程序代码在WAVE中进行编译和调试,硬件系统利用Proteus软件来实现,可以方便的看到运行结果。
关键词:多功能秒表、单片机、子程序模块、Proteus仿真1 概述 (3)1.1单片机简介 . (3)1.2设计任务 (3)1.3设计要求 (3)2 系统总体方案及硬件设计 ......................................................错误!未定义书签。
单片机多功能秒表课程设计
单片机课程设计报告电子秒表摘要:本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成电子秒表的硬件电路的。
电子秒表电路主要由AT89S52单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现八位数码显示和多次计时,能通过控制电路能控制时间的暂停、开始和清零,能够多次存储时间,并查询显示计时时间的顺序。
关键字:AT89S52 数码管最小系统1 方案设计1.1系统分析设计的电路主要是能多次记时和查询时间,记时的多少通过显示电路显示出来,每一次计时可以通过控制电路查询出来。
设计框图如图一所示;1.2系统方案方案一:利用AT89S52单片机设计数显定时器和定时器。
单片机软件编程灵活、自由度大,可用软件编程实现各种控制算法和逻辑控制。
利用74HC573锁存器和按键作为控制电路,通过位选和段选来实现数码管的显示。
2 硬件设计2.1 控制芯片的介绍AT89S52(与AT89S51相同)单片机的外型如图四所示。
单片机可分为通用型和专用型,种类繁多。
这里我们主要介绍AT89S52单片机是属于典型代表的MCS-51系列单片机,它是一种能处理8位数据的通用型单片机。
以Atmel公司生产的具有CMOS工艺、低功耗、高性能的AT89S52为例,介绍单片机的工作原理、控制程序的编写及开发应用。
AT89S52是一个高性能CMOS 8位单片机,芯片内集成了通用8位中央处理器,片内含8k Bytes的可反复擦写1000次的Flash只读程序存储器(ROM), 支持ISP(In-system programmable)功能。
AT89S52内部有128 bytes的随机存取数据存储器(RAM),图五 AT89S52引脚图5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器。
兼容标准MCS-51指令系统及80C51引脚结构。
图四AT89S52有40个引脚,32个外部双向输入/输出(I/O )口。
51单片机,实现秒表功能
#define uchar unsigned char
#define uint unsigned int
char cent=0;
char second=0;
char minite=0;
bit s2=0;
bit s3=0;
bit s4=0;
bit s5=0;
bit s6=0;
/********************************************************/
//函数名:void Delay1ms(uint count)
//功能:延时时间为1ms
//输入参数:count,1ms计数
//说明:总共延时时间为1ms乘以count,crystal=12Mhz
/*共阳数码管字型码*/
/*0,1,2,3,4,5,6,7,8,9,p.,灭*/
char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf};
/*P点显示代码序号*/
char data find_code[]={0,0,12,0,0,12,0,0};
/********************************************************/
/*延迟函数*/
void Delay1ms(uint count)
{
uint j;
while(count--!=0)
{
for(j=0;j<80;j++);
}
}
/************************************************************************/
单片机多功能秒表
单片机综合实验报告题目: 多功能数字时钟班级:姓名:学号:一、实验内容:设计一个单片机控制的秒表系统.利用单片机的定时器的原理,结合显示电路、LED数码管以及按键来设计计时器,使系统能够正确地进行加、减<倒)计时,数码管能够正确地显示时间.6tCXaz8fPRb5E2RGbCAP目的要求1)两位LED显示,显示时间为00~99秒.2)每秒自动加1.3)一个开始按键、一个复位按键和一个暂停按钮.4)翻页按钮查看四个不同的计时值 .5)添加倒计时初始值设置功能6)不同功能通过功能键Setup实现切换.二、实验电路及功能说明本实验以51单片机为核心,应用其中断来定时,通过按键来控制时间和日期的调整,通过1602LCD来数字显示时钟,做成一个简易的数字时钟.本实验要求能定时,还要能设置闹铃,由于对C51程序代码的写法不是很熟,没能实现闹铃功能.所以,最后该实验能实现的功能为时间和日期的调整.6tCXaz8fPRp1EanqFDPw其原理图如下图所示:三、实验程序流程图:主程序:主程序流程图子流程图<按键功能设置)四、实验结果分析经过proteus仿真可知:该方案可行,能够对时间进行精确的调整,也能对日期进行更正,基本上能实现上述功能.6tCXaz8fPRDXDiTa9E3d五、心得体会通过该实验我对51的了解更加深入了一层,特别是对C51的写法更加了解,还对1602的基本操作有了一定的了解.同时,也发现C语言的重要性,以后要多加强对C语言的学习.6tCXaz8fPRRTCrpUDGiT六、程序清单#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_(>函数// 定义控制信号端口sbit RS=P2^4。
//P2.4sbit RW=P2^5。
//P2.5sbit E=P2^6。
//P2.6sbit set=P1^4。
单片机60分钟倒计时秒表
60分钟倒计时秒表功能:1.带有启动键Start,暂停键Pause,停止键Stop,复位键Reset;2.4位数码管显示分(两位)秒(两位);3.按启动键启动从60分开始倒计时,按暂停键暂停,显示保持原来计时时间,再次按启动键继续计时,按停止键停止计时,复位键复位,到零停止计时.4.按停止键后,可按中间的4个键,分别对应分的十位(2键),个位(4键),和秒的十位(5键),个位(9键),按动一下,相应的位增1,并保证时间的正确值,再按一次停止键,保存设置值,按其它键则放弃设置时间值,恢复原来的时间.电路图:计时器工作模式:编码(54H单元) 当前工作模式00H Reset01H Start02H Pause03H Stop主程序流程:主程序代码段:ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 1000HMAIN: ACALL INIT ;初始化定时器SETB EA ;开总中断SETB ET0 ;开定时器0中断MOV A, #03H ;设置8155的工作模式, PA, PB输出, PC输入.MOV DPTR, #7F00HMOVX @DPTR, ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZ INK1AJMP BEGININK1: ACALL DISACALL CLEARACALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2, #7FH ;从最左边列开始扫描MOV R4, #00HCOLUM: MOV DPTR, #7F02HMOV A, R2MOVX @DPTR, AINC DPTRMOVX A, @DPTRJB ACC.2, LONEMOV A, #00HAJMP KCODELONE: JB ACC.1, NEXTMOV A, #04HKCODE: ADD A, R4ACALL PUTBUFKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONNEXT: INC R4MOV A, R2JNB ACC.4, KERRRR AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR, #7F02HMOV A, #00HMOVX @DPTR, AINC DPTRMOVX A, @DPTRCPL AANL A, #03HRETCLEAR: MOV DPTR, #7F01HMOV A, #00HMOVX @DPTR, ARETINIT: MOV 53H, #06H ;分十位MOV 52H, #00H ;分个位MOV 51H, #00H ;秒十位MOV 50H, #00H ;秒个位MOV 54H, #00H ;存放当前工作模式, 00:Reset, 01 Start, 02 Pause, 03 StopMOV 55H, #0AH ;定时计数用, 定时器每次中断0.1s, 计数10次, 定时1sCLR TR0MOV TMOD, 01H ;定时器工作在方式1, 16位定时器MOV TH0, #3CHMOV TL0, #0B0HRETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A, #03HMOV DPTR, #7F00HMOVX @DPTR, AMOV R0, #50HMOV R3, #0EFHMOV A, 54HCJNE A, #03H, DIS0MOV R0, #60HDIS0: MOV A, R3AGAIN: MOV DPTR, #7F02HMOVX @DPTR, AMOV A, @R0MOV DTPR, DAT ASMOVC A, @A+DPTRMOV DPTR, #7F01HMOVX @DPTR, AACALL DL1MSINC R0MOV A, R3JNB ACC.0, OUTRL AMOV R3, AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRETDAT AS: DB 03FH, 06H, 05BH, 04FH, 066H, 06DH, 07DH DB 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HDL1MS: MOV R7, #01HDL0: MOV R6, #0FFHDL1: DJNZ R6, DL1DJNZ R7, DL0RETPUTBUF: MOV R1, AJNZ CHKSTAR TACALL RESETFUNCSJMP GOBACKCHKSTAR T: CJNE R1, #03H, CHKPAUSEACALL STAR TFUNCSJMP GOBACKCHKPAUSE: CJNE R1, #04H, CHKSTOPACALL PAUSEFUNCSJMP GOBACKCHKSTOP: CJNE R1, #07H, CHKOTHERACALL STOPFUNCSJMP GOBACKCHKOTHER: ACALL OTHERFUNCGOBACK: RETRESETFUNC: MOV R0, 54HCJNE R0, #00H, RESET0RETCJNE R0, #01H, RESET0RETRESET0: ACALL INITMOV 54H, #00HRETSTAR TFUNC: MOV R0, 54HCJNE R0, #01H, STAR T0RETSTAR T0: MOV 54H, #00HSETB TR0RETPAUSEFUNC: MOV R0, 54HCJNE R0, #01H, PAUSE0CLR TR0MOV 54H, #02HSJMP PAUSE1PAUSE0: CJNE R0, #02H, PAUSE1SETB TR0MOV 54H, #01HPAUSE1: RETSTOPFUNC: MOV R0, 54HCJNE R0, #03H, STOP0MOV 54H, #02HMOV R0, #50HMOV R1, #60HSTOP1: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R0, #54H, STOP1RETSTOP0: CLR TR0MOV 54H, #03HMOV R0, #60HMOV R1, #50HSTOP2: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R1, #54H, STOP2RETOTHERFUNC: MOV R0, 54HCJNE R0, #03H, OTHER0CJNE R1, #01H, OTHER1MOV R0, #63HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER1: CJNE R1, #02H, OTHER2MOV R0, #62HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER2: CJNE R1, #05H, OTHER3MOV R0, #61HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER3: CJNE R1, #06H, OTHER0MOV R0, #60HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER0: RET;使用定时器0, 工作模式1, 定时0.1s, 晶振频率为6MHz;定时器初值X = 65536 –50000 = 15536 = 3CB0HTIMER0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ 55H, EXIT0 ;判断是否已定时中断10, 即1秒MOV 55H, #0AHMOV R0, #50HGOON0: DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #05HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0 ; 倒计时结束, 停止计时, 显示全”0”ACALL INITMOV 53H, #00HMOV 54H, #03HEXIT0: RET。
基于单片机的多功能秒表设计
基于单片机的多功能秒表设计本次设计的内容是以STC89C52单片机为控制核心的秒表。
设计的主要内容为计时器从00~99秒的计时,每秒种自动加1,另外还设置有暂停键和复位键等按键,在任何情况下都可以实现暂停和复位功能。
利用单片机定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计的计时器。
此次设计将软、硬件有机地结合起来,使得系统能够实现2位LED数码管显示,显示时间为00~99秒,同时计时精度为1秒,并且能够正确地进行计时。
其中软件系统采用C语言编写程序,包括显示子程序、中断服务、外部中断服务子程序和复位子程序等。
关键词:单片机;数码管; C语言;目录1引言................................................................. - 1 -1.1研究背景......................................................... - 1 -1.2 研究的意义与方法 ................................................ - 1 -2 电路方案论证 .......................................................... - 2 -2.1单片机芯片的选择方案和论证:..................................... - 2 -2.1.1 采用STC89C51单片机 .................................................................................. - 2 -2.1.2 采用STC89C52单片机 .................................................................................. - 2 -2.2显示模块选择方案和论证:......................................... - 2 -2.2.1 采用LED液晶显示屏 .................................................................................... - 2 -2.2.2 采用LED数码管显示 .................................................................................... - 3 -2.3 小结 ............................................................ - 3 -3 系统硬件电路设计 ...................................................... - 3 -3.1 STC89C52芯片.................................................... - 3 -3.1.1 概述 ................................................................................................................ - 3 -3.1.2 STC89C52主要特性 ....................................................................................... - 3 -3.1.3 STC89C52管脚说明 ....................................................................................... - 4 -3.2 LED数码管显示器概述............................................. - 5 -3.2.1 数码管的分类 ................................................................................................ - 5 -3.2.2 数码管的连接方法 ........................................................................................ - 5 -3.3 总体设计方案 .................................................... - 6 -3.4 部分电路设计 .................................................... - 7 -3.4.1晶振电路 ......................................................................................................... - 7 -3.4.2 按键部分电路接线 ........................................................................................ - 7 -3.4.3 显示电路 ........................................................................................................ - 8 -3.4.4 复位电路 ........................................................................................................ - 8 -4 系统程序的设计 ........................................................ - 9 -4.1 主程序设计 ...................................................... - 9 -4.2 定时器T0子程序设计 ............................................ - 10 -5 联调与调试 ........................................................... - 10 -5.1仿真调试........................................................ - 10 -5.2硬件调试........................................................ - 12 -结论与展望 ............................................................. - 13 - 附录A 系统原理图..................................................... - 14 - 附录B 系统仿真图与实物图............................................. - 15 - 附录C 系统PCB图..................................................... - 16 - 附录D 系统源程序..................................................... - 17 -1引言1.1研究背景在生活和生产的各领域中,凡是有自动控制要求的地方都会伴随着单片机的身影出现;从简单到复杂,从空中、地面到地下,只要是能想象到的地方几乎都有使用单片的需求。
基于单片机的多功能秒表的设计
摘要:单片机具有集成度高,体积小可靠性好和性价比高得优点,该文主要阐述了设计一个利用单片机作为总控制中枢的秒表系统。
利用单片机可以定时和记数的原理结合时钟电路、数码管显示电路、复位电路和按键电路将软、硬件同时结合起来,使得系统能够准确无误地进行计时,同时具有开始,暂停,清零和复位的功能。
关键词:单片机;多功能秒表;c语言中图分类号:tp368 文献标识码:a 文章编号:1009-3044(2016)13-0257-021 系统硬件总体结构本系统采用at89c52单片机为核心器件,通过硬件电路的制作和软件程序的编写,利用单片机的控制作用通过led来直接显示数字[1]。
其中硬件电路如电源电路,晶振电路,复位电路[2],显示电路,以及一些按键电路等,软件系统采用c语言编写,包括数码管点亮显示程序,加减计数程序,延时程序,按键消抖程序等[3],并在keil中调试运行,硬件系统利用proteus仿真,简单而且易于观察,在仿真中就可以观察到实际的工作。
总体硬件框图如图1所示。
[4]2 模块电路分析多功能秒表能正常工作,是在各个电路模块组合下协调完成的,其中包括了单片机工作电路、数码管显示电路,按键电路和时钟电路,下面做详细介绍。
2.1 单片机简单介绍电源vcc、gnd,时钟引脚xtal1、xtal2 ,i/o口引脚p0、p1、p2、p3四组八位i/0,编程控制引脚rst。
采用msc-51系列的单片机是因为其具有两大优势[5]:1)片内程序存储器采用快闪存储器,使程序写入方便,还可以任意的擦写;2)提供了更小的芯片,使整个硬件电路体积更小,物美价廉,经济适用。
2.2 晶体振荡电路at89c52芯片内部有一个反相放大器,用于构成振荡器。
引脚 xtal1为反向放大器的输入,引脚xtal2为反向放大器输出,两端跨接石英晶体及两个电容就可构成稳定的自激振荡器。
电容器c1,c2起稳定振荡频率,并对振荡频率有微调作用。
这部分给单片机提供晶振周期。
单片机秒表
基于单片机的多功能秒表设计1 功能要求用89C51设计一个秒表,显示时间为0000~9999秒,每秒自动加1,设计四个按键K1,K2,K3,K4。
K1按键功能为开始从0000开始计数。
K2按键功能为暂停计数,再按一次实现继续计数功能。
K3实现计数清零功能。
K4功能可以实现按一次显示时间为000^999,按两次实现显示时间为00^99,按三次实现显示时间为0^92 方案论证2.1 显示部分:显示部分是本次设计的重要部分,一般有以下两种方案:方案一:采用LED显示,分静态显示和动态显示。
对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。
而对于动态显示方式,可以避免静态显示的问题,但只要设计上处理恰当,就能解决亮度低,有闪烁等问题,且价格便宜。
方案二:采用LCD显示。
LCD液晶显示虽然具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于信息量多的系统,是比较适合的,但秒表的信息不需太多,但是价格稍贵。
鉴于上述原因及价格方面的考虑,我们采用方案一。
2.2 数字秒表数字秒表是本设计的核心的部分。
根据需要可采用以下两种方案实现:方案一:方案完全用软件实现数字秒表。
原理为:在单片机内部存储器设四个字节分别存放时钟的个、十、百、千信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的个位值加1;若秒值达到9,则将其清零,并将相应的十位字节值加1;若分值达到9,则清零十位字节,并将时字节值加1;若时值达到9,则将百位字节清零,并将字节值加1;若千值达到9,则清零千位字节。
该方案具有硬件电路简单的特点,不需要在额外的使用其它的芯片,且使用晶振可以使准确度很精确。
方案二:方案采用Dallas公司的专用时钟芯片DS1302。
该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。
为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。
百度多功能秒表的设计
多功能秒表的设计摘要本设计是通过使用单片机80C51来设计一个单片机控制的秒表系统。
利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。
将软、硬件有机地结合起来,使得系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
在设计中定时器1用做1秒定时,从而实现每秒加1。
定时器0用做10毫秒定时,从而实现每10毫秒快加1。
中断0用做暂停键使用,中断1用做停止键使用。
该秒表可以每秒加一,每秒减一,快加1,快减1,独立存储四个数据并能进行查询。
在硬件设计中由于所需按键比较少,所以采用独立连接式电路,使用P0和P2口直接对两个数码管发送数据,在使用P0口时,由于输出级为漏级开路电路,若要驱动NMOS或其他拉电流负载时,引脚上应外接上拉电阻。
用软件法消除来抖动,LCD数码管采用共阴极的接法。
复位电路采用上电或开关复位电路,在电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
时钟信号采用内部时钟法,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
目录1 概述 (2)1.1 设计意义 (2)1.2 设计任务 (2)1.3主要功能 (2)2 系统总体设计及硬件设计 (3)2.1单片机的设计 (3)2.2 电源 (3)2.3 钟及复位电路 (3)2.4 显示及键盘 (5)3 软件设计 (6)3.1主程序 (6)3.2设置子程序: (9)3.3加减1子程序 (11)3.4 快加减子程序 (14)4 PROTEUS软件仿真 (17)5 课程设计体会 (18)参考文献 (18)附1 源程序代码 (20)附2 秒表系统电气图 (26)1概述1.1 设计意义1、通过设计使学生进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;2、通过利用MCS-51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法;3、通过设计一个简单的计算器数字输入及显示模拟系统,掌握单片机仿真软件Proteus的使用方法;4、掌握键盘和显示器在的单片机控制系统中的应用。
基于单片机的多功能秒表的课程设计
单片机课程设计题目基于单片机的多功能秒表目录1 设计总体方案 (1)1.1 设计要求与目的 (1)1.2 设计思路 (1)1.3工作原理 (2)1.4 功能说明 (2)2 主要元器件介绍 (3)2.1 AT89C51单片机 (3)2.2 四位共阴数码管 (5)3 系统硬件设计 (6)3.1 电源电路 (6)3.2 时钟电路 (6)3.3 复位电路 (7)3.4 显示电路 (7)3.5 键盘电路 (8)4 软件设计 (9)5 系统调试及结果分析 (11)6 总结 (12)参考文献 (13)附录1:总体电路原理图 (14)附录2:元器件清单 (15)附录3:实物图 (16)附录4:源程序 (17)1 设计总体方案1.1 设计要求与目的设计一个单片机控制的多功能秒表系统,利用单片机的定时器/计时器定时和计数的原理,结合显示电路、用四位共阴极LED数码管以及按键来设计秒表计时器,实现暂停与清零功能,并多次计数。
在设计系统前,我们主要考虑以下一些原则:节约元器件,尽量降低系统实现成本;硬件电路尽量简单,使得硬件实现、问题检查、软件编程以及系统调试的难度都降低;能在软件上实现,使芯片利用率尽可能高;软件设计方案要优化,使得做成实物尽可能简单,方便仿真与检测;设计方案要和当前的试验平台相应;充分利用各种资源,尽量采用成熟与经典的电路。
1.2 设计思路因为秒表的设计相对较为简单,因此在软件设计中我们一般采用模块化程序设计的方法。
模块是一个具有独立功能的程序,可以单独设计、调试与管理,模块可以分为功能模块和控制模块两类。
我们通过模块化程序设计可按适当的原则把一个情况复杂、规模较大的程序划分为一个个较小的、功能相关而又相对独立的模块。
根据电子秒表的设计要求,主要设计一个计数系统、译码驱动、数码显示系统、控制系统。
其主要核心技术在于产生秒表信号的计数脉冲与计数器之间的级联。
1.3工作原理本系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等来设计计时器,将软、硬件有机地结合起来。
多功能数字秒表
摘要近年来随着科技的飞速发展,单片机的应用正在不断的走向深入。
本文阐述了基于单片机的数字电子秒表设计。
本设计主要特点是计时精度达到0.01s,具有多组数据记录功能,一键实现开始、暂停、清零功能。
解决了传统的由于计时精度不够造成的误差和不能记录多组数据局限性。
是各种体育竞赛的必备设备之一。
本设计的数字电子秒表系统采用AT89S52单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部控制电路来设计计时器。
将软、硬件有机地结合起来,使得系统能够实现六位LED显示,显示时间为0~59分59秒99毫秒,计时精度为0.01秒,能正确地进行计时,同时能记录10组时间,并能用上下翻动键对计时时间进行查询。
其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,延时程序等,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。
关键词:单片机;数字电子秒表;仿真;LCDABSTRACTIn recent years, with the rapid development of science and technology, the application of SCM is unceasingly to the deep. This article elaborated the digital electronic stopwatch design based on single chip microcomputer. This design main characteristic is timing accuracy reached 0.01 s, has the function of multiple data record, a key to realize the start, pause, reset function. Solve the traditional due to timing error caused by the precision is not enough and can't record of data limitations. Is one of the necessary equipment of various sports competitions.The design of digital electronic stopwatch system USES AT89S52 single chip processor as the center, use the timer/counter timing and the principle of representation, combinedwith the display circuit, LED digital tube and external control circuit to design the timer. The software and hardware organically, enables the system to realize the six LED display, show time for 0 ~ 59 minutes 59 seconds 99 milliseconds, timing accuracy of 0.01 seconds, can correctly on time, at the same time can record 10 groups of time, and can turn up and down keys to inquires the clock time. Software using C language program, including display program, timer interrupt service, time delay procedures, hardware systems use PROTEUS powerful functions, simple and easy to observe, can be observed in the simulation of the actual working condition.Key words SCM; Digital electronic stopwatch; The simulation; LCD目录一、概述 (4)1、意义: (4)2、功能 (4)二、硬件电路设计及描述 (4)1、方案及设计要求: (4)2、仿真图、PCB板图、成品图 (6)3、芯片资料: (9)4、元件清单: (9)三、软件设计流程及描述 (10)1、程序流程图 (10)2、源程序代码 (10)四、测试 (22)五、总结 (23)参考文献 (23)致谢 (24)一、概述1、意义:时间是日常生活、体育竞技、工业、医学、航天等领域最常遇到的一个物理量。
单片机多功能秒表
.单片机综合实验报告题目: 多功能数字时钟班级:姓名:学号:一、实验内容:设计一个单片机控制的秒表系统。
利用单片机的定时器的原理,结合显示电路、LED 数码管以及按键来设计计时器,使系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
目的要求1)两位LED显示,显示时间为00~99秒。
2)每秒自动加1。
3)一个开始按键、一个复位按键和一个暂停按钮。
4)翻页按钮查看四个不同的计时值。
5)添加倒计时初始值设置功能6)不同功能通过功能键Setup实现切换。
二、实验电路及功能说明本实验以51单片机为核心,应用其中断来定时,通过按键来控制时间和日期的调整,通过1602LCD来数字显示时钟,做成一个简易的数字时钟。
本实验要求能定时,还要能设置闹铃,由于对C51程序代码的写法不是很熟,没能实现闹铃功能。
所以,最后该实验能实现的功能为时间和日期的调整。
其原理图如下图所示:三、实验程序流程图:主程序:主程序流程图子流程图(按键功能设置)四、实验结果分析经过proteus仿真可知:该方案可行,能够对时间进行精确的调整,也能对日期进行更正,基本上能实现上述功能。
五、心得体会通过该试验我对51的了解更加深入了一层,特别是对C51的写法更加了解,还对1602的基本操作有了一定的了解。
同时,也发现C语言的重要性,以后要多加强对C语言的学习.六、程序清单#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数// 定义控制信号端口sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P1^4; //设置键sbit add1=P1^5; //加1键sbit sub1=P1^6; //减1键sbit enter=P1^7; //确认键bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示char sec,n,m;unsigned char count,key;unsigned char lcdd[]="0123456789";/*声明调用函数*/void dispd(); //日期显示函数void dispt(); //时间显示函数unsigned char keys();//按键扫描函数void lcd_w_cmd(unsigned char ); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数.void delay1(); //软件实现延时函数,5个机器周期/*主函数*/void main(){TMOD=0x01; //设置为定时器模式1TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;IE=0x82; //开全局中断和定时中断TR0=1; //启动定时器sec=0; //秒count=0; //中断次数清0n=-3; //设置键按下次数,第一行日期m=-3; //设置键按下次数,第二行时间P0=0xff; // 送全1到P0口int1(); // 初始化LCDdelay(255);while(1){key=keys(); //读取按键switch(key){case 0xe0: //按下设置键{TR0=0;k=1;if(f==0){n=n+3;if(n==9){n=0;m=0;f=1;}}else{m=m+3;if(m==12){m=0;n=0;f=0;}}if(f==0){lcd_w_cmd(0x0d);lcd_w_cmd(0x86+n);}else{lcd_w_cmd(0x0d);lcd_w_cmd(0xc4+m);}} break;case 0x70: //按下确认键{k=0;TR0=1;n=-3;m=-3;f=0;} break;case 0xd0: //按下加1键{if(k==1){if(f==0){(m==6){sec++;if(sec==100) sec=0;} dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;case 0xb0: //按下减1键{if(k==1){if(f==0){if(m==6){sec--;if(sec<0) sec=99;}dispt(); //调用第二行显示函数.lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;}if(k==0) {dispd();dispt();} //调用LCD显示函数}}/*延时函数*/void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<20;j++);}/*延时函数1*/void delay1(){_nop_();_nop_();_nop_();}/*LCD初始化函数*/void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0c); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}/*LCD读状态函数*///返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();s=P0; //从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}/*LCD写命令函数*/void lcd_w_cmd(unsigned char ){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; // RW=0,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P0=; //将中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*LCD写数据函数*/void lcd_w_dat(unsigned char dat){unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; // RW=1,RS=0,写LCD数据delay1();E=1; // E端时序delay1();.P0=dat; // 将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*****定时中断函数*****/void timer0() interrupt 1{TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==99){sec=0;} /*按键扫描函数*/unsigned char keys(){unsigned char cod,del;P1=0xf0;cod=P1&0xf0; //读入P3口键值if(cod!=0xf0) //先检测有无按键按下{delay(100); //去抖if(cod!=0xf0){cod=P1&0xf0; //读入键值do //等待键释放{P1=0xf0;del=P1&0xf0;}while(del!=0xf0);return(cod);//返回键值}}return(0xf0); //返回该值}void dispt(){lcd_w_dat(lcdd[sec%10]);delay(2);lcd_w_dat(' ');delay(2);lcd_w_dat('W');delay(2);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机综合实验报告题目: 多功能数字时钟班级:姓名:学号:一、实验内容:设计一个单片机控制的秒表系统。
利用单片机的定时器的原理,结合显示电路、LED 数码管以及按键来设计计时器,使系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
目的要求1)两位LED显示,显示时间为00~99秒。
2)每秒自动加1。
3)一个开始按键、一个复位按键和一个暂停按钮。
4)翻页按钮查看四个不同的计时值。
5)添加倒计时初始值设置功能6)不同功能通过功能键Setup实现切换。
二、实验电路及功能说明本实验以51单片机为核心,应用其中断来定时,通过按键来控制时间和日期的调整,通过1602LCD来数字显示时钟,做成一个简易的数字时钟。
本实验要求能定时,还要能设置闹铃,由于对C51程序代码的写法不是很熟,没能实现闹铃功能。
所以,最后该实验能实现的功能为时间和日期的调整。
其原理图如下图所示:三、实验程序流程图:主程序:主程序流程图子流程图(按键功能设置)四、实验结果分析经过proteus仿真可知:该方案可行,能够对时间进行精确的调整,也能对日期进行更正,基本上能实现上述功能。
五、心得体会通过该试验我对51的了解更加深入了一层,特别是对C51的写法更加了解,还对1602的基本操作有了一定的了解。
同时,也发现C语言的重要性,以后要多加强对C语言的学习.六、程序清单#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数// 定义控制信号端口sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P1^4; //设置键sbit add1=P1^5; //加1键sbit sub1=P1^6; //减1键sbit enter=P1^7; //确认键bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示char sec,n,m;unsigned char count,key;unsigned char lcdd[]="0123456789";/*声明调用函数*/void dispd(); //日期显示函数void dispt(); //时间显示函数unsigned char keys();//按键扫描函数void lcd_w_cmd(unsigned char com); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数void delay1(); //软件实现延时函数,5个机器周期/*主函数*/void main(){TMOD=0x01; //设置为定时器模式1TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;IE=0x82; //开全局中断和定时中断TR0=1; //启动定时器sec=0; //秒count=0; //中断次数清0n=-3; //设置键按下次数,第一行日期m=-3; //设置键按下次数,第二行时间P0=0xff; // 送全1到P0口int1(); // 初始化LCDdelay(255);while(1){key=keys(); //读取按键switch(key){case 0xe0: //按下设置键{TR0=0;k=1;if(f==0){n=n+3;if(n==9){n=0;m=0;f=1;}}else{m=m+3;if(m==12){m=0;n=0;f=0;}}if(f==0){lcd_w_cmd(0x0d);lcd_w_cmd(0x86+n);}else{lcd_w_cmd(0x0d);lcd_w_cmd(0xc4+m);}} break;case 0x70: //按下确认键{k=0;TR0=1;n=-3;m=-3;f=0;} break;case 0xd0: //按下加1键{if(k==1){if(f==0){(m==6){sec++;if(sec==100) sec=0;}dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;case 0xb0: //按下减1键{if(k==1){if(f==0){if(m==6){sec--;if(sec<0) sec=99;}dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;}if(k==0) {dispd();dispt();} //调用LCD显示函数}}/*延时函数*/void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<20;j++);}/*延时函数1*/void delay1(){_nop_();_nop_();_nop_();}/*LCD初始化函数*/void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0c); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}/*LCD读状态函数*///返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD 控制器忙unsigned char lcd_r_start(){unsigned char s;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();s=P0; //从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}/*LCD写命令函数*/void lcd_w_cmd(unsigned char com){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; // RW=0,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P0=com; //将com中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*LCD写数据函数*/void lcd_w_dat(unsigned char dat){unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; // RW=1,RS=0,写LCD数据delay1();E=1; // E端时序delay1();P0=dat; // 将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255); }/*****定时中断函数*****/void timer0() interrupt 1{TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==99){sec=0;} /*按键扫描函数*/unsigned char keys(){unsigned char cod,del;P1=0xf0;cod=P1&0xf0; //读入P3口键值if(cod!=0xf0) //先检测有无按键按下{delay(100); //去抖if(cod!=0xf0){cod=P1&0xf0; //读入键值do //等待键释放{P1=0xf0;del=P1&0xf0;}while(del!=0xf0);return(cod);//返回键值}}return(0xf0); //返回该值}void dispt(){lcd_w_dat(lcdd[sec%10]);delay(2);lcd_w_dat(' ');delay(2);lcd_w_dat('W');delay(2);}。