整个程序结束.docx

上传人:b****5 文档编号:6193663 上传时间:2023-01-04 格式:DOCX 页数:26 大小:20.69KB
下载 相关 举报
整个程序结束.docx_第1页
第1页 / 共26页
整个程序结束.docx_第2页
第2页 / 共26页
整个程序结束.docx_第3页
第3页 / 共26页
整个程序结束.docx_第4页
第4页 / 共26页
整个程序结束.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

整个程序结束.docx

《整个程序结束.docx》由会员分享,可在线阅读,更多相关《整个程序结束.docx(26页珍藏版)》请在冰豆网上搜索。

整个程序结束.docx

整个程序结束

;在拆字完后将要显示时,在这里插入键盘扫描程序段,来进行LCD极限压力的设置

;----------------------------------------------------------

Detectkey:

lcallKeyTest

MainReturn:

ljmploop1

;;;;;;;主程序结束;;;;;;

;------------------------------------------------------

;------------------------------------------------------

;下面为所有的子程序

;------------------------------------------------------

;-----------------------------------------------------

ManuSet:

pushPSW

pushacc

PUSHDPL

PUSHDPH

lcallUartModle0

POPDPH

POPDPL

popacc

popPSW

reti

;被测压力数据转换为BCD码

;-----------------------------------------------------

ad2display:

movr1,a

anla,#0fh

mov@r0,a

decr0

mova,r1

anla,#0f0h

swapa

mov@r0,a

ret

;二进制码转换为BCD码

Bin2Bcd:

movr5,#16

clra

movr3,a

movr4,a

TLoop:

mova,voltlow

rlca

movvoltlow,a

mova,volthigh

rlca

movvolthigh,a

mova,r3

addca,r3

daa

movr3,a

mova,r4

addca,r4

daa

movr4,a

djnzr5,TLoop

ret

Transfer:

movb,#2

mulab

movvolthigh,b

movvoltlow,a

callBin2Bcd

movvolthigh,r4

movvoltlow,r3

ret

Displayvolt2DisplayBuf:

movr1,#42h

mova,volthigh

movb,#10h

divab

mov@r1,a

incr1

mov@r1,b

incr1

mova,voltlow

movb,#10h

divab

mov@r1,a

incr1

mov@r1,b

ret

;-------------------------------------------------

;驱动喇叭,实现声音报警的子程序

;------------------------------------------------------

voicewarning:

movTH0,ToneHigh

movTL0,ToneLow

setbTR0

movr5,#100

lcallDelay1

clrTR0

setbp3.2

ret

;驱动喇叭,实现声音报警的中断子程序

;---------------------------------------------------------

Timer0Int:

pushPSW

pushacc

PUSHDPL

PUSHDPH

clrTR0

movTH0,ToneHigh

movTL0,ToneLow

setbTR0

cplP3.2

POPDPH

POPDPL

popacc

popPSW

reti

;------------------------------------------------------------------------

;正反转步进子程序

;--------------------------------

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

RET

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:

jcpfjump1

pfjump3:

movColumnTemp,#112

movCOLUMN,ColumnTemp

movLCDcount,#08h

movb,#10h

MOVDPTR,#DDATB

MOVPAGE1,#02H

MOVCODE1,TLCDkeyBuf

LCALLCCW_PR

movr0,#LCDkeyBuf

movr1,#TemLCDkeyBuf

movr7,#04h

TLCDLOOP:

mova,@r0

anla,#0fh

swapa

mov@r1,a

decr0

mova,@r0

anla,#0fh

orla,@r1

mov@r1,a

decr0

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

setbrs0;存储键码以便lcd显示上、下限参数!

!

!

movr0,#LCDkeyBuf

clrrs0

movColumnTemp,#17H

movKEYCount,#00h

pushdpl

pushdph

lcallUartModle;完全显示,包括数据与字母

popdph

popdpl

ajmpKReturn

pfjump1:

mova,ColumnTemp

adda,#07h

movColumnTemp,a

ajmpLCDKdisplay

pfjump:

movColumnTemp,#91

LCDKdisplay:

movCOLUMN,ColumnTemp

movLCDcount,#08h

movb,#10h

MOVDPTR,#DDATB

MOVPAGE1,#02H

MOVCODE1,TLCDkeyBuf

LCALLCCW_PR

INCKEYCount

KReturn:

ret

;串口通讯子程序

;---------------------------------------------

UartModle:

movdptr,#UartTAB;通过串口传送TOPLIMIT:

movr1,#00h

movr7,#0bh

acallUartloop1

movr0,#LCDkeyBuf;传送数据TOPLIMIT

movr7,#04h

movr1,#TemLCDkeyBuf

acallBCD2ASC;将数据转换为ASC码

movr0,#TemLCDkeyBuf

movr7,#04h

acallUartloop

movdptr,#UartTAB;传送LOWLIMIT:

movr1,#0bh

movr7,#0bh

acallUartloop1

clrC

mova,#LCDkeyBuf

subba,#04h

movr0,a;;传送数据LOWLIMIT

movr7,#04h

movr1,#TemLCDkeyBuf

acallBCD2ASC;将数据转换为ASC码

movr0,#TemLCDkeyBuf

movr7,#04h

acallUartloop

movdptr,#UartTAB;传送CURRENT:

movr1,#22

movr7,#0ah

acallUartloop1

movr0,#42h;传送数据CURRENT

movr7,#04h

movr1,#TemLCDkeyBuf

acallBCD2ASC1;将数据转换为ASC码

movr0,#TemLCDkeyBuf

movr7,#04h

acallUartloop

mova,SystemState

jzUartDispNormal

movdptr,#UartTAB;传送WARRING!

movr1,#41

movr7,#0ah

acallUartloop1

ajmpUartReturn

UartDispNormal:

movdptr,#UartTAB;传送NORMAL

movr1,#32

movr7,#09h

acallUartloop1

UartReturn:

ret

;------------------------------------

UartModle0:

movdptr,#UartTAB;传送CURRENT:

movr1,#22

movr7,#0ah

acallUartloop1

movr0,#42h;传送数据CURRENT

movr7,#04h

movr1,#TemLCDkeyBuf

acallBCD2ASC1;将数据转换为ASC码

movr0,#TemLCDkeyBuf

movr7,#04h

acallUartloop

mova,SystemState

jzUartDispNormal0

movdptr,#UartTAB;传送WARRING!

movr1,#41

movr7,#0ah

acallUartloop1

ajmpUartReturn1

UartDispNormal0:

movdptr,#UartTAB;传送NORMAL

movr1,#32

movr7,#09h

acallUartloop1

UartReturn1:

ret

;-----------------------------------------

Uartloop:

;传送数字

mova,@r0

movsbuf,a

Uartwait:

jnbti,Uartwait

clrti

decr0

djnzr7,Uartloop

ret

;--------------------------------------------

Uartloop1:

;传送字符

mova,r1

movca,@a+dptr

movsbuf,a

Uartwait1:

jnbti,Uartwait1

clrti

incr1

djnzr7,Uartloop1

ret

;------------------------------------

BCD2ASC:

;转换为PC机的ASC码

mova,@r0

adda,#30h

mov@r1,a

decr0

decr1

djnzr7,BCD2ASC

ret

BCD2ASC1:

;转换为PC机的ASC码

mova,@r0

adda,#30h

mov@r1,a

incr0

decr1

djnzr7,BCD2ASC1

ret

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:

-11

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!

-10

;--------------------------------------------

 

;---------------------------------------------------------------

bcd2hex:

mova,r3

acallbcdh

movr3,a

mova,r2

acallbcdh

movb,#100

mulab

adda,r3

movr3,a

clra

addca,b

movr2,a

drr1:

mova,r2

rrca

movr2,a

mova,r3

rrca

mov@r0,a

ret

bcdh:

movb,#10h

divab

movr4,b

movb,#10

mulab

adda,r4

ret

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;高四位不用

ret

KeyTable:

;数字键码定义

db00h,01h,04h,07h

db0fh,02h,05h,08h

db0eh,03h,06h,09h

db0dh,0ch,0bh,0ah

db10H,10H,10H,10H,10H

db10H,10H,10H,10H,10H

GetKey:

movdptr,#OUTBIT

movP2,dph

movr0,#Low(IN)

movr1,#00100000b

movr2,#6

KLoop:

mova,r1;找出键所在列

cpla

movx@dptr,a

cpla

rra

movr1,a;下一列

movxa,@r0

cpla

anla,#0fh

jnzKGoon1;该列有键入

djnzr2,KLoop

movr2,#0ffh;没有键按下,返回0ffh

sjmpKExit

KGoon1:

movr1,a;键值=列X4+行

mova,r2

deca

rla

rla

movr2,a;r2=(r2-1)*4

mova,r1;r1中为读入的行值

movr1,#4

KLoopC:

rrca;移位找出所在行

jcKExit

incr2;r2=r2+行值

djnzr1,KLoopC

KExit:

mova,r2;取出键码

movdptr,#KeyTable

movca,@a+dptr

movr2,a

KWaitRelease:

movdptr,#OUTBIT;等键释放

clra

movx@dptr,a

movr6,#10

callDelay

callTestKey

jnzKWaitRelease

mova,r2

ret

;--------------------------------------------------------

;AD查询转换有关程序

;-----------------------------------------------------------------------

Delay:

movr7,#0;延时子程序

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

DisplayLED:

movr0,Buf

movr1,LEDCount;共6个八段管

movr2,LEDBitControll;从左边开始显示

Loop:

movdptr,#OUTBIT

mova,#00h

movx@dptr,a;关所有八段管

mova,@r0

movdptr,#LEDmap

movca,@a+dptr

movB,#8;送164

DLP:

rlca

movr3,a

movacc.0,c

ANLA,#0FDH

movdptr,#DAT164

movx@dptr,a

movdptr,#CLK164

orla,#02h

movx@dptr,a

anla,#0fDh

movx@dptr,a

mova,r3

djnzB,DLP

movdptr,#OUTBIT

mova,r2

movx@dptr,a;显示一位八段管

movr6,#1

callDelay

mova,r2;显示下一位

rra

movr2,a

incr0

djnzr1,Loop

movdptr,#OUTBIT

mova,#0

movx@dptr,a;关所有八段管

ret

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;;列地址入栈

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;;设置列地址值

MOVA,PAGE1;;判区域标志以确定设置哪个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 天文地理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1