1、 addc a,r3 da a mov a ,r4 addc a,r4 djnz r5,TLoopTransfer: mov b,#2 mul ab mov volthigh,b call Bin2Bcd mov volthigh,r4 mov voltlow,r3Displayvolt2DisplayBuf: mov r1,#42h mov b,#10h div ab mov r1,a inc r1 mov r1,b-驱动喇叭,实现声音报警的子程序voicewarning: m ov TH0, ToneHigh mov TL0, ToneLow setb TR0 mov r5,#100 lc
2、all Delay1 clr TR0 setb p3.2ret驱动喇叭,实现声音报警的中断子程序-Timer0Int: mov TH0, ToneHigh mov TL0, ToneLow setb TR0 cpl P3.2-正反转步进子程序- STEPS: ANL StepState,#83H By-gnksguybb MOV A,StepState JB ACC.7,STPSC MOV DPTR,#CTAB AJMP STPWSTPSC:MOV DPTR,#FTABANL A,#03HSTPW: MOVC A,A+DPTR MOV P1,A INC StepState RETDEL: MO
3、V R5,#0 ;延时子程序DEL0: DJNZ R5,DEL0FTAB: DB 83H,86H,8CH,89HCTAB: DB 79H,7cH,76H,73H-KEY扫描有关的程序KeyTest: mov dptr,#0e100h mov a,#03h movx dptr,a call TestKey ; 有键入? jnz getkey0 ljmp KReturn ; 无键入, 继续显示getkey0 : call GetKey ; 读入键码 MOV R4,#04H anl a, #1fh ; 显示键码 MOV kPLAYTemp,A mov LEDBuf, a ; mov LEDBuf+1
4、, #11h mov LEDBuf+2, #11h mov LEDBuf+3, #11h ; mov LEDBuf+4, #11h mov LEDBuf+5, #11hLOOPKPLAY: LCALL DisplayLEDLCALL Delay MOV A , kPLAYTemp DJNZ R4,LOOPKPLAY mov TLCDkeyBuf, kPLAYTemp setb rs0 ;存储键码以便lcd 显示上、下限参数 ! mov r0,kPLAYTemp dec r0 clr rs0 mov a, KEYCount cjne a,#04h , pfjump0 ajmp pfjumppfj
5、ump0: jc pfjump1 cjne a,#07h, pfjump2 ajmp pfjump3pfjump2:pfjump3: mov ColumnTemp,#112 mov COLUMN,ColumnTemp mov LCDcount,#08h MOV DPTR,#DDATB MOV PAGE1,#02H MOV CODE1,TLCDkeyBuf LCALL CCW_PR mov r0, #LCDkeyBuf mov r1,#TemLCDkeyBuf mov r7,#04hTLCDLOOP: mov a,r0 mov a ,r0 orl a,r1 dec r1 djnz r7, TLC
6、DLOOP mov r3,TemLCDkeyBuf-3 mov r2,TemLCDkeyBuf-2 mov r0,#47h ;#LimitParameter0 mov r7,#02hTLCDLOOP1: acall bcd2hex mov r0,#48h ;inc r0 mov r3,TemLCDkeyBuf-1 mov r2,TemLCDkeyBuf djnz r7,TLCDLOOP1 mov r0,#LCDkeyBuf mov ColumnTemp,#17H mov KEYCount,#00hpush dplpush dphlcall UartModle ;完全显示,包括数据与字母pop
7、dphpop dpl ajmp KReturnpfjump1: mov a,ColumnTemp add a,#07h mov ColumnTemp,a ajmp LCDKdisplaypfjump: mov ColumnTemp,#91LCDKdisplay: INC KEYCountKReturn:串口通讯子程序-UartModle:mov dptr,#UartTAB ;通过串口传送TOPLIMIT:mov r1,#00hmov r7,#0bhacall Uartloop1mov r0,#LCDkeyBuf;传送数据TOPLIMITmov r7,#04hmov r1,#TemLCDkeyB
8、ufacall BCD2ASC ;将数据转换为ASC码mov r0,#TemLCDkeyBuf acall Uartloop传送LOWLIMIT:mov r1,#0bhclr Cmov a,#LCDkeyBufsubb a,#04hmov r0,a ;传送数据LOWLIMITmov r0,#TemLCDkeyBuf传送CURRENT:mov r1,#22mov r7,#0ahmov r0,#42h ;传送数据CURRENTacall BCD2ASC1 ;mov a,SystemStatejz UartDispNormal传送WARRING!mov r1,#41ajmp UartReturnUa
9、rtDispNormal:传送NORMALmov r1,#32mov r7,#09hUartReturn:-UartModle0:jz UartDispNormal0ajmp UartReturn1UartDispNormal0:UartReturn1:-Uartloop:传送数字 mov sbuf,a Uartwait: jnb ti,Uartwait clr ti djnz r7,Uartloop-Uartloop1:传送字符 mov a,r1 movc a,a+dptrmov sbuf,aUartwait1: jnb ti,Uartwait1 djnz r7,Uartloop1BCD2A
10、SC:转换为PC机的ASC码 add a,#30h djnz r7,BCD2ASCBCD2ASC1: inc r0 djnz r7,BCD2ASC1UartTAB:DB 20h,54h,4fh,50h,4ch,49h,4dh,49h,54h,3ah,20h ;ASC-TOPLIMIT:-11DB 20h,4ch,4fh,57h,4ch,49h,4dh,49h,54h,3ah,20h ;ASC-LOWLIMIT:DB 20h,43h,55h,52h,52h,45h,4eh,54h,3ah,20h ;ASC-CURRENT:-10DB 20h,4eh,4fh,52h,4dh,41h,4ch,1ah
11、,0bh ;ASC-NORMAL*-9DB 20h,57h,41h,52h,52h,49h,4eh,47h,21h,0bh ;ASC-WARRING!-bcd2hex: acall bcdh mov a,r2 mov b,#100 add a,r3 addc a,b mov r2,adrr1: rrc a mov r0 ,abcdh: mov r4,b mov b,#10 add a,r4Delay1: 延时10ms子程序 mov r7, #0ah DL:mov r6,#0ffh DL6: djnz r6,DL6 djnz r7, DL djnz r5,Delay1 ret TestKey:
12、mov dptr, #OUTBIT mov a, #0 movx dptr, a ; 输出线置为0 mov dptr, #IN movx a, dptr ; 读入键状态 cpl a anl a, #0fh ; 高四位不用KeyTable: 数字键码定义 db 00h, 01h, 04h, 07h db 0fh, 02h, 05h, 08h db 0eh, 03h, 06h, 09h db 0dh, 0ch, 0bh, 0ah db 10H,10H,10H,10H,10HGetKey: mov P2, dph mov r0, #Low(IN) mov r1, #00100000b mov r2,
13、 #6KLoop: mov a, r1 ; 找出键所在列 movx dptr, a rr a mov r1, a ; 下一列 movx a, r0 anl a, #0fh jnz KGoon1 ; 该列有键入 djnz r2, KLoop mov r2, #0ffh ; 没有键按下, 返回 0ffh sjmp KExitKGoon1: 键值 = 列 X 4 + 行 mov a, r2 dec a rl a mov r2, a ; r2 = (r2-1)*4 r1中为读入的行值 mov r1, #4KLoopC: rrc a ; 移位找出所在行 jc KExit inc r2 ; r2 = r2
14、+ 行值 djnz r1, KLoopCKExit: mov a, r2 ; 取出键码 mov dptr, #KeyTable movc a, a+dptr mov r2, aKWaitRelease: mov dptr, #OUTBIT ; 等键释放 mov r6, #10 call Delay call TestKey jnz KWaitRelease-AD查询转换有关程序-Delay: mov r7, #0 ; 延时子程序 DelayLoop: djnz r7, DelayLoop djnz r6, DelayLoopDisplayLED: mov r0, Buf mov r1, LED
15、Count ; 共6个八段管 mov r2,LEDBitControll ; 从左边开始显示Loop: mov a, #00h 关所有八段管 mov a, r0 mov dptr,#LEDmap mov B, #8 ; 送164DLP: mov r3, a mov acc.0, c ANL A, #0FDH mov dptr, #DAT164 mov dptr, #CLK164 orl a,#02h anl a,#0fDh mov a, r3 djnz B, DLP 显示一位八段管 mov r6, #1 显示下一位 djnz r1, LoopLEDMAP: 八段管显示码 db 3fh, 06h
16、, 5bh, 4fh, 66h, 6dh, 7dh, 07h db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h db 40H,00hLCD显示有关程序CCW_PR:;确定字符字模块首地址 MOV A,CODE1 ;取代码 ;字模块宽度为32或16个字节 MUL AB ;代码X32或16 ADD A,DPL ;字符字模块首地址=字模库首地址+代码X32 MOV DPL,A MOV A,B ADDC A,DPH MOV DPH,A PUSH COLUMN ;列地址入栈 MOV CODE1,#00H ;代码寄存器借用为间址寄存器CCW_1: MOV COUNT,LC
17、Dcount ;计数器设定为16 MOV A,PAGE1 ;读页地址寄存器 ANL A,#03H ORL A,#0B8H ;或 页地址设置代码 MOV COM,A ;写页地址设置指令 LCALL PR0 LCALL PR3 POP COLUMN ;取列地址值 MOV A,COLUMN ;读列地址寄存器 CLR C SUBB A,#PD1 ;列地址-模块参数 JC CCW_2 ;0为左半屏显示区域(E1) MOV COLUMN,A ;0为右半屏显示区域(E2) MOV A,PAGE1 SETB ACC.3 ;设置区域标志位 MOV PAGE1,A ;0为E1,1为E2CCW_2: MOV COM,COLUMN ;设置列地址值判区域标志以确定设置哪个
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1