整个程序结束文档格式.docx
《整个程序结束文档格式.docx》由会员分享,可在线阅读,更多相关《整个程序结束文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
![整个程序结束文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/4/f85e381c-dcf1-4c61-a6e4-7ce188410180/f85e381c-dcf1-4c61-a6e4-7ce1884101801.gif)
addca,r3
daa
mova,r4
addca,r4
djnzr5,TLoop
Transfer:
movb,#2
mulab
movvolthigh,b
callBin2Bcd
movvolthigh,r4
movvoltlow,r3
Displayvolt2DisplayBuf:
movr1,#42h
movb,#10h
divab
mov@r1,a
incr1
mov@r1,b
-------------------------------------------------
驱动喇叭,实现声音报警的子程序
voicewarning:
movTH0,ToneHigh
movTL0,ToneLow
setbTR0
movr5,#100
lcallDelay1
clrTR0
setbp3.2
ret
驱动喇叭,实现声音报警的中断子程序
---------------------------------------------------------
Timer0Int:
movTH0,ToneHigh
movTL0,ToneLow
setbTR0
cplP3.2
------------------------------------------------------------------------
正反转步进子程序
--------------------------------
STEPS:
ANLStepState,#83HBy-gnksguybb
MOVA,StepState
JBACC.7,STPSC
MOVDPTR,#CTAB
AJMPSTPW
STPSC:
MOVDPTR,#FTAB
ANLA,#03H
STPW:
MOVCA,@A+DPTR
MOVP1,A
INCStepState
RET
DEL:
MOVR5,#0;
延时子程序
DEL0:
DJNZR5,DEL0
FTAB:
DB83H,86H,8CH,89H
CTAB:
DB79H,7cH,76H,73H
-------------------------------------------------------
KEY扫描有关的程序
KeyTest:
movdptr,#0e100h
mova,#03h
movx@dptr,a
callTestKey;
有键入?
jnzgetkey0
ljmpKReturn;
无键入,继续显示
getkey0:
callGetKey;
读入键码
MOVR4,#04H
anla,#1fh;
显示键码
MOVkPLAYTemp,A
movLEDBuf,a
;
movLEDBuf+1,#11h
movLEDBuf+2,#11h
movLEDBuf+3,#11h
;
movLEDBuf+4,#11h
movLEDBuf+5,#11h
LOOPKPLAY:
LCALLDisplayLED
LCALLDelay
MOVA,kPLAYTemp
DJNZR4,LOOPKPLAY
movTLCDkeyBuf,kPLAYTemp
setbrs0;
存储键码以便lcd显示上、下限参数!
!
mov@r0,kPLAYTemp
decr0
clrrs0
mova,KEYCount
cjnea,#04h,pfjump0
ajmppfjump
pfjump0:
jcpfjump1
cjnea,#07h,pfjump2
ajmppfjump3
pfjump2:
pfjump3:
movColumnTemp,#112
movCOLUMN,ColumnTemp
movLCDcount,#08h
MOVDPTR,#DDATB
MOVPAGE1,#02H
MOVCODE1,TLCDkeyBuf
LCALLCCW_PR
movr0,#LCDkeyBuf
movr1,#TemLCDkeyBuf
movr7,#04h
TLCDLOOP:
mova,@r0
mova,@r0
orla,@r1
decr1
djnzr7,TLCDLOOP
movr3,TemLCDkeyBuf-3
movr2,TemLCDkeyBuf-2
movr0,#47h;
#LimitParameter0
movr7,#02h
TLCDLOOP1:
acallbcd2hex
movr0,#48h;
incr0
movr3,TemLCDkeyBuf-1
movr2,TemLCDkeyBuf
djnzr7,TLCDLOOP1
movr0,#LCDkeyBuf
movColumnTemp,#17H
movKEYCount,#00h
pushdpl
pushdph
lcallUartModle;
完全显示,包括数据与字母
popdph
popdpl
ajmpKReturn
pfjump1:
mova,ColumnTemp
adda,#07h
movColumnTemp,a
ajmpLCDKdisplay
pfjump:
movColumnTemp,#91
LCDKdisplay:
INCKEYCount
KReturn:
串口通讯子程序
---------------------------------------------
UartModle:
movdptr,#UartTAB;
通过串口传送TOPLIMIT:
movr1,#00h
movr7,#0bh
acallUartloop1
movr0,#LCDkeyBuf;
传送数据TOPLIMIT
movr7,#04h
movr1,#TemLCDkeyBuf
acallBCD2ASC;
将数据转换为ASC码
movr0,#TemLCDkeyBuf
acallUartloop
传送LOWLIMIT:
movr1,#0bh
clrC
mova,#LCDkeyBuf
subba,#04h
movr0,a;
传送数据LOWLIMIT
movr0,#TemLCDkeyBuf
传送CURRENT:
movr1,#22
movr7,#0ah
movr0,#42h;
传送数据CURRENT
acallBCD2ASC1;
mova,SystemState
jzUartDispNormal
传送WARRING!
movr1,#41
ajmpUartReturn
UartDispNormal:
传送NORMAL
movr1,#32
movr7,#09h
UartReturn:
------------------------------------
UartModle0:
jzUartDispNormal0
ajmpUartReturn1
UartDispNormal0:
UartReturn1:
-----------------------------------------
Uartloop:
传送数字
movsbuf,a
Uartwait:
jnbti,Uartwait
clrti
djnzr7,Uartloop
--------------------------------------------
Uartloop1:
传送字符
mova,r1
movca,@a+dptr
movsbuf,a
Uartwait1:
jnbti,Uartwait1
djnzr7,Uartloop1
BCD2ASC:
转换为PC机的ASC码
adda,#30h
djnzr7,BCD2ASC
BCD2ASC1:
incr0
djnzr7,BCD2ASC1
UartTAB:
DB20h,54h,4fh,50h,4ch,49h,4dh,49h,54h,3ah,20h;
ASC--TOPLIMIT:
-11
DB20h,4ch,4fh,57h,4ch,49h,4dh,49h,54h,3ah,20h;
ASC--LOWLIMIT:
DB20h,43h,55h,52h,52h,45h,4eh,54h,3ah,20h;
ASC--CURRENT:
-10
DB20h,4eh,4fh,52h,4dh,41h,4ch,1ah,0bh;
ASC--NORMAL*-9
DB20h,57h,41h,52h,52h,49h,4eh,47h,21h,0bh;
ASC--WARRING!
---------------------------------------------------------------
bcd2hex:
acallbcdh
mova,r2
movb,#100
adda,r3
addca,b
movr2,a
drr1:
rrca
mov@r0,a
bcdh:
movr4,b
movb,#10
adda,r4
Delay1:
延时10ms子程序
movr7,#0ah
DL:
movr6,#0ffh
DL6:
djnzr6,DL6
djnzr7,DL
djnzr5,Delay1
ret
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;
输出线置为0
movdptr,#IN
movxa,@dptr;
读入键状态
cpla
anla,#0fh;
高四位不用
KeyTable:
数字键码定义
db00h,01h,04h,07h
db0fh,02h,05h,08h
db0eh,03h,06h,09h
db0dh,0ch,0bh,0ah
db10H,10H,10H,10H,10H
GetKey:
movP2,dph
movr0,#Low(IN)
movr1,#00100000b
movr2,#6
KLoop:
mova,r1;
找出键所在列
movx@dptr,a
rra
movr1,a;
下一列
movxa,@r0
anla,#0fh
jnzKGoon1;
该列有键入
djnzr2,KLoop
movr2,#0ffh;
没有键按下,返回0ffh
sjmpKExit
KGoon1:
键值=列X4+行
mova,r2
deca
rla
movr2,a;
r2=(r2-1)*4
r1中为读入的行值
movr1,#4
KLoopC:
rrca;
移位找出所在行
jcKExit
incr2;
r2=r2+行值
djnzr1,KLoopC
KExit:
mova,r2;
取出键码
movdptr,#KeyTable
movca,@a+dptr
movr2,a
KWaitRelease:
movdptr,#OUTBIT;
等键释放
movr6,#10
callDelay
callTestKey
jnzKWaitRelease
--------------------------------------------------------
AD查询转换有关程序
-----------------------------------------------------------------------
Delay:
movr7,#0;
延时子程序
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
DisplayLED:
movr0,Buf
movr1,LEDCount;
共6个八段管
movr2,LEDBitControll;
从左边开始显示
Loop:
mova,#00h
关所有八段管
mova,@r0
movdptr,#LEDmap
movB,#8;
送164
DLP:
movr3,a
movacc.0,c
ANLA,#0FDH
movdptr,#DAT164
movdptr,#CLK164
orla,#02h
anla,#0fDh
mova,r3
djnzB,DLP
显示一位八段管
movr6,#1
显示下一位
djnzr1,Loop
LEDMAP:
八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
db40H,00h
LCD显示有关程序
CCW_PR:
;
确定字符字模块首地址
MOVA,CODE1;
取代码
;
字模块宽度为32或16个字节
MULAB;
代码X32或16
ADDA,DPL;
字符字模块首地址=字模库首地址+代码X32
MOVDPL,A
MOVA,B
ADDCA,DPH
MOVDPH,A
PUSHCOLUMN;
列地址入栈
MOVCODE1,#00H;
代码寄存器借用为间址寄存器
CCW_1:
MOVCOUNT,LCDcount;
计数器设定为16
MOVA,PAGE1;
读页地址寄存器
ANLA,#03H
ORLA,#0B8H;
"
或"
页地址设置代码
MOVCOM,A;
写页地址设置指令
LCALLPR0
LCALLPR3
POPCOLUMN;
取列地址值
MOVA,COLUMN;
读列地址寄存器
CLRC
SUBBA,#PD1;
列地址-模块参数
JCCCW_2;
<0为左半屏显示区域(E1)
MOVCOLUMN,A;
≥0为右半屏显示区域(E2)
MOVA,PAGE1
SETBACC.3;
设置区域标志位
MOVPAGE1,A;
0"
为E1,"
1"
为E2
CCW_2:
MOVCOM,COLUMN;
设置列地址值
判区域标志以确定设置哪个