义隆单片机EM78P153使用 - 图文(7)

2019-08-30 18:31

EM78P153S使用总结 BS SB3_FLAG,0 JMP $+3

BC SB3_FLAG,0 BC SB3_FLAG,1 MOV A,@0X00 ;如果是第8次就将次数清零 MOV NUM,A MOV A,NUM ;将NUM1的值还原 MOV NUM1,A JMP LP2 ;跳转到按键2的函数里面去执行 ;****************SB2按键具体的功能实现********************** ;**********第2次********* FUN_B2: MOV A,NUM ;将NUM2的值还原 MOV NUM2,A CLR ISR ; 清除中断标志 ENI ;开中断 BC TCC_FLAG,0 ;清零 MOV A,@40 ;40*25=1s实际的测试发现 MOV T_NUM,A LOOPB1: CALL SB12 ;如果使用的是下面那个语句则会出现P67端口为中等亮度 ;BS PORT6,7 ;熄灭HL1/2/3 MOV A,R2 ;保存当前的地址 JMP SCAN_TCC ;延时结束检测按键函数 CALL SB12 ;BC PORT6,7 ;点亮HL1/2/3 MOV A,R2 ;保存当前的地址 JMP SCAN_TCC ;延时结束检测按键函数 JMP LOOPB1 ;循环执行

;****************TCC定时结束的按键检测函数********************* SCAN_SB: MOV A,TEMP_6 ;恢复端口6的值 MOV PORT6,A MOV A,TEMP_5 ;恢复端口5的值 MOV PORT5,A BC TCC_FLAG,0 ;清零

MOV A,TEMP_R2 ;恢复返回的地址 ADD A,@1 ;将保存的地址加1 MOV R2,A ;跳转到保存的地址,此处是为了避免使用堆栈

SCAN_TCC: MOV TEMP_R2,A ;将返回的地址保存在变量中 MOV A,PORT6 ;保存端口6的值 MOV TEMP_6,A MOV A,PORT5 ;保存端口5的值 MOV TEMP_5,A JMP SCAN_HL ;弱光函数 SCAN_HL: JBC TCC_FLAG,0 ;延时的时间在调用前设定好 JMP SCAN_SB ;如果定时时间到了,就跳到按键检测子函数 ;JBS HL_LED,0 ;判断是强光还是弱光? MOV A,PWM_FLAG SUB A,@2 ;占空比为30% JBS STATUS,0 ;借位了吗

29

EM78P153S使用总结 JMP $+2 ;为0借位了 JMP BK_56 ;为1没有借位 MOV A,NUM2 ;保存NUM2的值 MOV NUM3,A INC NUM2 ;判断是否为初始化之后的0次数 DJZ NUM2 ;为第0次吗? JMP $+2 ;不是 JMP L_SB2 ;是的 DJZ NUM2 ;为第1次吗? JMP $+2 ;不是 JMP H_SB2 ;是的 DJZ NUM2 ;为第2次吗? JMP $+4 ;不是 JBC PORT6,7 ;是的,则读取P67口的状态 JMP L_SB2 ;端口P67为高电平 JMP H_SB2 ;端口67为低电平 DJZ NUM2 ;为第3次吗? JMP $+2 ;不是 JMP L_SB2 ;是的 L_SB2: MOV A,@0XFF MOV PORT6,A JMP $+3 H_SB2: MOV A,@0X7F ;点亮HL123 MOV PORT6,A MOV A,@0X0F MOV PORT5,A JMP BK_SCAN BK_56: MOV A,TEMP_6 ;恢复端口6的值 MOV PORT6,A MOV A,TEMP_5 ;恢复端口5的值 MOV PORT5,A BK_SCAN: INC PWM_FLAG MOV A,PWM_FLAG ;判断PWM是否大于10 SUB A,@10 JBS STATUS,0 ;借位了吗 CLR PWM_FLAG ;大于10就清零 MOV A,NUM3 ;还原NUM2的值 MOV NUM2,A JBS PORT6,3 ;按键SB4按下了吗 JMP SB4_WORK ;有按键,跳转到SB4的处理程序 JBS PORT6,0 ;按键SB1按下了吗 JMP SB1_WORK ;有按键,跳转到SB1的处理程序 JBS PORT6,1 ;按键SB2按下了吗 JMP SB2_WORK ;有按键,跳转到SB2的处理程序 JMP SCAN_HL

;****************实现宏观上面按键1、2的独立函数********************* SB12: DJZ NUM3 ;S2是第1次按下吗 JMP $+3 ;不是跳转到下一条 BC PORT6,7 ;HL123常亮

30

EM78P153S使用总结 JMP HY ;跳转到还原NUM3 DJZ NUM3 ;S2是第2次按下吗 JMP $+4 ;不是跳转到下一条 JBS HL_FLAG,0 ;为0表示亮,为1表示灭 JMP HL_FLAG0 ;为0 JMP HL_FLAG1 ;为1 ;S2是第3/0次按下 BS PORT6,7 ;灭HL123 JMP HY ;跳转到还原NUM3 HL_FLAG0: BC PORT6,7 ;点亮HL123 BS HL_FLAG,0 ;置1 JMP HY ;跳转到还原NUM3 HL_FLAG1: BS PORT6,7 ;灭HL123 BC HL_FLAG,0 ;清零 HY: MOV A,NUM2 ;将NUM3值还原 MOV NUM3,A RET

;****************SB2按键次数扫描函数********************** SB2_WORK: CALL S_NUM ;调用按键消抖函数 JBC PORT6,1 ;按键SB2按下了吗 ;JMP Sb_Scan ;无按键就跳回主函数继续检测 JMP LP22 ;此处如果没有按键按下,直接推出会出现无法回到之前的状态,所以改为跳转到LP22

JBS PORT6,1 JMP $-1 ;此处是等待按键松开 BS COUNT2,0 ;此变量的第一位置1,表示处于按键2的状态下 INC NUM2 ;NUM2次数加1 LP2: MOV A,NUM2 ;保存NUM2的值 MOV NUM,A LP22: INC NUM1 ;判断按键1的次数 DJZ NUM1 ;如果为0就在此执行 JMP LP1 ;如果大于0就跳转到按键1的函数中 INC NUM2 ;判断按键2的次数 DJZ NUM2 ;如果为0就跳出进行循序检测 JMP $+2 ;如果大于0就在此执行 JMP Sb_Scan DJZ NUM2 JMP $+2 JMP FUN_B1 DJZ NUM2 JMP $+2 JMP FUN_B2 DJZ NUM2 JMP $+2 JMP FUN_B3

;****************保存NUM2的值***************** Save2: ;先回复NUM2的值

31

EM78P153S使用总结 MOV A,NUM ;将NUM2的值还原 MOV NUM2,A JMP Sb_Scan ;调回主程序继续检测按键是否按下 ;JMP LP1 ;**********第1次********* FUN_B1: BC PORT6,7 ;HL1/2/3常亮 JMP Save2 ;先回复NUM2的值 ;**********第3次********* FUN_B3: BS PORT6,7 ;熄灭HL1/2/3 MOV A,@0X00 ;如果是第三次就将次数清零 MOV NUM,A JMP Save2 ;先恢复NUM2的值

;****************SB3按键具体的功能实现****************等价光敏检测****** ;****************SB3按键次数扫描********************** SB3_WORK: LP3: MOV A,@0B00000000 ;点亮LED1-4 MOV PORT5,A

MOV A,@0B10001111 ;点亮LED5-6-8,HL123保持熄灭 MOV PORT6,A CLR ISR ;清除中断标志 ENI ;开中断 BC TCC_FLAG,0 ;清零 MOV A,@40 ;40*25==1000MS MOV T_NUM,A CALL SB12 ;调用HL123显示函数 JMP SCAN_TCC3 C_NUM2: CALL S_NUM ;调用按键消抖函数 JBC PORT6,1 ;按键SB2按下了吗 JMP LP3 ;此处是避免无效按键导致无法恢复到之前状态 JBS PORT6,1 JMP $-1 ;此处是等待按键松开 INC NUM2 ;有按键,就次数加1 JBS NUM2,2 ;判断按键2的次数是否为4 JMP $+3 CLR NUM2 ;如果是则清零 INC NUM2 ;置1 JMP LP3

;****************TCC定时结束的按键检测函数********************* SCAN_SB3: MOV A,TEMP_6 ;恢复端口6的值 MOV PORT6,A MOV A,TEMP_5 ;恢复端口5的值 MOV PORT5,A BC TCC_FLAG,0 ;清零 JMP LP3 SCAN_TCC3: MOV TEMP_R2,A ;将返回的地址保存在变量中 MOV A,PORT6 ;保存端口6的值 MOV TEMP_6,A MOV A,PORT5 ;保存端口5的值

32

EM78P153S使用总结 MOV TEMP_5,A JMP SCAN_HL3 ;弱光函数 SCAN_HL3: JBC TCC_FLAG,0 ;延时的时间在调用前设定好 JMP SCAN_SB3 ;如果定时时间到了就跳到按键检测子函数 ;JBS HL_LED,0 ;判断是强光还是弱光? MOV A,PWM_FLAG SUB A,@2 ;占空比为30% JBS STATUS,0 ;借位了吗 JMP $+2 ;为0借位了 JMP BK3_56 ;为1没有借位 MOV A,NUM2 MOV NUM3,A INC NUM2 DJZ NUM2 JMP $+2 JMP L_SB3 DJZ NUM2 JMP $+2 JMP H_SB3 DJZ NUM2 JMP $+4 JBC PORT6,7 JMP L_SB3 JMP H_SB3 DJZ NUM2 JMP $+2 JMP L_SB3 L_SB3: MOV A,@0XFF MOV PORT6,A JMP $+3 H_SB3: MOV A,@0X7F MOV PORT6,A MOV A,@0X0F MOV PORT5,A JMP BK_SCAN3 BK3_56: MOV A,TEMP_6 MOV PORT6,A MOV A,TEMP_5 MOV PORT5,A BK_SCAN3: INC PWM_FLAG MOV A,PWM_FLAG SUB A,@10 JBS STATUS,0 CLR PWM_FLAG MOV A,NUM3 MOV NUM2,A JBS PORT6,3 JMP SB4_WORK 33

;保存NUM2的值 ;判断是否为初始化之后的0次数 ;为第0次吗? ;不是 ;是的 ;为第1次吗? ;不是 ;是的 ;为第2次吗? ;不是 ;是的,则读取P67口的状态 ;端口P67为高电平 ;端口67为低电平 ;为第3次吗? ;不是 ;是的 ;点亮HL123 ;恢复端口6的值 ;恢复端口5的值 ;判断PWM是否大于10 ;借位了吗 ;大于10就清零 ;还原NUM2的值 ;按键SB4按下了吗 ;有按键,跳转到SB4的处理程序


义隆单片机EM78P153使用 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国共产党在新民主主义革命时期土地政策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: