智能仪表实验程序.docx
- 文档编号:9136775
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:32
- 大小:20.84KB
智能仪表实验程序.docx
《智能仪表实验程序.docx》由会员分享,可在线阅读,更多相关《智能仪表实验程序.docx(32页珍藏版)》请在冰豆网上搜索。
智能仪表实验程序
01
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
INequ08001h;键盘读入口
LEDBufequ60h;显示缓冲
Numequ70h;显示的数据
DelayTequ75h;
ljmpStart
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
Delay:
;延时子程序
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6;共6个八段管
movr2,#00100000b;从左边开始显示
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
movdptr,#OUTBIT
mova,r2
movx@dptr,a;显示一位八段管
movr6,#01
callDelay
mova,r2;显示下一位
rra
movr2,a
incr0
djnzr1,Loop
movdptr,#OUTBIT
mova,#0
movx@dptr,a;关所有八段管
ret
Start:
movsp,#40h
movNum,#0
MLoop:
incNum
mova,Num
movb,a
movr0,#LEDBuf
FillBuf:
mova,b
anla,#0fh
movdptr,#LEDMap
movca,@a+dptr;数字转换成显示码
mov@r0,a;显示在码填入显示缓冲
incr0
incb
cjner0,#LEDBuf+6,FillBuf
movDelayT,#30
DispAgain:
callDisplayLED;显示
djnzDelayT,DispAgain
ljmpMLoop
end
1
Blockequ4000h
movdptr,#Block;起始地址
movr0,#0;清256字节
clra
Loop:
movx@dptr,a
incdptr;指向下一个地址
djnzr0,Loop;记数减一
ljmp$
end
2
CWADD1EQU08000H;写指令代码地址(E1)
DWADD1EQU08001H;写显示数据地址(E1)
CRADD1EQU08002H;读状态字地址(E1)
DRADD1EQU08003H;读显示数据地址(E1)
CWADD2EQU08004H;写指令代码地址(E2)
DWADD2EQU08005H;写显示数进地址(E2)
CRADD2EQU08006H;读状态字地址(E2)
DRADD2EQU08007H;读显示数据地址(E2)
PD1EQU3DH;122/2分成左右两半屏122x32
COLUMNEQU30H
PAGE_EQU31H;页地址寄存器D1,DO:
页地址
CODE_EQU32H;字符代码寄存器
COUNTEQU33H;计数器
DIRequ34h
dtp1equ35h
dtp2equ36h
dtp3equ37h
CTEMPEQU38H
COMEQU20H;指令寄存器
DATEQU21H;数据寄存器
ORG0
jmpmain
movdptr,#0f002h
mova,#56h
movx@dptr,a
mova,#0
movxa,@dptr
JMPMAIN
;---------------------------------------
;初始化程序
INIT:
MOVCOM,#0E2H;复位
LCALLPRO
LCALLPR3
MOVCOM,#0A4H;关闭休闭状态
LCALLPRO
LCALLPR3
MOVCOM,#0A9H;设置1/32占空比
LCALLPRO
LCALLPR3
MOVCOM,#0A0H;正向排序设置
LCALLPRO
LCALLPR3
MOVCOM,#0C0H;设置显示起始行为第一行
LCALLPRO
LCALLPR3
MOVCOM,#0AFH;开显示设置
LCALLPRO
LCALLPR3
RET
;------------------------------------------------
;清屏
CLEAR:
MOVR4,#00H;页面地址暂存器设置
CLEAR1:
MOVA,R4;取页地址值
ORLA,#0B8H;"或"页面地址设置代码
MOVCOM,A;页面地址设置
LCALLPRO
LCALLPR3
MOVCOM,#00H;列地址设置为"0"
LCALLPRO
LCALLPR3
MOVR3,#50H;一页清80个字节
CLEAR2:
MOVDAT,#00H;显示数据为"0"
LCALLPR1
LCALLPR4
DJNZR3,CLEAR2;页内字节清零循环
INCR4;页地址暂存器加一
CJNER4,#04H,CLEAR1;RAM区清零循环
RET
;-----------------------------------
;1.写指令代码子程序(E1)
PRO:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD1;设置读状态字地址
PR01:
MOVXA,@DPTR;读状态字
JBACC.7,PR01;判"忙"标志为句"0",否再读
MOVDPTR,#CWADD1;设置写指令代码地址
MOVA,COM;取指令代码
MOVX@DPTR,A;写指令代码
POPDPH
POPDPL
RET
;------------------------------------
;2.写显示数据子程序(E1)
PR1:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD1;设置读状态字地址
PR11:
MOVXA,@DPTR;读状态宇
JBACC.7,PR11;判"忙"标志为"0",否再读
MOVDPTR,#DWADD1;设置写显示数据地址
MOVA,DAT;取数据
MOVX@DPTR,A;写数据
POPDPH
POPDPL
RET
;-------------------------------------
;3.读显示数据子程序(E1)
PR2:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD1;设置读状态字地址
PR21:
MOVXA,@DPTR;读状态字
JBACC.7,PR21;判"忙"标志为"0"否,否再读
MOVDPTR,#DRADD1;设置读显示数据地址
MOVXA,@DPTR;读数据
MOVDAT,A;存数据
POPDPH
POPDPL
RET
;-------------------------------------
;4.写指令代码子程序(E2)
PR3:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD2;设置读状态字地址
PR31:
MOVXA,@DPTR;读状态字
JBACC.7,PR31;判"忙"陈志为"0"否,否再读
MOVDPTR,#CWADD2;设置写指令代码地址
MOVA,COM;取指令代码
MOVX@DPTR,A;写指令代码
POPDPH
POPDPL
RET
;-------------------------------------
;5.写显示数据子程序(E2)
PR4:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD2;设置读状态字地址
PR41:
MOVXA,@DPTR;读状态字
JBACC.7,PR41;判"忙"标志为"0"否,否再读
MOVDPTR,#DWADD2;设置写显示数据地址
MOVA,DAT;取数据
MOVX@DPTR,A;写数据
POPDPH
POPDPL
RET
;---------------------------------------
;6.读显示数据子程序(E2)
PR5:
PUSHDPL
PUSHDPH
MOVDPTR,#CRADD2;设置读状态字地址
PR51:
MOVXA,@DPTR;读状态字
JBACC.7,PR51;判"忙"标志为"0",否再读
MOVDPTR,#DRADD2;设置写显示数据地址
MOVXA,@DPTR;读数据
MOVDAT,A;存数据
POPDPH
POPDPL
RET
;中文显示子程序
CCW_PR:
MOVDPTR,#CCTAB;确定字符字模块首地址
MOVA,CODE_;取代码
MOVB,#20H;字模块宽度为32个字节
MULAB;代码×32
ADDA,DPL;字符字模块首地址
MOVDPL,A;字模库首地址+代码×32
MOVA,B
ADDCA,DPH
MOVDPH,A
PUSHCOLUMN;列地址入栈
PUSHCOLUMN;列地址入栈
MOVCODE_,#00H;代码寄存器借用为间址寄存器
CCW_1:
MOVCOUNT,#10H;计数器设置为16
MOVA,PAGE_;读页地址寄存器
ANLA,#03H;取页地址有效值
ORLA,#0B8H;"或"页地址设置代码
MOVCOM,A;设置页地址
LCALLPRo
LCALLPR3
POPCOLUMN;取列地址值
MOVA,COLUMN;读列地址寄存器
CLRC
SUBBA,#PD1;列地址-模块参数
JCCCW_2;<0为左半屏显示区域(E1)
MOVCOLUMN,A;≥0为右半屏显示区域(E2)
MOVA,PAGE_
SETBACC.3;设置区域标志位。
MOVPAGE_,A;"0"为E1,"1"为E2
CCW_2:
MOVCOM,COLUMN;设置列地址值
MOVA,PAGE_;判区域标志以确定设置哪个控制器
JNBACC.3,CCW_3
LCALLPR3;区域E2
LJMPCCW_4
CCW_3:
LCALLPRO;区域E1
CCW_4:
MOVA,CODE_;取间址寄存器值
MOVCA,@A+DPTR;取汉字字模数据
MOVDAT,A;写数据
MOVA,PAGE_
JNBACC.3,CCW_5
LCALLPR4;区域E2
LJMPCCW_6
CCW_5:
LCALLPR1;区域E1
CCW_6:
INCCODE_;间址寄存器加一
INCCOLUMN;列地址寄存器加一
MOVA,COLUMN;判列地址是否超出区域范围、
CJNEA,#PD1,CCW_7
CCW_7:
JCCCW_8;未超出则继续
MOVA,PAGE_;超出则判是否在区域E2
JBACC.3,CCW_8;在区域E2则退出
SETBACC.3;在区域E1则修改成区域E2
MOVPAGE_,A
MOVCOM,#00H;设置区域E2列地址为"0"
LCALLPR3
CCW_8:
DJNZCOUNT,CCW_4;当页循环
MOVA,PAGE_;读页地址寄存器
JBACC.7,CCW_9;判完成标志D7位,"1"则完成退出
INCA;否则页地址加一
SETBACC.7;置完成位为"1"
CLRACC.3
MOVPAGE_,A
MOVCODE_,#10H;间址寄存器设置为16
LJMPCCW_1;大循环
CCW_9:
RET
;--------------------------------------
;中文字符库
CCTAB:
small0:
;db38h,44h,44h,44h,44h,44h,38h,00h;0
small1:
;db10h,30h,50h,10h,10h,10h,7ch,00h;1
small2:
;db38h,44h,04h,08h,10h,20h,7ch,00h;2
small3:
;db78h,84h,04h,38h,04h,84h,78h,00h;3
DB000H,004H,0e4H,024H,024H,064H,0b4H,02fH;南
DB024H,0a4H,064H,024H,024H,0e6H,004H,000H
DB000H,000H,07fH,004H,005H,005H,005H,07fH
DB005H,005H,005H,025H,044H,03fH,000H,000H
DB000H,004H,004H,0e4H,024H,024H,025H,026H;京
DB024H,024H,024H,0e4H,006H,004H,000H,000H
DB000H,020H,010H,019H,00DH,041H,081H,07fH
DB001H,001H,005H,00dH,038H,010H,000H,000H
DB000H,080H,060H,0f8H,007H,00aH,028H,028H;伟
DB028H,0ffH,028H,028H,028H,028H,000H,000H
DB001H,000H,000H,0fFH,000H,001H,001H,001H
DB001H,0ffH,001H,021H,041H,03fH,000H,000H
DB008H,008H,089H,0ceH,028H,018H,002H,07aH;福
DB04aH,04aH,04aH,04aH,04aH,07aH,002H,000H
DB002H,001H,000H,0ffH,001H,002H,0ffH,049H
DB049H,049H,07fH,049H,049H,049H,0ffH,000H
;------------------------------------.
;中文演示显示程序段
MAIN:
LCALLINIT
LCALLCLEAR
MOVCTEMP,#0
MOVDIR,#0
AAA:
MOVPAGE_,#02H
MOVCOLUMN,CTEMP
MOVCODE_,#00H
LCALLCCW_PR
MOVPAGE_,#02H
MOVA,CTEMP
ADDA,#10H
MOVCOLUMN,A
MOVCODE_,#01H
LCALLCCW_PR
MOVPAGE_,#02H
MOVA,CTEMP
ADDA,#20H
MOVCOLUMN,A
MOVCODE_,#02H
LCALLCCW_PR
MOVPAGE_,#02H
MOVA,CTEMP
ADDA,#30H
MOVCOLUMN,A
MOVCODE_,#03H
LCALLCCW_PR
LJMP$
LCALLDELAY
LCALLDELAY
LCALLDELAY
MOVA,DIR
CJNEA,#0,LEFT
INCCTEMP
MOVA,CTEMP
CJNEA,#58,AAA
MOVDIR,#1
LJMPAAA
LEFT:
DECCTEMP
MOVA,CTEMP
CJNEA,#0,AAA
MOVDIR,#0
LJMPAAA
;LCALLS_LEFT
;LCALLS_UP
SJMP$
;示例五滚动演示程序段
;定时间隔地有规律地修改显示起始行地址,将产生显示画面平滑向上或向下滚动的效
;果。
示例程序如下:
S_UP:
MOVR7,#00H;向上改动程序
S_UPI:
MOVA,#0C0H;显示起始行设置代码
ORLA,R7
MOVCOM,A
LCALLPRO
LCALLPR3
LCALLDELAY;调延时子程序
INCR7
CJNER7,#20H,S_UPI
LJMPS_UP
;-------------------------------------
S_DOWN:
MOVR7,#1FH;向下滚动程序
MOVCOM,#0C0H;显示起始行设置代码
LCALLPRo
LCALLPR3
LCALLDELAY;调延时子程序
S_DOWN1:
MOVA,#0C0H;显示起始行设置代码
ORLA,R7
MOVCOM,A
LCALLPRO
LCALLPR3
LCALLDELAY
DJNZR7,S_DOWN1
LJMPS_DOWN
;----------------------------------
DELAY:
MOVR6,#060H;延时子程序
MOVR5,#00H
DELAY1:
NOP
DJNZR5,DELAY1
DJNZR6,DELAY1
RET
3
modeequ082h
PORTAequ08000h
CTLequ08003h
OUTBITequ09002h
OUTSEGequ09004h;段控制口
INequ09001h
LEDBufequ60h
ORG0000H
ljmpStart
LEDMAP:
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
Delay:
movr7,#0
DelayLoop:
djnzr7,DelayLoop
djnzr6,DelayLoop
ret
DisplayLED:
movr0,#LEDBuf
movr1,#6
movr2,#00100000b
Loop:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
mova,@r0
movdptr,#OUTSEG
movx@dptr,a
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
TestKey:
movdptr,#OUTBIT
mova,#0
movx@dptr,a
movdptr,#IN
movxa,@dptr
cpla
anla,#0fh
ret
KeyTable:
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
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
jnzGoon1
djnzr2,KLoop
movr2,#0ffh
sjmpExit
Goon1:
movr1,a
mova,r2
deca
rla
rla
movr2,a;r2=(r2-1)*4
mova,r1
movr1,#4
LoopC:
rrca
jcExit
incr2
djnzr1,LoopC
Exit:
mova,r2
movdptr,#KeyTable
movca,@a+dptr
movr2,a
WaitRelease:
movdptr,#OUTBIT
clra
movx@dptr,a
movr6,#10
callDelay
callTestKey
jnzWaitRelease
mova,r2
ret
;================================
UPequ16h;Next
DOWNequ15h;Last
LowLimitequ10
HighLimitequ30
LowTempequ-40;A/D0
HighTempequ50;A/D255
ADPortequ0a000h
Heatequ1
Coolequ2
SetTempequ50h
CurTempequ51h
DisplayResult:
mova,CurTemp
jnbacc.7,GE0
movLEDBuf,#40h;'-'
deca
cpla
jmpGoon
GE0:
movLEDBuf,#0;''
Goon:
movb,#10
divab
movdptr,#LEDMAP
movca,@a+dptr
movLEDBuf+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能仪表 实验 程序