?? ph108掃測試卡程序.asm
字號:
;ph108掃測試卡程序
org 0000h
LJMP main
LJMP key0;中斷入口INT0
org 0013h
LJMP key1;中斷入口INT1
org 0030h
main:MOV SP,#50H ;SP=50H 初始化開始
CLR ie0;c289清外中斷請求標志
CLR IE1;c28b清標志
SETB ex0;d2a8中斷能
setb ex1;d2aa中斷能
SETB EA;d2af中斷允許
clr 01H;c201按鍵清除
clr P3.0;P3.0是第二個時鐘
clr P3.1;c2b1 P3.1=0 CLK
clr P1.6;P1.6=0 EN
clr P1.7;P1.7=0 STB
mov 37h,#04h;雙色
mov 35H,#0fh;十六行
MOV 33H,#00H;753300;(33H)=0
MOV 31H,#00H;753100;(31H)=0無鍵按下
MOV A,37H;E537;(32H)=0(OR)4軟件讀取硬件狀態
MOV 32H,A;F532 初始化結束
star:MOV A,32H;
MOV P2,A;P2初始化 0,4
MOV A,31H;查KEY0狀態標志
CJNE A,#00,a0081H; 有鍵按下(31H)中內容決定分支
LCALL display;(35H)=15時分支顯示四個字(05B1H)
LJMP star
a0081H:CJNE A,#01H,a00A7H
MOV A,35H;E535第一種狀態(31H)=1
lcall a02dfh;1202df 調用(35H)=15時狀態處理
ljmp star
a00A7H:CJNE A,#02H,a00CDH
mov a,35h
lcall a0337h;120337(31H)=2(35H)=15時處理
ljmp star
a00CDH:CJNE A,#03H,a00F3H
mov a,35h;e535
lcall a03edh;1203ed(31H)=3(35H)=15時處理
ljmp star
A00F3H:CJNE A,#04H,a0116H
mov a,35h;e535
lcall a04c3h;1204c3(31H)=4時(35H)=15時
ljmp star
A0116H:LJMP star;0200
a013dh:push acc;c0e0十六掃行信號處理
setb p1.6;d296
nop;00
setb p1.7;d297
mov a,33h;e533
mov P0,a
inc a;04
cjne a,#08h,a014eh
mov a,#00h;
a014eh:mov 33h,a
clr p1.7;c297
nop;00
clr p1.6;c296
pop acc;d0e0
ret;22
delay:mov r0,#02h;7802
;delay:mov r0,#20h;7802;變為1秒
a01c9h:mov r1,#0c0h;79c0
a01cbh:mov r2,#0ffh;7aff
djnz r2,$;dafe
;1001D000 FAD8 F622 D201 0532 E532 B407 04E5 37F5
djnz r1,a01cbh;d9fa pc=01cfh+2+fah=01cbh
djnz r0,a01c9h;d8f6 pc=01d1h+2+f6h=01c9h
ret;22延時返回
;KEY子程式
key1:setb 01h;d201 有鍵按下
inc 32h;0532(32H)為7種狀態標志
mov a,32h;e532
cjne a,#07h,a01e1h;b40704
mov a,37h;e537
;1001E000 3212 01C7 32D2 0105-31E5 31B4 0503 7531
mov 32h,a;f532
a01e1h:lcall delay;1201c7 CALL延時子程序
reti;32
key0:setb 01h;d201 有鍵按下
inc 31h;0531(31H)為00-05
mov a,31h;e531為五種方式標志
cjne a,#05h,a01f1h;b40503 pc=01ebh+3+3=01f1h
;1001F000 0012 01C7 3275 3300-9005 B17D 107F 08BF
mov 31h,#00;753100
a01f1h:lcall delay;1201c7
reti;32
display:MOV 33H,#00H;753300
MOV DPTR,#05b1h;查表
a01fbH:MOV R5,#8;7D10;16行
a01fdH:MOV R7,#4;7F08;每字節
a01ffh:CJNE R7,#3,a0209H
mov r0,32h;a832;查KEY1鍵值
cjne r0,#05h,a0209h;b80502
setb p1.6;d296;EN=1
A0209H:MOV A,#00H;7400
MOVC A,@A+DPTR;93 取數
lcall sub1
mov a,#1
movc a,@a+dptr
lcall sub1
mov a,#10h
movc a,@a+dptr
lcall sub2
mov a,#11h
movc a,@a+dptr
lcall sub2
mov a,dpl
add a,#20h
mov dpl,a
mov a,dph
addc a,#0
mov dph,a
djnz r7,a01ffh;dfce pc=022fh+2+ceh=01ffh 四字完?
lcall a013dh;12013d 下一行
mov a,dpl
subb a,#7dh
mov dpl,a
mov a,dph
subb a,#0
mov dph,a
djnz r5,a01fdh;ddc7 pc=0234h+2+c7h=01fdh 16行完?
jb 01h,a023bh;200102 pc=0236h+3+02h=023bh 查詢有鍵按下?
ajmp display;21f5 反復顯示
a023bh:clr 01h;c201
ret;22
sub1:
mov r6,#8
d0215h:rlc a
jnc d0222h;500a pc=0216h+2+0ah=0222h
mov p2,#0
ajmp d0225h;4125
d0222H:MOV P2,#07H;75A007;數據初始化
d0225h:NOP;00
SETB p3.1;D2B1;CLK=1 送數據
nop
CLR p3.1;C2B1
djnz r6,d0215h;
ret
sub2:
mov r6,#8
c0215h:rlc a
jnc c0222h;500a pc=0216h+2+0ah=0222h
mov p2,#0
ajmp c0225h;4125
c0222H:MOV P2,#07H;75A007;數據初始化
c0225h:NOP;00
SETB p3.0;D2B1;CLK=1 送數據
nop
CLR p3.0;C2B1
djnz r6,c0215h;
ret
A02dfh:mov r6,#04h;7e10 掃描方式為16行
a02e1h:mov r7,#80h;7f40 每次掃640點
a02e3h:setb p3.1;d2b1 CLK
nop
clr p3.1;c2b1
setb p3.0
nop
clr p3.0
djnz r7,a02e3h;dff8 pc=02e9h+2+f8h=02e3h
lcall a013dh;12013d 調用行信號處理
djnz r6,a02e1h;def1 pc=02eeh+2+f1h=02e1h
mov r5,#0ffh;7dff
jb 01h,a02f7h;200102
ajmp a02dfh;41df
a02f7h:clr 01h;c201
ret;22
A0337H:mov 36h,#04h;753610;循環十六次
A033AH:mov r5,#26h;7d26;38次顯示
a033ch:mov r6,#08h;7e10;十六行
a033eh:mov a,r6;ee
cjne a,36h,a0348h;b53606
;10034000 3606 E532 F5A0 614C 7407 F5A0 7F40 D2B1
mov a,32h;e532
mov P2,a;f5a0
ajmp a034ch;614c
a0348h:mov a,#07h;7407
mov P2,a;f5a0;初始化
A034CH:mov r7,#40h;7F40;64點
a034eh:setb p3.1;d2b1
nop
clr p3.1;c2b1
setb p3.0
nop
clr p3.0
djnz r7,a034eh ;dff9 pc=0353h+2+f9h=034eh
lcall a013dh;12013d調用行信號處理
jb 01h,a036ch;200111 pc=0358h+3+11h=036ch;出口有鍵按下時跳出
djnz r6,a033eh;dee1 pc=035bh+2+e1h=033eh
djnz r5,a033ch;dddd pc=035dh+2+ddh=033ch
;10036000 3614 B400 0274 10F5 3602 033A C201 2275
mov a,36h;e536
dec a;14
cjne a,#00,a0367h;b40002
mov a,#04h;7410
a0367h:mov 36h,a;f536
ljmp a033ah;02033a
A036CH:clr 01h;c201
ret;22
a03edh:mov 34h,#08h;753408;循環八次,
mov 33h,#00h;753300;從0行開始
A03f3H:mov a,34h;e534
mov r2,a;fa
push 02h;c002
mov r4,#40h;7c10;十六次掃描控制顯示時間
a03fah:mov r5,#04h;7d10;十六行
a03fch:mov r7,#8h;7f08;八個IC(64點)
a03feh:mov a,34h;e534
mov r6,#08h;7e08;八點
a0402h:rrc a;13
jnc a040fh;500a pc=0403h+2+0ah=040fh =0時轉
push acc;c0e0
mov a,32h;e532
mov P2,a;f5a0
pop acc;d0e0
ajmp a0412h;8112
a040fh:mov P2,#07h;75a007 消隱
a0412h:nop;00
setb p3.1;d2b1;CLK
nop
clr p3.1;c2b1
setb p3.0
nop
clr p3.0
djnz r6,a0402h;dee7 pc=0419h+2+e7h=0402h
djnz r7,a03feh;dfe1 pc=041bh+2+e1h=03feh
lcall a013dh;12013DH;行信號處理
djnz r5,a03fch;ddda pc=0420h+2+dah=03fch
djnz r4,a03fah;dcd6 pc=0422h+2+d6h=03fah
pop 02h;ea
mov a,r2
rr a;03右移
mov 34h,a;f534
jb 01h,a042fh;200102
ajmp a03f3h;61f3
a042fh:clr 01h;c201
ret;22
a04c3h:mov 34h,#08h;753408共八次
mov 33h,#00h;753300;從0行開始
a04c9H:mov a,34h;e534
mov r2,a;fa
push 02h;c002
mov r4,#48h;7c12循環十八次控制顯示時間
;1004D000 7D10 7B01 7F08 E534 7E08 1350 0AC0 E0E5
a04d0h:mov r5,#04h;7d10掃描十六行
a04d2h:mov r3,#01h;7b01
a04d4h:mov r7,#8h;7f08八個字節
a04d6h:mov a,34h;e534
mov r6,#08H;7e08每一位
a04dah:rrc a;13
jnc a04e7h;500a pc=04dbh+2+0ah=04e7h
push acc;c0e0
mov a,32h;e532
mov p2,a;f5a0
pop acc;d0e0
ajmp a04eah;81ea
a04e7H:mov p2,#07h;75a007;初始化全暗
a04eah:setb p3.1;d2b1CLK=1
nop
clr p3.1;c2b1;CLK
setb p3.0
nop
clr p3.0
djnz r6,a04dah;dee8 pc=04f0h+2+e8h=04dah
djnz r7,a04d6h;dfe2 pc=04f2h+2+e2h=04d6h
djnz r3,a04d4h;dbde pc=04f4h+2+deh=04d4h
lcall a013dh;12013d調用行信號處理
mov a,34h;e534
rr a;03
mov 34h,a;f534
djnz r5,a04d2h;ddd2 pc=04feh+2+d2h=04d2h
;10050000 DCCE D002 EA03 F534 2001 0281 C9C2 0122
djnz r4,a04d0h;dcce pc=0500h+2+ceh=04d0h
pop 02h;d002
mov a,r2;ea
rr a;03
mov 34h,a;f534
jb 01h,a050dh;200102
ajmp a04c9h;81c9
a050dh:clr 01h;c201
ret;22
org 05b1h
;亮 CC1C1
DB 001H,008H,07FH,0FCH,000H,010H,01FH,0F8H
DB 010H,010H,010H,010H,01FH,0F0H,000H,000H
DB 07FH,0FEH,040H,022H,08FH,0F4H,008H,020H
DB 008H,020H,008H,022H,010H,022H,060H,01EH
;彩 CB2CA
DB 001H,000H,00EH,008H,0F1H,018H,049H,020H
DB 02AH,040H,020H,084H,008H,00CH,0FFH,010H
DB 008H,020H,01CH,040H,01BH,004H,029H,00CH
DB 048H,010H,088H,020H,008H,040H,008H,080H
;科 CBFC6
DB 004H,010H,00EH,010H,0F8H,090H,008H,050H
DB 008H,010H,0FEH,090H,008H,050H,01CH,014H
DB 01AH,01EH,029H,0F0H,028H,010H,048H,010H
DB 088H,010H,008H,010H,008H,010H,008H,010H
;技 CBCBC
DB 010H,040H,010H,040H,010H,048H,013H,0FCH
DB 0FCH,040H,010H,040H,010H,040H,013H,0F8H
DB 01AH,008H,031H,010H,0D1H,010H,010H,0A0H
DB 010H,040H,010H,0B0H,051H,00EH,026H,004H
end
;這個PH10有雙接口的ASM程序,P3。0是第二個時鐘,先接在多余的245腳上,然后引到板上就能顯示完整的字了
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -