1、目录摘要3一、单片机概述4二、多功能电子时钟62.1设计内容要求62.2实验电路组成62.3电路方案设计82.4系统资源分配92.5模块化程序92.6算法流程思路9小结10参考文献10附录程序10摘 要单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、
2、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域。近年来随着微控技术的日益完善和飞速发展,单片机的应用正在不断深入,它的应用必将导致系统控制技术从根本上发生变革,同时带动传统控制检测技术日益更新。它在工业控制、数据采集、智能化仪表、机电一体化、家用电器领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化控制。在实际检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面的知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。而在繁华的都市之中,到处都是绚烂的霓
3、虹灯,此次课程设计即为设计一花样流水灯。一、单片机概述(芯片简介)单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。IAP15F2K60S2简介宏晶STC15F2K60S2系列主要性能:大
4、容量2048字节片内RAM数据存储器高速:1个时钟/机器周期,增强型8051内核(STC Y5),速度比传统8051快712倍速度也比STC早期的1T系列单片机(如STC12/11/10系列)的速度快20%宽电压:5.53.8V,2.43.6V(STC15L2K60S2系列)低功耗设计:低速模式,空闲模式,掉电模式(可由外部中断或内部掉电唤醒定时器唤醒)内部高精度R/C时钟,1% 温飘(-40+85),常温下温飘5,可彻底省掉外部昂贵的晶体时钟,内部时钟从5MHz35MHz可选内部高可靠复位,ISP编程时8级复位门槛电压可选,彻底省掉外部复位电路支持掉电唤醒的资源有:INT0/INT1(上升沿
5、/下降沿中断均可),-INT2/-INT3/-INT4(下降沿中断);CCP0/CCP1/CCP2/RxD/RxD2/T0/T1/T2 管脚;内部掉电唤醒专用定时器工作频率:535MHz,相当于普通8051:60420MHz8/16/24/32/40/48/56/60/61K字节片内Flash程序存储器,擦写次数10万次以上大容量片内EEPROM(FLASH)功能,擦写次数10万次以上ISP/IAP(在系统可编程/在应用可编程),无需编程器/仿真器高速ADC,8通道10位,速度可达30万次/秒。3路PWM还可当3路D/A使用3通道捕获/比较单元(CCP/PCA/PWM)-也可用来再实现3路D/
6、A 3个定时器或3个外部中断(支持上升沿/下降沿中断)6个定时器,2个16位可重装载定时器T0和T1兼容普通8051的定时器,新增了一个16位的定时器T2,并可实现时钟输出,3路CCP/PCA可再实现3个定时器可编程时钟输出功能(对内部系统时钟或外部管脚的时钟输入进行时钟分频输出): T0 在P3.5 输出时钟; T1 在P3.4 输出时钟; T2 在P3.0 输出时钟,以上3个定时器/计数器输出时钟均可165536级分频输出; 内部主时钟在P5.4/MCLKO 对外输出时钟(STC15系列8-pin单片机的主时钟在P3.4/MCLKO 对外输出时钟)硬件看门狗(WDT)SPI高速同步串行通信
7、接口双串口/UART,两个完全独立的高速异步串行通信端口,分时切换可当5组串口使用先进的指令集结构,兼容普通8051指令集,有硬件乘法/除法指令通用I/O口(42/38/30/26个),复位后为:准双向口R弱上拉(8051传统I/O口)可设置四种模式:准双向口弱上拉、强推挽弱上拉、仅为输入/高阻和开漏每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA如果I/O口不够用可以用3根普通I/O口线外接74HC595来扩展I/O口,并可多芯片级联扩展几十个I/O口,还可用A/D作按键扫描来节省I/O口二、多功能电子时钟2.1设计要求1、 实现时、分、秒、年、月、日的显示,而且还有闹
8、钟的功能。2、 能够调整时钟的各个时钟单元的值,并且按键灵敏。3、 在调整时钟单元值的时候要求有闪烁功能。2.2设计电路组成 本次课程设计采用宏晶公司最新STC系列IAP15F2K61S2芯片独立按键:设计采用的是独立式按键:当开关打到下面时由P0-P3构成了4个独立按键。数码管:设计采用的是8位共阴数码管显示数码管驱动电路:数码管驱动电路主要由2片74HC595组成,两片芯片之间级联。一片驱动位选,一片驱动段选。由单片机控制p0.3,p0.4,p0.5来控制两片芯片的输出。程序下载芯片:USB转串口芯片CH340G,可实现程序下载2.3电路方案设计1、电路主要由15F单片机、数码管、4个独立
9、按键、74HC595,USB转串口芯片CH340G,8个LED灯。2、单片机通过对按键的检测实现不同的功能,主要有以下几点:(1)单片机通过对p0.3,p0.4,p0.5对两片74HC595写入数据来使8个数码管显示。(2)当设置的闹钟时间匹配到当前时间时,单片机会点亮LED灯,检测合适的按键会使LED灯熄灭。2.4系统资源分配 定时器T0:用于时钟走时,对基本时间单位计数并对秒单元操作 定时器T1:在功能键调整时对时钟单元时实现闪烁的的半秒计数 30H38H是8个时钟数据单元,分别为秒、分、时、日、月、年、闹钟-秒、闹钟-分、闹钟-时单元 P0.3,P0.4,P0.5是74HC595控制单元
10、,实现对数码管的显示 P2:闹钟显示,闹钟匹配成功后点亮LED灯R0:功能键模式中指向修改单元的地址R1:时钟调整时所用的地址指针R2:写74HC595计数单元,写8位R3、R4:毫秒延时单元(用于数码管显示),R4还作为送数码管显示位选缓冲单元R5: 基本的时钟单元计数,满100秒单元加一 R6:半秒闪烁计数P1.0,P1.1,P1.2,P1.3为四个独立按键位20H.0,20H.1,20H.2为三个自定义按键标志位40H:对循环次数计数,满足条件时对指定单元加1(快速加数)41H,42H:对循环计数,满足条件时对指定单元清043H、44H、45H:显示模块缓冲单元(写8个数码管)47H:数
11、码管送显示缓冲单元48H:闪烁缓存单元,大小为0BBH,根据查表得到灯灭的段选码2.5软件功能组成和模块化程序整个程序主要有:主程序、各个按键功能子程序、两个定时器中断程序、写74HC595芯片子程序还有其他模块子程序等等主程序模块:在主程序中循环显示时钟与检测按键,若无按键则一直检测按键,则一直进行此循环,知道检测到按键为止。/*主程序*/START: ACALL DISPLAY1 ACALL CLOCK ;闹钟检查TEST_S1: JB S1,TEST_S2 ACALL K1 ;S1按下,调用年月日显示TEST_S2: JB P1.1,TEST_S3 ACALL K2 ;S2按下,调用K2
12、(功能模块)TEST_S3: JB S3,TEST_S4 ACALL CL_DISP ;显示闹钟TEST_S4: JB S4,TEST_EXT MOV P2,#0FFH ;对闹钟状态清除TEST_EXT:SJMP START闹钟检查模块:实现闹钟匹配,并执行相关的响应,在响应执行30秒后可自动清除闹钟响应,实现代码模块如下:/*闹钟检查*/CLOCK: MOV A,SECOND_CL CJNE A,SECOND,C_EXT ;匹配秒单元 MOV A,MINU_CL CJNE A,MINU,C_EXT ;匹配分单元 MOV A,HOUR_CL CJNE A,HOUR,C_EXT ;匹配时单元 M
13、OV A,SECOND_CLCLR CADDC A,#30HDA AMOV B,AMOV P2,#0FHC_EXT: MOV A,B CJNE A,SECOND,CLOCK_EXTMOV P2,#0FFHCLOCK_EXT:RET年月日显示模块:按下S1按键,可显示年月日的信息,实现代码模块如下:/*S1按键显示*/K1: ACALL DISPLAY2 ;年月日显示 ACALL CLOCK JB S1,K1_EXT SJMP K1K1_EXT: RET闹钟显示模块:按下S3按键,可显示所定的闹钟时刻,实现代码模块如下:/*闹钟显示*/CL_DISP: ACALL DISPLAY3 ACALL
14、CLOCK JNB S3,CL_DISP RET时钟修改功能键:在修改时钟时,会对显示时钟闪烁处理,然后根据按键的情况来进行相关的操作,如:S1长按会使指定单元数据增加的速度变快;S2按键会使指针指向下一个单元,准备对下一单元进行操作;S3按下时指针指向的单元(即闪烁单元)加1;S3长时间按下(如超过3秒),则对指定单元清0;S4按键按下后,退出S2功能模块,返回主程序显示模块。实现代码模块如下:/*S2按键功能子程序*/K2: MOV TL1,#0F0H ;S2按键调用 MOV TH1,#0D8H MOV R6,#50 CLR TR0 ;关闭走时定时器 SETB F2 ;S2已按键标志 CL
15、R F3 ;S3未按键标志 SETB TR1 ;开闪烁定时器 MOV SSDY,#0BBH ;数码管全灭代码(第11个段选码为00H,数码管灭) MOV R0,#SECOND ;从第一个开始闪烁 MOV 40H,#25/*S3长按清“0”*/K2_S3_2: JB S3,S2_2_EXT DJNZ 41H,K2_S1 DJNZ 42H,K2_S1;检测S3按下后循环210*2次,对闪烁单元清“0” CJNE R0,#0BBH,S2_2 MOV SSDY,R0S2_2: MOV R0,#00HS2_2_EXT:MOV 41H,#210 MOV 42H,#2 ;计数200*2次/*S1长按快速加数
16、*/K2_S1: JB S1,K2_SS DJNZ 40H,K2_SS MOV 40H,#25 ACALL CHANGE AJMP S3_1/*闪烁模块(定时器T1 0.5秒标志F1)*/ K2_SS: JNB F1,K2_S2;判断闪烁标志 MOV A,SSDY XCH A,R0 MOV SSDY,A;闪烁 CLR F1/*S2按键对下一个单元操作*/K2_S2: ACALL S2_IN ;指向下一个单位/*S3按键对指定单元加1*/K2_S3_1: JB S3,S3_1_EXT;S3是否按下 JB F3,DISP_CH ;S3按键已按下,查看上一个S3是否按下 SETB F3 ;没按下,说
17、明是第一次按下 ACALL CHANGE ;还原38H与闪烁单元的值 SJMP S3_1S3_1_EXT:CLR F3 ;S3未按下,清除S3按键标志 SJMP DISP_CHS3_1: ACALL CREASE;对闪烁的单元加1,十进制调整,上限设置 MOV R6,#50 CLR F1;按下键后可显示半秒 ACALL CHANGE/*对显示的单元进行选择*/DISP_CH: ACALL CH_IN;对显示的单元进行选择/*S4按键退出功能设置*/K2_S4: JNB S4,K2_EXT;S4按键按下则退出S2按键子程序,返回主程序CJNE R0,#39H,K2_S3_2K2_EXT: ACA
18、LL CHANGE ;还原38H与闪烁单元的值 MOV TL0,#0F0H MOV TH0,#0D8H MOV R5,#100 SETB TR0 CLR TR1 ;打开T0,关闭T1 RET74HC595模块:向595写一个字节的数据。/*向595写一字节的数据*/WRITE: MOV R2,#8WRT1: RLC A MOV DAT,C NOP SETB SH;上升沿输入数据 NOP CLR SH DJNZ R2,WRT1 RET定时器T0模块:用于时钟走时,对时钟单元操作/*定时器T0(时钟走时)*/TM00: PUSH ACC ;定时器T0 DJNZ R5,EXTT0 MOV R5,#9
19、5 ACALL ADJUST ;秒加1调整EXTT0: NOP POP ACC RETI定时器T1模块:用于建立闪烁标志(F1),达到控制单元闪烁的目的。/*定时器T0(单元闪烁)*/TM11: PUSH ACC ;定时器T1 DJNZ R6,EXTT1 MOV R6,#47 SETB F1;闪烁标志EXTT1: POP ACC RETI数码管显示模块:用于显示时钟信息。(其他显示模块类似)/*显示模块1:时分秒*/DISPLAY1:CLR A MOV A,SECOND MOV 43H,A MOV A,MINU MOV 44H,A MOV A,HOUR MOV 45H,A ACALL DISP
20、LAY0 RET2.6算法流程思路1、主程序中,主要执行显示模块,显示时分秒,每次循环显示时都会检测按键,通过不同的按键调用不同的功能子程序。(1) 当主程序中检测到S1按键时,调用年月日显示模块,显示年月日信息。(2)当主程序中检测到S2按键时,调用功能模块时钟修改:可设置各个时钟的值于闹钟的值。(3)当主程序中检测到S3按键时,调用闹钟时间显示模块,查看闹钟时间。(4)如果达到闹钟时间并且有闹钟响应,此时期如果S4键按下,会清除闹钟响应。2、S2功能模块:单片机部分时间用于显示时钟信息,在显示循环中依次对各个按键进行检测,同时定时器定时检测按键,检测到按键则会做出相应的操作或建立标志,循环
21、显示中根据标志或者按键做出相关的操作,如:对单元加1、对单元清0、对下一个单元操作、返回主程序等功能。(1)当检测到S1按键长时间按下时,会以很快的速度增加指定单元的值。(2)当检测到S2按键按下时,地址指针指向下一个单元,并对指定单元闪烁。(3)当检测到S3按键短时间按下时,对指定单元作加1操作。但检测到S3按键长时间按下时,对指定单元清0。(4) 当检测到S4按键按下时,对标志位F1置1,循环中检测到F1标志后就会跳出S2功能子程序,返回主程序,时钟开始走时。小结1、本次课程设计已初步达到了课程设计要求:(1)、实现时钟走时,并显示出来。(2)、能够对时钟的值进行调整;调整指定的单元时,能
22、够对指定单元闪烁提醒。而且还增加了清0功能键与长按按键速加功能键。(3)、能够设定闹钟,当闹钟与时钟匹配时,单片机会执行特定的提醒。2、虽然本次课程设计实现了时钟的基本功能,但是还缺少很多人性化的功能比如:(1)、时钟初值是程序固定的,每次重启或复位单片机后,时钟都会回到固定的值。(2)、本次课程设计使用的是定时器作为时钟基本计时单元,精度上与现有的时钟有不小的误差。3、完成本次单片机课程设计,我有了很多的体会和感想这次课程设计让我受益匪浅,无论从知识上还是其他的各个方面。上课的时候的学习因为没有在单片机上实践过,只是从理论的角度去理解枯燥乏味,而且单片机实验课也不多,缺乏对单片机的了解。 这
23、次课程设计由个人独立完成,单片机的外接电路也都由自己看原理图来分析、测试和使用,熟悉甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。参考文献1单片机原理与应用朱兆优、陈坚、邓文娟2012.72宏晶科技.STC15F2K60S2系列单片机器件资料,2012.3电工电子实训教程.王怀平、管小明、冯林2011.74百度百科 附录程序: ORG 0000 LJMP MAIN ORG 000BH LJMP TM00 ORG 001BH LJMP TM11 ORG 0100HMAIN: MOV SP,#6FH MOV R5,#100;一秒定时计数 100*10m
24、s MOV R6,#50 ;半秒定时闪烁定时计数50*10ms MOV TMOD,#00;定时器工作方式0,16位自动重装 AUXR DATA 8EH MOV AUXR,#00H;12分频 MOV TL0,#0F0H MOV TH0,#0D8H MOV TL1,#0F0H MOV TH1,#0D8H ;定时10ms初值 SETB ET0 SETB TR0 SETB EA;开中断,开中断允许 SETB ET1 CLR TR1 ;开定时器0(走时计时),关闭定时器1(闪烁计时) SH BIT P0.3;595移位线 ST BIT P0.4;595锁存线 S1 BIT P1.0 S2 BIT P1.
25、1 S3 BIT P1.2 S4 BIT P1.3 ;4独立按键 F1 BIT 20H.0 ;1个闪烁标志 F2 BIT 20H.1 F3 BIT 20H.2 ;3个按键标志位 SECOND EQU 30H ;秒单元 MINU EQU 31H ;分单元 HOUR EQU 32H ;时单元 DAY EQU 33H ;日单元 MONTH EQU 34H ;月单元 YEAR EQU 35H ;年单元SECOND_CL EQU 36H ;闹钟-秒单元 MINU_CL EQU 37H ;闹钟-分单元 HOUR_CL EQU 38H ;闹钟-时单元 SSDY EQU 48H ;闪烁缓存单元 SEND_DA
26、T EQU 47H ;数码管送显示数据缓冲单元 DAT BIT P0.5 ;数码管静态显示,595控制位 CLR SH CLR ST MOV SECOND_CL,#5H MOV MINU_CL,#15H MOV HOUR_CL,#01H MOV SECOND,#59H MOV MINU,#14H MOV HOUR,#01H MOV DAY,#23H MOV MONTH,#06H MOV YEAR,#14H ;时钟初值/*主程序*/START: ACALL DISPLAY1 ACALL CLOCK ;闹钟检查TEST_S1: JB S1,TEST_S2 ACALL K1 ;S1按下,调用年月日显
27、示TEST_S2: JB P1.1,TEST_S3 ACALL K2 ;S2按下,调用K2(功能模块)TEST_S3: JB S3,TEST_S4 ACALL CL_DISP ;显示闹钟TEST_S4: JB S4,TEST_EXT MOV P2,#0FFH ;对闹钟状态清除TEST_EXT:SJMP START/*闹钟检查*/CLOCK: MOV A,SECOND_CL CJNE A,SECOND,C_EXT ;匹配秒单元 MOV A,MINU_CL CJNE A,MINU,C_EXT ;匹配分单元 MOV A,HOUR_CL CJNE A,HOUR,C_EXT ;匹配时单元 MOV A,S
28、ECOND_CLCLR CADDC A,#30HDA AMOV B,AMOV P2,#0FHC_EXT: MOV A,B CJNE A,SECOND,CLOCK_EXTMOV P2,#0FFHCLOCK_EXT:RET/*闹钟显示*/CL_DISP: ACALL DISPLAY3 ACALL CLOCK JNB S3,CL_DISP RET/*S1按键显示*/K1: ACALL DISPLAY2 ;年月日显示 ACALL CLOCK JB S1,K1_EXT SJMP K1K1_EXT: RET/*S2按键功能子程序*/K2: MOV TL1,#0F0H ;S2按键调用 MOV TH1,#0D
29、8H MOV R6,#50 CLR TR0 ;关闭走时定时器 SETB F2 ;S2已按键标志 CLR F3 ;S3未按键标志 SETB TR1 ;开闪烁定时器 MOV SSDY,#0BBH ;数码管全灭代码(第11个段选码为00H,数码管灭) MOV R0,#SECOND ;从第一个开始闪烁 MOV 40H,#25/*S3长按清“0”*/K2_S3_2: JB S3,S2_2_EXT DJNZ 41H,K2_S1 DJNZ 42H,K2_S1 ;检测S3按下后循环210*2次,对闪烁单元清“0” CJNE R0,#0BBH,S2_2 MOV SSDY,R0S2_2: MOV R0,#00HS
30、2_2_EXT:MOV 41H,#210 MOV 42H,#2 ;计数200*2次/*S1长按快速加数*/K2_S1: JB S1,K2_SS DJNZ 40H,K2_SS MOV 40H,#25 ACALL CHANGE AJMP S3_1/*闪烁模块(定时器T1 0.5秒标志F1)*/K2_SS: JNB F1,K2_S2;判断闪烁标志 MOV A,SSDY XCH A,R0 MOV SSDY,A;闪烁 CLR F1/*S2按键对下一个单元操作*/K2_S2: ACALL S2_IN ;指向下一个单位/*S3按键对指定单元加1*/K2_S3_1: JB S3,S3_1_EXT;S3是否按下
31、 JB F3,DISP_CH ;S3按键已按下,查看上一个S3是否按下 SETB F3 ;没按下,说明是第一次按下 ACALL CHANGE ;还原38H与闪烁单元的值 SJMP S3_1S3_1_EXT:CLR F3 ;S3未按下,清除S3按键标志 SJMP DISP_CHS3_1: ACALL CREASE;对闪烁的单元加1,十进制调整,上限设置 MOV R6,#50 CLR F1;按下键后可显示半秒 ACALL CHANGE/*对显示的单元进行选择*/DISP_CH: ACALL CH_IN;对显示的单元进行选择/*S4按键退出功能设置*/K2_S4: JNB S4,K2_EXT;S4按
32、键按下则退出S2按键子程序,返回主程序 CJNE R0,#39H,K2_S3_2K2_EXT: ACALL CHANGE ;还原38H与闪烁单元的值 MOV TL0,#0F0H MOV TH0,#0D8H MOV R5,#100 SETB TR0 CLR TR1 ;打开T0,关闭T1 RETS2_IN: JB S2,S2_EXT JB F2,S2_OUT;S2按键已按下,查看上一个S2是否按下 SETB F2 ;没按下;则说明这次是第一次按下 ACALL CHANGE;还原38H与闪烁单元的值 SJMP S2_1S2_EXT: CLR F2 ;S2没按下 清除S2按键标志 SJMP S2_OU
33、TS2_1: INC R0S2_OUT: RET /*对显示的单元进行选择*/CH_IN: CLR C CLR A MOV A,R0 ADD A,#0CAH ;闪烁单元大于32H时,进位C=1 JNC CH_1;根据闪烁单元来选择显示的种类(年月日或者时分秒) ACALL DISPLAY3 SJMP CH_EXTCH_1: CLR C CLR A MOV A,R0 ADD A,#0CDH JNC CH_2 ACALL DISPLAY2 SJMP CH_EXTCH_2: ACALL DISPLAY1CH_EXT: RET/*闪烁单元还原*/CHANGE: CJNE R0,#0BBH,CHA_EX
34、T MOV R0,SSDY MOV SSDY,#0BBHCHA_EXT: RET/*指定单元加1调整*/CREASE: INC R0 ;闪烁单元加1,十进制调整,上限设置子程序 MOV A,R0 CLR C ADDC A,#00 DA A MOV R0,A;十进制调整 MOV R1,#SECOND ;查看是否有单元到达上限,调整 CJNE R1,#60H,CRE0 MOV R1,#00H SJMP CREACRE0: INC R1 CJNE R1,#60H,CRE1 MOV R1,#00H SJMP CREACRE1: INC R1 CJNE R1,#24H,CRE2 MOV R1,#00H SJMP CREACRE2: INC R1 MOV A,MONTH CJNE A,#2,DAY0 CJNE R1,#29H,CRE3 SJMP DAY5DAY0: CJNE A,#4,DAY1 SJMP DAY6DAY1: CJNE A,#6,DAY2 SJMP DAY6DAY2: CJNE A,#9,DAY3 SJMP DAY6DAY3: CJNE A,#11H,DAY4DAY6: CJNE