资源描述
. . 摘 要 本次设计宠物自动喂食机的基本功能和设计思路,根据给定的规定动作顺 序,综合运用所学的基本理论、基本知识和相关的机械设计专业知识,完成宠 物自动喂食机理论方案的创新设计,并绘制必要的零部件图,其中包括装置的 原理方案构思和拟定;原理方案的实现、传动方案的设计,主要结构的设计简 图;设计计算与说明。 宠物自动喂食机设计要求:定时投放饲料,具有开机自检功能,可以设定 开启关闭时间的长短,适应不同宠物食量的需要,使用电动机驱动,其电源应 为安全电源。 宠物自动喂食机设计的主要技术关键问题为:饲料的定时投放,料口的开 合角度的确定,定时长短的设计,时间设定模块的组合。 关键字:单片机 设计计算 定时 机构 . . 摘 要 .I 1 主轴的设计 .1 1.1 主轴材料的选择: .1 1.2 主轴加工方法的选择: .1 2 主轴参数计算: .2 2.1 主轴尺寸的确定: .2 2.1.1 估取主轴的长度和直径 :.2 2.1.2 根据轴向定位的要求确定轴的各段长度 .2 2.2 轴上力的校合 .3 2.3 精确校核轴的疲劳强度 .3 2.3.1 判断危险截面 .3 2.3.2 截面 IV 右侧的 .3 3 行程开关旋转件的设计 .5 4 减速电动机的选择: .5 5 控制系统设计 .6 5.1 系统方案设计构成 .6 5.2 单片机的选用 .6 5.2.1 I/O 口线 .6 5.2.2 控制口线 .7 5.2.3 电源和时钟 .7 6 程序编写 .8 6.1 连线图: .8 6.2 程序设计: .8 7 设计心得 .28 参考文献 .29 . . 1 主轴的设计 在宠物自动喂食机上采用直接由电机带动主轴旋转,控制料口的开启和关 闭,由于电机选用的是具有自锁功能的直流减速电机,中间不采用减速装置, 简化结构设计,使系统的结构尽量的紧凑。所以直接用电机驱动主轴,省去中 间的减速环节。 1.1 主轴材料的选择: 主轴的选用 45 钢,45 钢的加工性能较为理想,材料的价格比较低廉,但 是这是一种中碳钢,淬火性能并不好, 45 号钢可以淬硬至 HRC4246。所以如 果需要表面硬度,又希望发挥 45 钢优越的机械性能,常将 45 钢表面渗碳淬火, 这样就能得到需要的表面硬度。调质处理后零件具有良好的综合机械性能,广 泛应用于各种重要的结构零件,特别是那些在交变负荷下工作的连杆、螺栓、 齿轮及轴类等。 1.2 主轴加工方法的选择: 由于主轴是间歇回转类零件,不需要长时间的连续运转,所以加工的精度 不需要很高,在普通的车床上既可以加工。又因为主轴的外形相对简单,不需 要经常的换刀,所以加工的时间教短。在加工主轴时,需要注意的是径向尺寸 的控制,不过通过合理的安排加工工艺可以解决。最后的端部的钻孔是需要控 制空之间的距离,所以在单件试制的时候可以不用专用的夹具,在大量生产的 时候需要安排专用的夹具,提高生产效率。尤其需要注意的是孔中心的确定, 因为是后续安装旋转件的,所以要控制中心的偏差。 . . 2 主轴参数计算: 2.1 主轴尺寸的确定: 由设计题目中要求可知:下料口的孔直径为 5mm.由机械设计手册表 6.2-3 取主轴的直径为 5mm; 2.1.1 估取主轴的长度和直径: 图 2-1 轴的长度和直径 1) 1-2 段轴用于安装联轴器,故取直径为 5mm。 2) 2-3 段安装活动挡片,直径 5mm。 3) 3-4 段分隔段,直径为 5mm。 4) 4-5 段为过度段,直径为 16mm。 5) 5-6 段安装旋转件,直径为 40mm。 2.1.2 根据轴向定位的要求确定轴的各段长度 1) 1-2 段为安装联轴器为 30mm 2) 2-3 段为安装活动挡片长度为 60mm。 3) 3-4 段为为分隔长度为 10mm 4) 4-5 段用于安装旋转件长度为 6mm。 5) 5-6 段安装旋转件长度为 10 . . 2.2 轴上力的校合 66 207.5 63.5 图 2-2 轴上力的校合 2.3 精确校核轴的疲劳强度 2.3.1 判断危险截面 由于截面 IV 处受的载荷较大,直径较小,所以判断为危险截面 2.3.2 截面 IV 右侧的 MPaWmb5.17 截面上的转切应力为 aT64.72PTmb 9.8.152 由于轴选用 40cr,调质处理,所以 , , 。MPaB73a361Ma2601 (2P355 表 15-1) 综合系数的计算 由 , 经直线插入,知道因轴肩而形成的045.2dr.dD . . 理论应力集中为 , ,23.81. (2P38 附表 3-2 经直线插入) 轴的材料敏感系数为 , ,5.0q7. (2P37 附图 3-1) 故有效应力集中系数为 .2)1(qk70 查得尺寸系数为 ,扭转尺寸系数为 ,. 76.0 (2P37 附图 3-2) (2P39 附图 3-3) 轴采用磨削加工,表面质量系数为 ,92. (2P40 附图 3-4) 轴表面未经强化处理,即 ,则综合系数值为1q93.21kK. a) 碳钢系数的确定 碳钢的特性系数取为 ,1.05. b) 安全系数的计算 轴的疲劳安全系数为 92.61maKS.41a SSc 5.6.2 故轴的选用安全。 . . 3 行程开关旋转件的设计 图 3-1 行程开关旋转件 由示意图可知,两旋转件在旋转时有一个 90 度角的角度差,通过行程开关 输出的信号的不同来分辨料口的开合处于什么样的状态,然后通过单片机系统 的处理,输出相应的信号,带动电机的旋转,来控制料口的开合。料口的状态 有完全关闭和完全打开两种状态, (1)两行程开关都输出信号时,料口处于关 闭状态, (2)两行程开关有一个闭合输出信号时,料口处于完全打开状态。 4 减速电动机的选择: 直流齿轮减速电动机由于其结构简单,性能可靠,故选择直流齿轮减速电 动机。 ZGA25R-310 式直流齿轮减速电动机产品数据: ZGA25R-310 使用电压:DC-6V 转速: 20rpm 外径:25mm 总长:51mm 伸出轴长:10mm 扭力:1-3KG . . 5 控制系统设计 5.1 系统方案设计构成 本系统包括机械部分和伺服电机控制两部分。根据所给的要求,拟用开环控制 结构设计方案,其开环系统结构原理如下: 图 5-1 开环系统结构原理图 具体原理:编写单片机指令,通过扫描键盘输入的数字记录需要转动的角度, 然后计算需要输出的脉冲,用软件的方法实现脉冲的输出,然后由光电耦合电 路减小外部的干扰,由功率放大电路实现功率的放大,然后接减速电动机,通 过联轴器把力矩传到主轴。带动料口的开关。 5.2 单片机的选用 本设计选用 ATS9S51 芯片,片内无 ROM 或者 EPROM,使用时必须配置外部 的程序存储器 EPROM。本设计选用了 2764 扩展其空间,8031 的引脚分 3 大功能: 5.2.1 I/O 口线 P0,P1,P2,P3 共 4 个八位口。 . . 5.2.2 控制口线 PSEN(片外取指控制)、ALE(地址锁存控制)、EA(片外存储器选择)、 RESET(复位控制)。 5.2.3 电源和时钟 ATS9S51 最小应用系统。ATS9S51 内部不带 ROM,需要外接 EPROM 作为外部 程序存储器。又因为 8031 在外接程序存储器或数据存储器时地址的低 8 位信息 和数据信息分时送出,故还需要采用一片 74LS373 来锁存低 8 为地址信息。这 样,一片 2764EPROM 和一片 74LS373 组成了一个最小的计算机应用系统。如图 MCS-51 的程序存储器空间与数据存储器空间是相互独立的。用户可最多扩 展到 64kb 的程序存储器几 64kb 的数据存储器,编址为 0000HFFFFH。片内 8kb 单元地址要求地址线 13 根(A0A12)。 它由 P0 和 P2.0P2.4 组成。地址锁存器的锁存信号为 ALE。程序存储器的 取地址消耗为 PSEN。由于程序存储器芯片只有一片,所以其片选端(31)直接 接地。 8031 芯片本身的连接 31 必须接地来表明选择外部存储器外,还必须有复 位和时钟电路。在此系统中有 P1、P3 口作为用户 I/O 口使用;74LS373 为地址 锁存器,他是一片三态输出 8D 触发器,当 OE=1 时三态门导通,输出线上为 8 为锁存器的状态。当 OE=1 时输出为高住抗转台。G 为锁存信号输入线,G=1 时 锁存器输出等于 D 端输入,G 输入短跳变将输入信息锁存到 8 为锁存器中。 当 8031 在访问外部程序存储器时,P2 口输入高 8 为地址:P6 口分时传送 底 8 为地址和指令字节。在 ALE 为高电平时,P0 口输出的地址有效,并由 ALE 的下降沿锁存到地址锁存器中,此时外部程序存储器宣统信号线 PSEN 出现低电 平,选通相应的外部。EPROM 存储器;相应的指令字节出现在 EPROM 的数据线 (O0O7)上,输入到 P0 口,CPU 将指令字节读入指令寄存器。 . . 6 程序编写 6.1 连线图: 图 6-1 连线图 6.2 程序设计: 单片机:AT89S51,F=6MHz,影响第 0 组的 R1,R2,R3,R4,R5,R6,R7, 20H,21H,30H,31H,32H,35H,36H,37H,38H,39H,3AH,3BH,3CH,3DH,3EH。 ORG 00H ;程序从这里开始 SJMP MAIN ;主程序 ORG 0BH ;定时器 0 中断入口 LJMP GOTO ORG 40H ;初始化 MAIN:MOV SP,#5FH ;设堆栈 MOV 30H,#12H ;存放小时,设初值 MOV 31H,#00H ;存放分钟,设初值 MOV 32H,#00H ;存放秒,设初值 MOV 35H,#06H ;第一个闹钟的小时位,设初值 MOV 36H,#30H ;第一个闹钟的分钟位,设初值 MOV 37H,#09H ;第二个闹钟的小时位,设初值 MOV 38H,#00H ;第二个闹钟的分钟位,设初值 MOV 39H,#06H ;存放年 MOV 3AH,#11H ;存放月 MOV 3BH,#05H ;存放日 . . MOV 3CH,#00H ;显示缓存,第 1,2 位 MOV 3DH,#00H ;显示缓存,第 3,4 位 MOV 3EH,#00H ;显示缓存,第 5,6 位 CLR 00H ;秒闪烁暂存 20H.0 SETB 01H ;闹钟 1 输出位 20H.1 SETB 02H ;闹钟 2 输出位 20H.2 CLR 03H ;按键 2 是否有效标致位 20H.3 CLR 04H ;按键 3 是否有效标致位 20H.4 CLR 05H ;按键 2 是否有效标致位 20H.5 CLR 06H ;闹钟开关标致 20H.6 0为开1为关 SETB 07H ;显示缓存,小数点 1 SETB 08H ;显示缓存,小数点 2 SETB 09H ;时钟加减标致位 0为小时,1为分钟 SETB 0AH ;闹钟 1 加减标致位0为小时,1为分钟 SETB 0BH ;闹钟 2 加减标致位0为小时,1为分钟 MOV R2,#2 ;设定时次数 MOV R3,#50 MOV R4,#25 MOV TMOD,#02H ;设定时器 0 工作方式为方式 2 MOV TH0,#56 ;设初始值 MOV TL0,#56 SETB TR0 ;启动定时器和中断 SETB ET0 SETB EA 主程序 MMAIN:JNB P2.0,MMAIN ;时钟主程序 MMAIN2:LCALL XIAN ;显示 LCALL CS ;按键秒清零 LCALL DAT ;是否显示年月日 LCALL DSQ ;定时器 LCALL T1T2 ;闹钟开关 CLR P2.6 ;按键有效 JNB P2.0,MENU1 . . SJMP MMAIN2 MENU1:JNB P2.0,$ ;时钟调整 SETB P1.0 MOV 3CH,30H ;将暂存的数转成字形 显示 30H MOV 3DH,31H ;将暂存的数转成字形 显示 31H MOV 3EH,#0ABH ;将暂存的数转成字形 显示 t CLR 07H ;显示小数点 1 SETB 08H ;不显示小数点 2 LCALL MXIAN ;显示菜单 1 LCALL ADDM1 ;按键加一分钟 LCALL ADDH1 ;按键加一小时 LCALL DECMH ;减一分钟/一小时 CLR P2.6 JNB P2.0,MENU2 SJMP MENU1 MENU2:JNB P2.0,$ ;日期调整 SETB P1.0 MOV 3CH,39H ;将暂存的数转成字形 显示 39H MOV 3DH,3AH ;将暂存的数转成字形 显示 3AH MOV 3EH,3BH ;将暂存的数转成字形 显示 3BH CLR 07H ;显示小数点 1 CLR 08H ;显示小数点 2 LCALL MXIAN ;显示菜单 2 LCALL DATEN ;年份+1 LCALL DATEM ;月份+1 LCALL DATED ;+1 日 CLR P2.6 JNB P2.0,MENU3 SJMP MENU2 MENU3:JNB P2.0,$ ;闹钟 1 SETB P1.0 MOV 3CH,35H ;将暂存的数转成字形 显示 35H . . MOV 3DH,36H ;将暂存的数转成字形 显示 36H MOV 3EH,#0A1H ;将暂存的数转成字形 显示 1 CLR 07H ;显示小数点 1 SETB 08H ;不显示小数点 2 LCALL MXIAN ;显示菜单 3 LCALL T1M1 ;闹钟 1 分钟+1 LCALL T1H1 ;闹钟 1 小时+1 LCALL DECT1 ;闹钟 1 减 1 小时/1 分钟 CLR P2.6 JNB P2.0,MENU4 SJMP MENU3 MENU4:JNB P2.0,$ ;闹钟 2 SETB P1.0 MOV 3CH,37H ;将暂存的数转成字形 显示 37H MOV 3DH,38H ;将暂存的数转成字形 显示 38H MOV 3EH,#0A2H ;将暂存的数转成字形 显示 2 CLR 07H ;显示小数点 1 SETB 08H ;不显示小数点 2 LCALL MXIAN ;显示菜单 4 LCALL T2M1 ;闹钟 2 分钟+1 LCALL T2H1 ;闹钟 2 小时+1 LCALL DECT2 ;闹钟减 2 小时/1 分钟 CLR P2.6 JNB P2.0,MENU5 SJMP MENU4 MENU5:LJMP MMAIN 中断处理 GOTO:PUSH A ;保护现场 DJNZ R3,GOTO1 MOV R3,#50 DJNZ R4,GOTO1 MOV R4,#25 CPL 00H ;20H.0 用于秒闪烁 . . DJNZ R2,GOTO1 MOV R2,#02H ;配合定时器定时一秒 MOV A,32H ;秒位是否为 59 秒,是:秒清零,分钟+1,判 断分钟 CJNE A,#59H,M1 ;否:跳转到秒+1 MOV 32H,#00H MOV A,31H ;分钟位同上 CJNE A,#59H,M2 MOV 31H,#00H MOV A,30H ; 小时位同上 CJNE A,#23H,M3 MOV 30H,#00H LCALL ADDD SJMP GOTO1 M1:ADD A,#01 ;秒+1 DA A MOV 32H,A SJMP GOTO1 M2:ADD A,#01 ;分钟+1 DA A MOV 31H,A SJMP GOTO1 M3:ADD A,#01 ; 小时+1 DA A MOV 30H,A SJMP GOTO1 GOTO1:POP A ;恢复现场 RETI 时钟显示专用子程序 XIAN:MOV A,32H ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示秒位 . . MOV P2,#0FEH LCALL DELAY MOV A,B LCALL ZH MOV P0,A MOV P2,#0FDH LCALL DELAY MOV A,31H ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示分钟位 MOV C,00H MOV P0.7,C ;秒闪烁 MOV P2,#0FBH LCALL DELAY SETB P0.7 ; 取消显示小数点 MOV A,B LCALL ZH MOV P0,A MOV P2,#0F7H LCALL DELAY MOV A,30H ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示小时位 CLR P0.7 ;显示小数点 MOV P2,#0EFH LCALL DELAY SETB P0.7 ;取消显示小数点 MOV A,B LCALL ZH . . MOV P0,A MOV P2,#0DFH LCALL DELAY RET DELAY:MOV R5,#0AH ;延时 1mS(6MHz) L1:MOV R6,#19H L2:DJNZ R6,L2 DJNZ R5,L1 RET ZH:MOV DPTR,#TAB ;字形转换 MOVC A,A+DPTR MOV P2,#0FFH ;消影 RET TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形 09 DB 0FFH,87H,0C8H,0A1H,86H,8EH ;字形 A= ,B=t,C=n,F=F,-hsz TAB2:DB 30H,31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H ; 每个月的天数,平年 TAB3:DB 30H,31H,29H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H ; 每个月的天数,闰年 显示子程序结束 菜单显示子程序 MXIAN:MOV A,3EH ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示 5,6 位 MOV P2,#0FEH LCALL DELAY MOV A,B LCALL ZH MOV P0,A . . MOV P2,#0FDH LCALL DELAY MOV A,3DH ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示 3,4 位 MOV C,08H MOV P0.7,C ;是否显示小数点 2 MOV P2,#0FBH LCALL DELAY SETB P0.7 ; 取消显示小数点 MOV A,B LCALL ZH MOV P0,A MOV P2,#0F7H LCALL DELAY MOV A,3CH ;将暂存的数转成字形 SWAP A MOV B,#10H DIV AB LCALL ZH MOV P0,A ;LED 显示 1,2 位 MOV C,07H MOV P0.7,C ;是否显示小数点 1 MOV P2,#0EFH LCALL DELAY SETB P0.7 ; 取消显示小数点 MOV A,B LCALL ZH MOV P0,A MOV P2,#0DFH LCALL DELAY RET . . 按键子程序开始 CS:MOV P0,#0FFH ;秒清零 MOV P2,#10111111B JB P2.1,CS1 MOV 32H,#00H CS1:SETB P2.6 RET - ADDM1:MOV P0,#0FFH ;加一分钟 MOV P2,#10111111B JNB P2.2,ADDM11 CLR 03H ;按键 2 是否有效 ADDM11:JB 03H,ADDM12 JB P2.2,ADDM12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.2,ADDM12 SETB 03H ;按键 2 是否有效 SETB 09H ;时钟加减标致位 MOV A,31H ;分钟 +1 CJNE A,#59H,M21 MOV 31H,#00H SJMP ADDM12 M21:ADD A,#01 DA A MOV 31H,A SJMP ADDM12 ADDM12:SETB P2.6 RET - ADDH1:MOV P0,#0FFH ;加一小时 MOV P2,#10111111B JNB P2.3,ADDH11 . . CLR 04H ;按键 3 是否有效 ADDH11:JB 04H,ADDH12 JB P2.3,ADDH12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.3,ADDH12 SETB 04H ;按键 3 是否有效 CLR 09H ;时钟加减标致位 MOV A,30H ; 小时 +1 CJNE A,#23H,H31 MOV 30H,#00H SJMP ADDH12 H31:ADD A,#01 DA A MOV 30H,A ADDH12:SETB P2.6 RET - DECMH:MOV P0,#0FFH ;减一分钟/一小时 MOV P2,#10111111B JNB P2.1,DECM11 CLR 05H ;按键 1 是否有效 DECM11:JB 05H,DECM12 JB P2.1,DECM12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.1,DECM12 SETB 05H ;按键 1 是否有效 JNB 09H,DECMH3 MOV A,31H ;分钟 -1 CJNE A,#00H,DECMH4 MOV 31H,#59H SJMP DECM12 . . DECMH4:LCALL DECA MOV 31H,A SJMP DECM12 DECMH3:MOV A,30H ;小时 -1 CJNE A,#00H,DECMH5 MOV 30H,#23H SJMP DECM12 DECMH5:LCALL DECA MOV 30H,A DECM12:SETB P2.6 RET 十进制减法子程序 DECA:CJNE A,#10H,DECA1 ;运算范围为 150 MOV A,#09H RET DECA1:CJNE A,#20H,DECA2 MOV A,#19H RET DECA2:CJNE A,#30H,DECA3 MOV A,#29H RET DECA3:CJNE A,#40H,DECA4 MOV A,#39H RET DECA4:CJNE A,#50H,DECA5 MOV A,#49H RET DECA5:DEC A RET 闹钟按键子程序 T1M1:MOV P0,#0FFH ;闹钟 1 加一分钟 . . MOV P2,#10111111B JNB P2.2,T1M11 CLR 03H ;按键 2 是否有效 T1M11:JB 03H,T1M12 JB P2.2,T1M12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.2,T1M12 SETB 03H ;按键 2 是否有效 SETB 0AH ;时钟加减标致位 MOV A,36H ;分钟 +1 CJNE A,#59H,T1M13 MOV 36H,#00H SJMP T1M12 T1M13:ADD A,#01 DA A MOV 36H,A T1M12:SETB P2.6 RET - T1H1:MOV P0,#0FFH ;闹钟 1 加一小时 MOV P2,#10111111B JNB P2.3,T1H11 CLR 04H ;按键 3 是否有效 T1H11:JB 04H,T1H12 JB P2.3,T1H12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.3,T1H12 SETB 04H ;按键 3 是否有效 CLR 0AH ;时钟加减标致位 MOV A,35H ;小时 +1 CJNE A,#23H,T1H13 . . MOV 35H,#00H SJMP T1H12 T1H13:ADD A,#01 DA A MOV 35H,A T1H12:SETB P2.6 RET - T2M1:MOV P0,#0FFH ;闹钟 2 加一分钟 MOV P2,#10111111B JNB P2.2,T2M11 CLR 03H ;按键 2 是否有效 T2M11:JB 03H,T2M12 JB P2.2,T2M12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.2,T2M12 SETB 03H ;按键 2 是否有效 SETB 0BH ;时钟加减标致位 MOV A,38H ;分钟 +1 CJNE A,#59H,T2M13 MOV 38H,#00H SJMP T2M12 T2M13:ADD A,#01 DA A MOV 38H,A T2M12:SETB P2.6 RET - T2H1:MOV P0,#0FFH ;闹钟 2 加一小时 MOV P2,#10111111B JNB P2.3,T2H11 CLR 04H ;按键 3 是否有效 T2H11:JB 04H,T2H12 . . JB P2.3,T2H12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.3,T2H12 SETB 04H ;按键 3 是否有效 CLR 0BH ;时钟加减标致位 MOV A,37H ;小时 +1 CJNE A,#23H,T2H13 MOV 37H,#00H SJMP T2H12 T2H13:ADD A,#01 DA A MOV 37H,A T2H12:SETB P2.6 RET -闹钟 1- DECT1:MOV P0,#0FFH ;减一分钟/一小时 MOV P2,#10111111B JNB P2.1,DECT11 CLR 05H ;按键 1 是否有效 DECT11:JB 05H,DECT12 JB P2.1,DECT12 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.1,DECT12 SETB 05H ;按键 1 是否有效 JNB 0AH,DECT13 MOV A,36H ;分钟 -1 CJNE A,#00H,DECT14 MOV 36H,#59H SJMP DECT12 DECT14:LCALL DECA MOV 36H,A . . SJMP DECT12 DECT13:MOV A,35H ;小时 -1 CJNE A,#00H,DECT15 MOV 35H,#23H SJMP DECT12 DECT15:LCALL DECA MOV 35H,A DECT12:SETB P2.6 RET - 闹钟 2- DECT2:MOV P0,#0FFH ;减一分钟/一小时 MOV P2,#10111111B JNB P2.1,DECT21 CLR 05H ;按键 1 是否有效 DECT21:JB 05H,DECT22 JB P2.1,DECT22 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.1,DECT22 SETB 05H ;按键 1 是否有效 JNB 0BH,DECT23 MOV A,38H ;分钟 -1 CJNE A,#00H,DECT24 MOV 38H,#59H SJMP DECT22 DECT24:LCALL DECA MOV 38H,A SJMP DECT22 DECT23:MOV A,37H ;小时 -1 CJNE A,#00H,DECT25 MOV 37H,#23H . . SJMP DECT22 DECT25:LCALL DECA MOV 37H,A DECT22:SETB P2.6 RET -闹钟开关- T1T2:MOV P0,#0FFH ;闹钟开关 MOV P2,#10111111B JNB P2.2,T1T21 CLR 05H ;按键 2 是否有效 T1T21:JB 05H,T1T22 JB P2.2,T1T22 SETB 05H ;按键 2 是否有效 CPL 06H ;闹钟开关 JB 06H,T1T23 MOV R1,#2 MOV 3CH,#0CH ;将暂存的数转成字形 显示0N MOV 3DH,#0AAH ;将暂存的数转成字形 显示 MOV 3EH,#0AAH ;将暂存的数转成字形 显示 SETB 07H ;不显示小数点 1 SETB 08H ;不显示小数点 2 T1DAT3:MOV R7,#100 T1DAT2:LCALL MXIAN DJNZ R7,T1DAT2 DJNZ R1,T1DAT3 SJMP T1T22 T1T23:MOV R1,#2 MOV 3CH,#0FH ;将暂存的数转成字形 显示OF MOV 3DH,#0FAH ;将暂存的数转成字形 显示F MOV 3EH,#0AAH ;将暂存的数转成字形 显示 SETB 07H ;不显示小数点 1 SETB 08H ;不显示小数点 2 T2DAT3:MOV R7,#100 T2DAT2:LCALL MXIAN DJNZ R7,T2DAT2 . . DJNZ R1,T2DAT3 T1T22:SETB P2.6 RET 显示年月日按键子程序 DAT:MOV P0,#0FFH MOV P2,#10111111B JB P2.3,DAT1 MOV R1,#5 MOV 3CH,39H ;将暂存的数转成字形 显示 39H MOV 3DH,3AH ;将暂存的数转成字形 显示 3AH MOV 3EH,3BH ;将暂存的数转成字形 显示 3BH CLR 07H ;显示小数点 1 CLR 08H ;显示小数点 2 DAT3:MOV R7,#100 DAT2:LCALL MXIAN DJNZ R7,DAT2 DJNZ R1,DAT3 DAT1:SETB P2.6 RET - DATEN:MOV P0,#0FFH ;年份加 1 MOV P2,#10111111B JNB P2.3,DATEN1 CLR 04H ;按键 3 是否有效 DATEN1:JB 04H,DATEN2 JB P2.3,DATEN2 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.3,DATEN2 SETB 04H ;按键 3 是否有效 ADDN:MOV A,39H ;年份 +1 CJNE A,#50H,DATEN3 MOV 39H,#01H . . SJMP DATEN2 DATEN3:ADD A,#01 DA A MOV 39H,A DATEN2:SETB P2.6 RET - DATEM:MOV P0,#0FFH ;月份加 1 MOV P2,#10111111B JNB P2.2,DATEM1 CLR 03H ;按键 2 是否有效 DATEM1:JB 03H,DATEM2 JB P2.2,DATEM2 LCALL MXIAN ;这四个为去抖动 MOV P0,#0FFH MOV P2,#10111111B JB P2.2,DATEM2 SETB 03H ;按键 3 是否有效 ADDM:MOV A,3AH ;月份 +1 CJNE A,#12H,DATEM3 MOV 3AH,#01H LCALL ADDN ;年份+1 SJMP DATEM2 DATEM3:ADD A,#01 DA A MOV 3AH,A DATEM2:SETB P2.6 RET -
展开阅读全文