豆浆机答辩用程序.docx
- 文档编号:9818139
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:26
- 大小:22.27KB
豆浆机答辩用程序.docx
《豆浆机答辩用程序.docx》由会员分享,可在线阅读,更多相关《豆浆机答辩用程序.docx(26页珍藏版)》请在冰豆网上搜索。
豆浆机答辩用程序
ORG0000H;复位入口
LJMPMAIN;转往主程序
ORG001BH;定时器1中断服务子程序入口
LJMPIT1P;定时中断:
进行实时钟计时
;************************主程序***************************************
ORG0030H;主程序
MAIN:
MOVSP,#6FH;总初始化,设定栈底指针
LCALLD40MS;稍加延时(40mS),以待各芯片均退出复位状态
MOVDPTR,#0FEFFH;对8255A(U3)接口芯片初始化
MOVA,#89H;设定为A输出(驱动字段)、B口输出(驱动字位),C口输入
MOVX@DPTR,A;写入方式控制字
MOVDPTR,#0FEFCH;DPTR指向U3-A口
MOVA,#0FFH;置八段均不亮的字段码(8255A初始化后输出寄存器全‘0')
MOVX@DPTR,A;输出,关数码显示器(段输出口初始驱动全为‘1'无效)
MOVDPTR,#0FDFFH;对8255A(U5)接口芯片初始化
MOVA,#8BH;设定为A口输出(驱L8~15),B口输入(按钮PB0~7),C口输入(开关SW0~7)
MOVX@DPTR,A;写入方式控制字
MOVDPTR,#0FDFCH;DPTR指向U5-A口
MOVA,#0FFH;置八位输出均为‘1'无效
MOVX@DPTR,A;输出,令L8-15初始不亮
CLRP3.2;蜂鸣器响
LCALLD1S;延时1S
SETBP3.2;关蜂鸣器
MOVP1,#00H;P1口输出全‘0',所驱动的L0~L7指示灯全亮
LCALLD1S;延时1S
MOVP1,#0FFH;熄L0~L7指示灯
MOV30H,#10H;30H-37H为显示缓冲单元,初始值令显示‘-8951-’
MOV31H,#12H;
MOV32H,#01H
MOV33H,#05H
MOV34H,#09H
MOV35H,#08H
MOV36H,#12H
MOV37H,#10H
MOV38H,#00H;38H单元为实时钟200uS计数单元,清0
MOV39H,#00H;39H单元为10mS计数单元,清0
MOV3AH,#45H;秒单元初值
MOV3BH,#59H;分单元初值
MOV3CH,#08H;时单元初值,时钟初值08:
59:
45
INIT:
SETBEA;开中断总允许
MOVTMOD,#26H;初始化T1为定时方式2,T0为计数方式2。
MOVTL0,#0FFH;置T0计数初值。
00H-FFH=1,每计数1次请求中断
MOVTH0,#0FFH
MOVTL1,#00H;置T1计数初值。
00H-48H=C8H=184,184×TM≈200uS(199.6527778μS)
MOVTH1,#00H;即每约200uS请求中断。
(TM=12×1/11.0592MHZ=1.085069444μS)
SETBET1;开T1中断允许
SETBTR1;启动T1定时工作
;----------------------工作显示初始化
MOV20H,#00H;始化20H,作为进程码
MOV40H,#25H;温度
MOV41H,#10H;存倒秒单元
MOV42H,#00H;倒计分钟单元
MOV43H,#00H;工步号单元
MOV45H,#00H;与39H单元一样,10MS计数单元
MOV46H,#00H;AD缓冲单元
MOV47H,#00H;打浆/加热的循环次数单元
MOV48H,#0;秒计数单元,每一秒给该单元加1
MOV49H,#100;蜂鸣器用计数单元
MOV50H,#6;报警用响3声后置初始值单元
MOV51H,#20;主流程10MS,延时时间大约=20*30*10ms=60s
MOV52H,#30;
MOV53H,#100;秒计数单元,每次给这用于秒闪用
MOV21H,#0FFH;L0~L7灯亮缓冲单元
MOV22H,#00000000B;0秒表,1数码管切换,2倒计时开关,34高/低水标志位,5计时单元开关,6__,7豆浆果汁选择位
MOV23H,#00000000B;0秒标,1报警开启开关,2_,3,1分钟开关位
;***************;主工作流程***********************
LOOP:
LCALLXDPB;pb消抖
LCALLSWITCH;调用电平开关SW0~7的检测且对应控制L8~L15灯子程序
LCALLKEY;调用键盘扫描子程序(扫描到按键压下时在左第3位显示键号)
LCALLK0;k10,k15
LCALLCZ;调用显示内容送显缓子程序(拆字)(将时分秒送右6位显示缓冲单元)
LCALLTIME_DOWN;倒计时模块
LCALLADSUB;调用A/D子程序(采集ADC0809的AN1输入电压的A/D数据送左2位显示)
LCALLBJ;报警模块
LCALLDISP;调用显示更新子程序(动态驱动8位数码显示器一遍,约8mS)
LCALLZJ;煮浆
LCALLTPB;调用独立按键PB0~7的检测且对应控制L0~L7灯子程序
LCALLL0_L7;灯显示
LCALLWORK;主工作流程
LCALLDOWN;软件倒计时
LCALLTIME_1F
SJMPLOOP;反复循环主流程
;***********************pb滚存*********************************************
XDPB:
MOV2FH,2EH;2F单元存旧值
MOV2DH,2CH
MOV2CH,2BH
MOV2BH,2AH
MOV2AH,29H
MOVDPTR,#0FDFDH;把读取PB按键值
MOVXA,@DPTR
MOV29H,A
CJNEA,2AH,XDR
CJNEA,2BH,XDR
CJNEA,2CH,XDR
CJNEA,2DH,XDR
MOV2EH,A;2EH单元存新值
XDR:
RET
;**********************豆浆果汁选择单元*************************************TPB:
MOVA,20H
CJNEA,#00H,TPB_RET;在00H进程下进行选择
JNB2FH.0,TPB3;判断PB0是否按下
JB2EH.0,TPB3
CPL22H.7;每次按下取反一次22H.7
JNB22H.7,TPB2;判断当前22H.7单元为0(果汁)还是为1(豆浆)
TPB1:
CLR21H.0;豆浆,L0亮,
SETB21H.1;L1灭
SETB22H.7
RET
TPB2:
SETB21H.0;果汁,L1亮,
CLR21H.1;L0灭
CLR22H.7
TPB_RET:
RET
TPB3:
JNB2FH.1,TPB_R;;判断PB1是否按下
JB2EH.1,TPB_R
SETB22H.1;开启显示切换
JNB22H.7,TPB4;判断当前是豆浆还是果汁模式
MOV20H,#10H;豆浆
MOV43H,#01;工部号1
CLR21H.2;开启加热
RET
TPB4:
MOV20H,#50H;果汁,宋50H进程码
MOV43H,#0AAH;送AA显示
TPB_R:
RET
;***********************拆字模块*********************************************
CZ:
JB22H.1,C_Z;通过判断22H.1单元如果为0,显示时钟,1,显示工作
MOVR0,#3AH;显示时钟内容送显缓子程序(拆字)。
置时钟数据单元首地址(秒单元)
MOVR1,#30H;置显示缓冲单元首地址(对应于最右显示位)
SJMPCZ1
C_Z:
MOVR0,#40H;显示非时钟状态
MOVR1,#30H;
CZ1:
MOVA,@R0;取当前数据单元BCD码
ANLA,#0FH;保留低4位(个位)
MOV@R1,A;送显缓当前个位单元
INCR1;指向显缓当前十位单元
MOVA,@R0;再取当前数据单元BCD码
ANLA,#0F0H;保留高4位(十位)
SWAPA;交换到低4位
MOV@R1,A;送显缓当前十位单元
JB22H.1,CZ2;拆时钟显示?
工步号-倒计时-温?
MOVA,R1
ADDA,#02
MOVR1,A
INCR0
MOV32H,#10H
MOV35H,#10H
CJNER0,#3DH,CZ1
SJMPCZ_RET
CZ2:
INCR1;指向显缓下一个个位单元
INCR0;指向下一个时钟数据单元
MOV35H,#12H
CJNER1,#38H,CZ1;未完继续
CZ_RET:
RET;子程序返回
;***********************数码管送显示单元*********************************************
DISP:
MOVR0,#30H;显示更新子程序。
置显示缓冲单元首地址(对应最右位)
MOVR3,#01H;位码初值(从最右位起)
MOVA,R3
DISP1:
MOVDPTR,#0FEFDH;8255-B口(位码输出口)
MOVX@DPTR,A;输出当前字位码
MOVA,@R0;取当前位显示数据码
ADDA,#TAB-NEXTPC;加TAB与NEXTPC差址
MOVCA,@A+PC;查表得相应字段码
NEXTPC:
MOVDPTR,#0FEFCH;8255-A口(字段码输出口)
MOVX@DPTR,A;输出字段码
LCALLD1MS;保持显示1毫秒S
MOVA,#0FFH;消串显模块
MOVDPTR,#0FEFCH
MOVX@DPTR,A
INCR0;指向下一显示缓冲单元
MOVA,R3;取出原来的位码
JBACC.7,DISP2;判断若已显示到最左位则结束
RLA;未完,字位码左移1位
MOVR3,A;回存新的位码
LJMPDISP1;转下一位的显示驱动
DISP2:
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H;字段码表。
"0"~"6"
DB0F8H,80H,90H,88H,83H,0C6H,0A1H;"7"~"9","A"~"D"
DB86H,8EH,0BFH,00H,0FFH;"E","F","-",全亮,空格
;***********************L0~L7灯*********************************************
L0_L7:
MOVA,21H
MOVP1,21H
RET
;***********************1S定时单元,用于自检用********************************
D1MS:
MOVR7,#115;软件延时1mS子程序
D1MS1:
NOP;(1+8*115+2)*12/11059.2KHz=1.0015mS
NOP
NOP
NOP
NOP
NOP
DJNZR7,D1MS1
RET
;***********************键盘子模块********************************
KEY:
JB22H.1,KEY_RET
MOV65H,64H
MOVDPTR,#0FEFFH;键盘扫描子程序(反转法)。
MOVA,#81H
MOVX@DPTR,A;C口先初始化为高4位输出方式驱键行线、低4位输入方式键列线
MOVA,#0FFH;关串显
MOVDPTR,#0FEFCH
MOVX@DPTR,A
MOVDPTR,#0FEFEH;DPTR指向C口
MOVA,#00H
MOVX@DPTR,A;键盘行线(高4位)输出驱动全'0'
MOVXA,@DPTR;输入键盘列线电平(低4位)存60H单元
MOV60H,A
MOVDPTR,#0FEFFH
MOVA,#88H
MOVX@DPTR,A;C口改初始化为高4位输入驱键行线、低4位输出驱键列线
MOVA,#0FFH;关串显
MOVDPTR,#0FEFCH
MOVX@DPTR,A
MOVDPTR,#0FEFEH;DPTR指向C口
MOVA,#00H
MOVX@DPTR,A;键盘列线(低4位)输出驱动全'0'
MOVXA,@DPTR;输入键盘行线电平(高4位)在A中
ANL60H,#0FH;保留列线电平值所在的低4位
ANLA,#0F0H;保留行线电平值所在的高4位
ORL60H,A;将列线电平值、行线电平值组合成8位行列码于60H单元中
MOV61H,#00H;键号值从00H开始
MOVR5,#10H;设定最多进行16次的键码查表
MOVDPTR,#KEY_N;DPTR指向键码表首地址
KY:
MOVA,61H;置当前键号于A中
MOVCA,@A+DPTR;查表读取键码表中当前键号对应位置的键码
CJNEA,60H,NK;与8位行列码比较,不同则转NK查下一个
SJMPKN;相同,表明查到了当前按下的键号,转KN进行键功能处理
KEY_N:
DB0EEH,0EDH,0EBH,0E7H;键码表。
K0,K1,K2,K3键码
DB0DEH,0DDH,0DBH,0D7H;K4,K5,K6,K7键码
DB0BEH,0BDH,0BBH,0B7H;K8,K9,K10,K11键码
DB7EH,7DH,7BH,77H;K12,K13,K14,K15键码
NK:
INC61H;键号值加1
DJNZR5,KY;未查完键值表则继续
KN:
MOV64H,61H
KEY_RET:
RET
K0:
JB22H.1,KEY_RET;K0调校
MOVA,65H
CJNEA,#10H,K1
MOVA,64H
CJNEA,#00H,K1
MOV39H,#00H
MOV3AH,#00H
MOV38H,#00H
MOVA,3CH
ADDA,#01H
DAA
MOV3CH,A
CJNEA,#24H,K_RET
MOV3CH,#00H
RET
K1:
MOVA,65H;K1调校
CJNEA,#10H,K2
MOVA,64H
CJNEA,#01H,K2
MOV39H,#00H
MOV3AH,#00H
MOV38H,#00H
MOVA,3CH
ADDA,#99H
DAA
MOV3CH,A
CJNEA,#99H,K_RET
MOV3CH,#23H
RET
K2:
MOVA,65H;K2调校
CJNEA,#10H,K3
MOVA,64H
CJNEA,#02H,K3
MOV39H,#00H
MOV3AH,#00H
MOV38H,#00H
MOVA,3BH
ADDA,#01H
DAA
MOV3BH,A
CJNEA,#60H,K_RET
MOV3BH,#00H
RET
K3:
MOVA,65H;K3调校
CJNEA,#10H,K_RET
MOVA,64H
CJNEA,#03H,K_RET
MOV39H,#00H
MOV3AH,#00H
MOV38H,#00H
MOVA,3BH
ADDA,#99H
DAA
MOV3BH,A
CJNEA,#99H,K_RET
MOV3BH,#59H
K_RET:
RET
;********************AD转换单元*************************************
ADSUB:
MOVA,20H
CJNEA,#00H,ADSUB1
SJMPADSUB_RET
MOVA,46H
CJNEA,#30,ADSUB_RET
ADSUB1:
MOVDPTR,#0FBF8H;A/D子程序,IN0。
MOVXA,@DPTR;读取A/D转换结果的8位二进制数字值
DAA
MOVB,A
CLRC
CJNEA,#99H,A2
A1:
MOV40H,B
SJMPA4
A2:
JCA1
MOV40H,#0AAH
A4:
MOVX@DPTR,A;启动对IN0输入模拟电压信号的A/D转换。
A值与本次操作无关(地址低3位选择通道)
MOV46H,#0
ADSUB_RET:
RET
;***************超水位/低水位模块***********************
SWITCH:
MOVDPTR,#0FDFEH;电平开关SW0~7检测且控制L8~L15子程序
MOVXA,@DPTR;输入SW0~7电平
SWITCH1:
JNBACC.0,SWITCH2;当高水位(SW0=1)时
JBACC.1,SWITCH2
SETB22H.3;开启高水位标志位
CLR22H.4
RET
SWITCH2:
JBACC.0,SWITCH3;当低水位(SW1=1)时
JNBACC.1,SWITCH3
SETB22H.4
CLR22H.3;
SETB21H.2;开启高水位标志位
SETB23H.1
RET
SWITCH3:
CLR22H.3;正常水位
CLR22H.4
SETB21H.3
SETB21H.4
RET
;***********报警模块****************************
BJ:
JNB23H.1,BJ_RET
MOV32H,#0EH
MOV33H,#0EH
MOV34H,#0EH
DJNZ49H,BJ_RET
CPLP3.2;蜂鸣器响
CPL21H.3
MOV49H,#100
SETB21H.2
DJNZ50H,BJ_RET
SETBP3.2
LJMPINIT
BJ_RET:
RET
;***************时钟***********************
IT1P:
PUSHACC;定时器1服务子程序。
保护现场
PUSHPSW
INC38H;每256uS加1
MOVA,38H
CJNEA,#36,DONE;满10mS?
MOV38H,#0;200uS计数单元清0
MOVA,45H;秒标志位单元
ADDA,#1
DAA
MOV45H,A
CJNEA,#00H,I1
MOV45H,#0;
SETB22H.0;
I1:
MOVA,44H
ADDA,#1
DAA
MOV44H,A
CJNEA,#00H,I2
MOV44H,#0;
SETB23H.0;
I2:
MOVA,39H
ADDA,#1
DAA
MOV39H,A
CJNEA,#00H,DONE;满1S?
MOV39H,#0;10mS计数单元清0
MOVA,3AH;秒单元(按BCD码)加1
ADDA,#1
DAA
MOV3AH,A
CJNEA,#60H,DONE;满1分钟?
MOV3AH,#0;秒单元清零
MOVA,3BH;分钟单元(按BCD码)加1
ADDA,#1
DAA
MOV3BH,A
CJNEA,#60H,DONE;满1小时?
MOV3BH,#0;分钟单元清零
MOVA,3CH;小时单元(按BCD码)加1
ADDA,#1
DAA
MOV3CH,A
CJNEA,#24H,DONE;满24小时?
MOV3CH,#0;小时单元清零
DONE:
POPPSW;恢复现场
POPACC
RETI;中断返回
;***********************************************
;***************主工作模块*********************
;***********************************************
WORK:
;*************预加热****************************
MOVA,20H
WORK1:
CJNEA,#10H,WORK2;10进程
CLR21H.2;开启加热
MOVA,40H;40H单元如果大于等于35跳转到WORK1_OFF
CJNEA,#35H,WORK1_1;-------------
SJMPWORK1_OFF
WORK1_1:
JNCWORK1_OFF
RET
WORK1_OFF:
MOV43H,#02H;超过35度,工不好为2
MOV42H,#00;送25秒倒计时
MOV41H,#25H
SETB22H.2;开启倒计时
MOV45H,#0;1/100秒单元清零,震步用
CLR22H.0;清除秒标志位
MOV20H,#11H
RET
;*************预打浆****************************
WORK2:
MOVA,20H
CJNEA,#11H,WORK3
SETB21H.2
JNB22H.2,WORK2_2;--------------
RET
WORK2_2:
MOV43H,#03H
MOV20H,#12H
RET
;*************加热****************************
WORK3:
MOVA,20H
CJNEA,#12H,WORK4
CLR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 豆浆机 答辩 程序