基于51单片机的数字时钟设计

上传人:94****0 文档编号:65338601 上传时间:2022-03-23 格式:DOC 页数:24 大小:152.50KB
收藏 版权申诉 举报 下载
基于51单片机的数字时钟设计_第1页
第1页 / 共24页
基于51单片机的数字时钟设计_第2页
第2页 / 共24页
基于51单片机的数字时钟设计_第3页
第3页 / 共24页
资源描述:

《基于51单片机的数字时钟设计》由会员分享,可在线阅读,更多相关《基于51单片机的数字时钟设计(24页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上一 设计要求及方案证设计制作和调试一个由8051MCU单片机组成的数字时钟系统。通过这个过程学习熟悉键盘控制和七段数码管得使用,掌握51系列单片机控制和测试的方法。设计以89S51单片机为核心,以LED为显示方式的万年历时钟显示,完成基本要求。1)数码管显示:年月日时分秒。2)键盘输入修改时间、日期设置。二 系统基本方案选择和论证2.1单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,其内部采用Flash ROM,具有4KB ROM 存储空间,能于3V的超低压工作,但运用于电路设计中时由于不具备ISP在线编程技术,烧入程序时需要专门的C编程器(当前可用

2、的实验烧写开发板只支持具有ISP在线编程功能的AT89S系列的芯片),当在对电路进行调试时,更显麻烦,并且增加了造价,方案二:采用89S51芯片作为主控模块,AT89S51是 MCS-51系列单片机目前运用较多的一种芯片,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且具备ISP在线编程技术,方便对电路进行调试.但由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。针对该问题,可采用易于插拔的芯片插槽,芯片的程序烧写用专门的实验板进行烧写(当前可用的实验烧写开发板支持AT89S系列).AT89S51单片机的功能引脚图如

3、下图所示:AT89S51单片机的功能引脚图所以选择采用AT89S51作为主控制系统.2.2 显示模块选择方案和论证方案一:采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.方案三:采用LED数码管进行静态显示,LED数码管价格适中,对于显示数字最合适,而且采用静态显示法和单片机连接时,占用的单片机口线少(采用十二小时制显示,以

4、P0、P1、P2口分别作为分、十分、小时位显示段码输出,而十小时位只需要显示1或者不显示,故只要用到P3口的两个引脚P3.1和P3.2作为显示段码输出即可)。共阳极8段数码管引脚图所以采用了LED数码管作为显示。2.3时钟芯片的选择方案和论证方案一: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V5.5V范围内,功耗也较低,但价格比较贵,且目前市场上采购不到方案二: 直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数。采用此种方案实现虽然有一定的时间误差,但可减少少芯

5、片的使用,节约成本,易于实现,符合初学者实验选用。所以采用方案二。综上各方案所述,对此次作品的方案选定: 采用AT89S51作为主控制系统; 通过软件编程采用定时器定时实现秒.分.时计时;LED数码管静态显示时间。三 系统的硬件设计和实现3.1电路设计框图复位电路AT89S51主控制模块LED数码管显示时间时钟振荡电路外部中断校时校分电路电源电路3.2 主要单元电路的设计3.2.1 晶体振荡电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体荡器电路。本设计中的震荡电路如图3.1所示图3.1

6、 晶振电路3.2.2 分频器电路分频器电路将高频方波信号经分频后得到1Hz的方波信号供秒计数器进行计数,分频器实际上也就是计数器。3.2.3 时间计数器电路 时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器而根据设计要求,时个位和时十位计数器为12进制计数器。3.2.4 内部时钟电路内部时钟电路如图3.2所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用30PF。图3.2 内部时钟电路3

7、.2.5复位电路MCS-51单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器和复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持

8、足够长的时间。图3.3 复位电路RC上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。电路如图3.3所示。3.2.6 按键部分本设计总的用了五个按扭开关作为键盘,用于调整时间和设置状态。电路如图3.4所示。图3.4 按键电路3.2.7声光报警电路利用单片机的IO口控制一个8550的三极管,三极管控制蜂鸣器的电源通断。从而实现输出声音。声光报警电路如图3.5所示。图3.5 声光报警电路四、电路原理分析4.1显示原理电原理图见附图1。由6个共阴极的数码管组成时、分、秒的显示。P0口的8条数据线P0.0至P0.7分别和两个CD4511译码的A

9、BCD口相接,P2口的P2.0至P2.2分别通过电阻R10至R13和VT1至VT3的基极相连接。这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。从P0口输出的代码是BCD码,从P2口输出的就是位选码。这是扫描显示原理。4.2键盘及读数原理键盘是人和微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms

10、.4.3连击功能的实现按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。利用连击功能,能实现快速调时操作。五、程序设计思想和相关指令介绍本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。5.1数据和代码转换由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。但P0口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。可见

11、,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。具体转换过程如下:我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,再放回A中,然后将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成四位的BCD码:(0100)(0101)然后放入A中。 A中BCD码,高位四位代表4低四位代表5同时送给两个译码器中,译码后45字就在两个LED中显示出来。5.2计时功能的实现和中断服务程序时间的运行依靠定时中断子程序对时钟

12、单元数值进位调整来实现的。计数器T0打开后,进入计时,满100毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。累加是用指令INC来实现的。进入中断服务程序以后,执行PUSH PSW和PUSH A将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的保护现场,以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取和

13、一般的RAM存取又有区别,对它的操作,要遵循后进先出的原则。5.3时间控制功能和比较指令系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间和执行设备的设定开启时间相等,就执行一条CLR指令,将对应的那路P3置为高电位,开启;如果当前计时时间和执行设备设定的关闭时间相等,就执行SETB对应的P3置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNE A,#direct, rel,其转移条件是累加器A中的值和立即数不等则转移。六、系统的软件设计整体流程图如下:初始化开

14、始T0计数器定时开始(50mS),等待定时中断循环累加依次得到秒、分、十分、小时、十小时显示子程序校时程序返回图-A 整体程序流图6.1主程序部分主程序流程图如图-B示,主要有设置堆栈;清计数器;设置定时器,设置中断等。开始初始化等待 图-B主程序流程图6.2计时显示中断子程序部分50mS计时中断R0加1是否为20清R0,R2加1R2是否为60否清R2,R3加1R3是否为10清R3,R4加1R4是否为6清R4,R5加1R5是否为3R6 是否为1R5置1,R6清零显示,出中断是是否R5是否为10R5清零,R6加1是否否是否是是否否是 图-C 计时中断子程序流程图6.3 调时功能流程图图-C 计时

15、中断子程序流程图专心-专注-专业6.4程序SEC EQU 32H ;秒 即时时间 伪指令MIN EQU 31H ;分HOUR EQU 30H ;时DAY EQU 35H ;日MON EQU 34H ;月YEAR EQU 33H ;年MIN_1 EQU 41H ;分 定时器1路、开存储单元HOUR_1 EQU 42H ;时DAY_1 EQU 43H ;MON_1 EQU 44H ;YEAR_1 EQU 45H ;MIN_11 EQU 40H ;分 定时器1路、关存储单元HOUR_11 EQU 46H ;时DAY_11 EQU 47H ;日MON_11 EQU 48H ;月YEAR_11 EQU

16、49H ;年;*ORG 0000Hljmp MAINORG 0003H ;中断转换显示年月日、INT0(SB4键)LJMP SHOWORG 000BH ;计数中断T0、方式1LJMP TIMEORG 0013HLJMP CHANGE; 调整时间、定时、INT1(SB0键);-主程序ORG 0030HMAIN:;-初始化付值MOV YEAR , #02MOV MON , #05MOV DAY , #01MOV HOUR , #00MOV MIN , #00MOV SEC , #00CLR 40H ;定时单元1路清零CLR 41HCLR 42HCLR 43HCLR 44HCLR 45HCLR 46

17、HCLR 47HCLR 48HCLR 49H;-开中断MOV TMOD , #01H ;计数、模式1、T0MOV TL0, #0B0H ;100SM计数定时MOV TH0, #3CH ;clr p3.0MOV 20H, #0AH ;10次*100SMSETB PT0 ;T0为最高级SETB TR0 ;允许计数SETB ET0 ;允许T0中断SETB EX0 ;允许INT0中断SETB EX1 ;允许INT1中断SETB EA ;开总中断;-显示、定时器启动判断LOOP:MOV R1, #30H; 存储单元MOV R4, #01H; 位选通MOV R3, #03H; 三组显示NEXT:MOV A

18、 , R1 ;MOV B , #10 ;将存储单元转换成两高低两组的BCD码DIV ABSWAP AORL A, BMOV P0, A;输出MOV P2, R4INC R1 ;下一单元MOV A, R4 ;RL A ;位移MOV R4, ALCALL DE5SM ;延时0.5SMDJNZ R3, NEXT ;全扫描显示一偏;-判断定时输出(只编写了一路)CJNE R7, #88H,LOOP ;是8则开,否则、定时已关、转;-开MOV A, YEARCJNE A, YEAR_1, LOOP_1;年比较,不等转关MOV A, MONCJNE A, MON_1, LOOP_1MOV A, DAYCJ

19、NE A , DAY_1,LOOP_1MOV A, HOURCJNE A, HOUR_1,LOOP_1MOV A, MINCJNE A, MIN_1, LOOP_1CPL P3.0;-关LOOP_1:MOV A, YEARCJNE A, YEAR_11, LOOP;年比较MOV A, MONCJNE A, MON_11, LOOPMOV A, DAYCJNE A , DAY_11,LOOPMOV A, HOURCJNE A, HOUR_11,LOOPMOV A, MINCJNE A, MIN_11, LOOPCPL P3.0LJMP LOOP;-年月日显示中断子程序SHOW:PUSH PSWp

20、ush ACCPUSH BPUSH 01HPUSH 02HPUSH 03HPUSH 04HMOV R2, #0FFH ;中断扫描次数TURN: MOV R1 , #33HMOV R4 , #01HMOV R3 , #03HNEXT_1:MOV A, R1MOV B , #10DIV ABSWAP AORL A, BMOV P0, AMOV P2, R4INC R1RL AMOV R4 ,ALCALL DE5SMDJNZ R3, NEXT_1DJNZ R2, TURN ;反复显示一定时间后返回POP 04HPOP 03HPOP 02HPOP 01HPOP BPOP ACCPOP PSWRETI;

21、-计数中断服务子程序TIME:PUSH PSWPUSH ACCPUSH BPUSH 06HMOV TH0 , #3CH;重装计数MOV TL0 , #0BH;DJNZ 20H, OUT ;转到中断跳出pop程序MOV 20H, #0AH ; 重装:100*10=1000;-进位程序INC SECMOV R6, SEC ;CJNE R6, #60, OUT;比较MOV SEC , #00 ;INC MINMOV R6, MINCJNE R6, #60, OUTMOV MIN , #00INC HOURMOV R6 , HOURCJNE R6 , #25 , OUTMOV HOUR ,#00INC

22、 DAYMOV R5, MONCJNE R5, #1, MON_22;是否1月、不是转2月MOV R5, DAYCJNE R5, #32, OUT ; 本月是否益出INC MONMOV DAY,#1LJMP OUTOUT:POP 06HPOP BPOP ACCPOP PSWRETIMON_22:MOV R5, MONCJNE R5 , #2 , MON_33;是否2月、不是转3月MOV A, YEAR ;判断是否瑞年MOV B, #4DIV ABMOV A , BJNZ OUT_1;不是则转(A不为零则转)MOV R5 ,DAYCJNE R5,#30, OUT;如是瑞年、判断是否到29天INC

23、 MONMOV DAY ,#1LJMP OUTOUT_1:MOV R5, DAYCJNE R5, #29, OUT ;平年二月判断INC MONMOV DAY , #1LJMP OUTMON_33:MOV R5, MONCJNE R5, #3 , MON_44MOV R5, DAYCJNE R5 , #32, OUTINC MONMOV DAY , #1LJMP OUTMON_44:MOV R5, MONCJNE R5,#4, MON_55MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_55:MOV R5,MONCJNE R5

24、,#5, MON_66MOV R5,DAYCJNE R5,#32,OUTINC MONMOV DAY,#1LJMP OUTMON_66:MOV R5, MONCJNE R5,#6, MON_77MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_77:MOV R5, MONCJNE R5,#7, MON_88MOV R5, DAYCJNE R5,#32,L1INC MONMOV DAY , #1L1: LJMP OUTMON_88:MOV R5, MONCJNE R5,#8, MON_99MOV R5, DAYCJNE R5 ,#

25、32,L2INC MONMOV DAY , #1L2: LJMP OUTMON_99:MOV R5, MONCJNE R5,#9, MON_00MOV R5,DAYCJNE R5 ,#31,L3INC MONMOV DAY , #1L3: LJMP OUTMON_00:MOV R5, MONCJNE R5,#10, MON_AAMOV R5, DAYCJNE R5 ,#32,L4INC MONMOV DAY , #1L4: LJMP OUTMON_AA:MOV R5, MONCJNE R5,#11, MON_BBMOV R5,DAYCJNE R5,#31,L5INC MONMOV DAY ,

26、#1L5: LJMP OUTMON_BB:MOV R5, DAYCJNE R5 ,#32,L6INC YEARMOV MON, #1MOV DAY , #1L6:LJMP OUT;-按SB2定时器年单元加1子程序SB3_2: LJMP SHOW_2 ;二路没编返回SB3_3: LJMP SHOW_3 ;三路没编返回SB3_1:MOV A , YEAR_1 ; 调时年单元MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H, SB3_1CJNE A, #0FBH, KEY2_7 ;

27、按SB2转年调整LJMP MON_111 ;按SB1往下调月单元KEY2_7:CJNE A, #0FDH, SB3_1INC YEAR_1 ; 1路年单元加1MOV R5,YEAR_1CJNE R5,#09,SB3_1 ;益出MOV YEAR_1, #00HAJMP SB3_1 ;-月单元加1子程序MON_111:MOV A , MON_1 ; 调时月单元显示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H, MON_111CJNE A, #0FBH, KEY2_8 ;按SB

28、2转月调整LJMP DAY_111KEY2_8:CJNE A,#0FDH,MON_111INC MON_1 ;1路月单元加1MOV R5,MON_1CJNE R5,#13,MON_111;益出MOV MON_1, #01HAJMP MON_111 ; 转到月显;_-日单元加1子程序DAY_111:MOV A , DAY_1 ; 调时日单元显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #04HLCALL READLCALL DE250SMCJNE A, 01H,DAY_111CJNE A, #0FBH, KEY2_9 ;按SB2转日调整LJM

29、P HOUR_111KEY2_9: CJNE A,#0FDH,DAY_111INC DAY_1 ;1组日单元加1MOV R5, DAY_1CJNE R5,#32,DAY_111;益出MOV DAY_1, #01HAJMP DAY_111 ; 转到日显;-按SB2时单元加1子程序HOUR_111:MOV A , HOUR_1 ; 调时时单元显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H,HOUR_111CJNE A, #0FBH, KEY2_10 ; 按SB2转时调整

30、LJMP MIN_111KEY2_10:CJNE A,#0FDH,HOUR_111INC HOUR_1MOV R5,HOUR_1CJNE R5,#24,HOUR_111;益出MOV HOUR_1, #00HAJMP HOUR_111 ; 转到时显;-分单元加1子程序MIN_111:MOV A , MIN_1 ; 调时分单元、并显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H,MIN_111CJNE A, #0FBH, KEY2_11 ;按SB2转分调整AJMP OFF

31、_CH ;按SB3往下调定时:关单元KEY2_11: CJNE A, #0FDH, MIN_111INC MIN_1 ;1路分单元加1MOV R5, MIN_1CJNE R5,#60,MIN_111;益处MOV MIN_1, #00HAJMP MIN_111 ; 转到分显年单元调整OFF_CH: MOV A , YEAR_11 ; 调时年单元MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H, OFF_CHCJNE A, #0FBH, KEY2_F7 ;按SB2转年调整LJMP

32、 MON_OFF ;按SB1往下调月单元KEY2_F7:CJNE A, #0FDH, OFF_CHINC YEAR_11 ; 1路年单元加1MOV R5,YEAR_11CJNE R5,#09,OFF_CH ;益出MOV YEAR_11, #00HAJMP OFF_CH ;-月单元加1子程序MON_OFF:MOV A , MON_11 ; 调时月单元显示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H, MON_OFFCJNE A, #0FBH, KEY2_F8 ;按SB2转月

33、调整LJMP DAY_OFFKEY2_F8:CJNE A,#0FDH,MON_OFFINC MON_11 ;1路月单元加1MOV R5,MON_11CJNE R5,#13,MON_OFF;益出MOV MON_11, #01HAJMP MON_OFF ; 转到月显;_-日单元加1子程序DAY_OFF:MOV A , DAY_11 ; 调时日单元显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #04HLCALL READLCALL DE250SMCJNE A, 01H,DAY_OFFCJNE A, #0FBH, KEY2_F9 ;按SB2转日调整

34、LJMP HOUR_OFFKEY2_F9: CJNE A,#0FDH,DAY_OFFINC DAY_11 ;1组日单元加1MOV R5, DAY_11CJNE R5,#32,DAY_OFF;益出MOV DAY_11, #01HAJMP DAY_OFF ; 转到日显;-按SB2时单元加1子程序HOUR_OFF:MOV A , HOUR_11 ; 调时时单元显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #01HLCALL READLCALL DE250SMCJNE A, 01H,HOUR_OFFCJNE A, #0FBH, KEY2_F10 ;

35、 按SB2转时调整LJMP MIN_OFFKEY2_F10:CJNE A,#0FDH,HOUR_OFFINC HOUR_11MOV R5,HOUR_11CJNE R5,#24,HOUR_OFF;益出MOV HOUR_11, #00HAJMP HOUR_OFF ; 转到时显;-分单元加1子程序MIN_OFF:MOV A , MIN_11 ; 调时分单元、并显示提示MOV B ,#10DIV ABSWAP AORL A,BMOV P0, AMOV P2, #02HLCALL READLCALL DE250SMCJNE A, 01H,MIN_OFFCJNE A, #0FBH, KEY2_F11 ;按

36、SB2转分调整LJMP ON_1 ;按SB3往下调定时:开和关KEY2_F11: CJNE A, #0FDH, MIN_OFFINC MIN_11 ;1路分单元加1MOV R5, MIN_11CJNE R5,#60,MIN_OFF;益处MOV MIN_11, #00HLJMP MIN_OFF ; 转到分显;-开、关定时ON_1:CJNE A, #0FBH, MIN_OFFK1: MOV A, #88HMOV R7, AMOV P0, AMOV P2, #0FFH;三组都显示开LCALL READLCALL DE250SMCJNE A, 01H, ON_1;去抖后比较CJNE A, #0FBH,

37、KEY2_12 ;按SB2转关LJMP OUT_A ;按SB3调出、处于开状态KEY2_12: CJNE A, #0FDH, K1k2: MOV A, #00H; 显示0关MOV R7, AMOV P0, AMOV P2, #0FFH;LCALL READLCALL DE250SMCJNE A, 01H, K2;去抖后比较CJNE A, #0FBH,KEY2_13 ;按SB2转开LJMP OUT_A ;SB3调出、处关状态KEY2_13:CJNE A, #0FDH, K2 ; 比较按了没LJMP K1 ; 按了SB2、转开OUT_A:POP 00HPOP BPOP ACCPOP PSWRETI

38、;_-读取按键程序READ:MOV A , P1;读取按键MOV R1, ALCALL DE10MSMOV A, P1RET;_-延时程序DE5SM:PUSH 01HMOV R1, #0FFHDJNZ R1,$POP 01HRETDE10MS: PUSH 04HPUSH 05HMOV R4, #0AHDl1: MOV R5, #0FFHdl2: DJNZ R5,$DJNZ R4,dl1POP 05HPOP 04HRETDE250SM:PUSH 02HPUSH 00HMOV R0, #0FFHDEL:MOV R2, #0FFHDJNZ R2,$DJNZ R0, DELPOP 00HPOP 02H

39、RET;_-调整时间进位程序MIN_AD:INC MINMOV R6, MINCJNE R6, #60, OU1MOV MIN , #00OU1: RETHOUR_AD:INC HOURMOV R6 , HOURCJNE R6 , #25 , OU2MOV HOUR ,#00OU2: RETDAY_AD:INC DAYMOV R6, DAYCJNE R6 , #32, OU3 ; 是否益出MOV DAY ,#01HOU3: RETMON_AD:INC MONMOV R6, MONCJNE R6, #13, OU4 ; 是否益出MOV MON ,#01HOU4: RETYEAR_AD:INC Y

40、EARMOV R6, YEARCJNE R6, #09, OU5;是否益出MOV YEAR ,#00HOU5: RETEND七 设计心得通过这次单片机课程设计,发现了自身所学知识存在许多的不足和问题,同时也学到了不少东西,提高了动手实践的能力.在整个设计过程中,从设计方案的确定,到具体电路的设计,最后到总体电路的联接构建工程量是比较大的,单靠个人能力,很多方面考虑不周,有的地方甚至毫无头绪,想不出具体方案,因此,绝对不能心急,不明白的地方和其它的同学共同讨论研究,毕竟群策群力办法要多些,碰上实在不能解决的问题,就去找辅导老师,通过老师的指点,把问题彻底搞清楚并加以掌握。作为初学者,尽管这次设计中遇到了许多难题,但也都一一得以解决。比如程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同学们的共同讨论,理清了思路,反而得心应手。虽然此次课程设计的作品有些简单,但是通过自己的努力最终把电路成功设计出来,个人觉得还是很有成就感的,更为重要的是实实在在学到了不少东西,使自己这方面的知识技能有了很大的进步。因此,我自己觉得这次课程设计对我而言算得上是一次全新的尝试,也是一个小小的成功,更是一次很好的锻炼,让我有了全方位的提高和进步。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!