;功能描述: 微控制器和pc機之間的訪問和資訊的傳遞
;其他說明:
res equ p0.4設定連線方式
a0 equ p0.5
rw equ p0.6
e equ p0.7
lcd_x equ 30h畫圖座標設定
lcd_y equ 31h
count equ 32h
count1 equ 33h
count2 equ 34h
count3 equ 35h
org 0000h
ajmp main
org 0023h
ajmp jieshou
org 0070h
main:
mov scon,#50h ;串列埠初始化
mov tmod,#20h ;
mov th1,0f3h
mov tl1,0f3
mov pcon,#00h ;設定波特率
setb tr1
setb es開放序列中斷
setb ea開放總中斷
mov a,02h 序列口輸入輸出準備
mov p3,a
xunwen:
mov r6,#03h 傳送3次"?"號,即3次3fh
xunwen3:
mov a,#3fh
mov sbuf,a
jnb p3.1,$
clr p3.1
jbc p3.0,yingda
djnz r6,xunwen3 3次完了嗎?完了輸出:請檢查訊號線!
acall jiancha
acall han_wr
nopnop
nopajmp xunwen3
yingda應答訊號
mov a,sbuf應答訊號是"!"嗎?
cjne a,#21h ,bushi
acall huanying
kais:
mov a,#24h
mov sbuf,a傳送請求初始接受資訊
jnb p3.1
clr p3.1
jbc p3.0,chushi準備接受初始資訊
nopnop
nopajmp kais
接收開始,先設計出8*16個矩陣空間
chushi
mov dptr,#1500h 置資料區首址
mov r0,#08h置接收位元組數初值
jixu: mov a,sbuf接收(讀入)資料
mov @dptr,a存放接收資料
inc dptr修改資料區指震
djnz r0, jixu資料塊還沒有接收完,繼續接收
nopnop
nop3個空操作
chushi2:
acall han_wr接收完了,顯示接收資訊
key掃瞄鍵盤,有按鍵嗎 ?沒有繼續顯示功能
mov p1,#0f0h令所有行為低電平,全掃瞄p1.0-p1.3, 列為輸入方式
lcall delay4
key1:
mov a,p1讀取p1口列值
anl a,#0f0h叛別有按鍵按下嗎?
cpl a求反後,有高電平就有鍵按下
jz chushi2無鍵按下時退到顯示功能介面
lcall t10ms延時去抖動
skey:
mov a,#00下面進行行掃瞄,1行1行掃
mov r0,ar0為行計數器,開始為0
mov r1,ar1為列計數器,開始為0
mov r3,#0fehr3 為行掃瞄暫存,低4位為行掃瞄
字skey2:
mov a,r3mov p1,a輸出行掃瞄字,高4位全1
nopnopnop3個nop操作,使輸出穩定
mov a ,p1讀列值
mov r1,a暫存列值
anl a,#0f0h取列值
cpl a高電平則有鍵閉合
s123:
jnz skey3有鍵按下轉skey3,無鍵按下時進行一行掃瞄
inc r0行計數器加1
setb c準備將行掃瞄左移1位,形成下一行掃瞄字
; c=1保證輸出行掃瞄字中高4位全為1,為列輸入作準備
; 低4位中只有1位為0
mov a,r3r3帶進製c左移1位
rlc amov r3,a形成下一行掃瞄字
mov a,r0cjne a,#04h,skey1 最後一行掃(4次)完了嗎?
ret列號解碼
skey3mov a,r1jnb acc.4,skey5jnb acc.5,skey6jnb acc.
6,skey7jnb acc.7,skey8retskey5mov a,#00hmov r2,a存0列號
ajmp dekyskey6mov a,#01hmov r2,a存1號
ajmp dkeyskey7mov a,#02h存2號
mov r2,aajmp dkeyskey8mov a,#03hmov r2,a存3號
ajmp dkey鍵位置解碼
dkeymov a,r0取行號
acall decoderet鍵值解碼
decode:
mov a,r0取行號送a
mov b,#04h每一行按鍵個數
mul ab行號*按鍵數
add a,r2行號*按鍵數+列號=鍵值,在a中
ret有按鍵? 則呼叫鍵碼功能表start :
mov r7,a暫存鍵碼
mov a,#0ffhmov p1,a關閉p1口
mov a,r7取出鍵碼
pl:jnb acc.0,anjian1
jnb acc.1,anjian2
jnb acc.2,anjian3
jnb acc.3,anjian4
jnb acc.4,anjian5
jnb acc.5,anjian6
jnb acc.6,anjian7
jnb acc.7,anjian8
nopnop
nopljmp start
nopnop
nopanjian1:
mov dptr,#1500h
mov a,@dptr傳送按鍵1請求
call
l fasljmp startanjian2:
mov dptr,#1501h
mov a,@dptr傳送按鍵2請求
call fas
ljmp startanjian3:
mov dptr,#1502h
mov a,@dptr傳送按鍵3請求
call fas
ljmp startanjian4:
mov dptr,#1503h
mov a,@dptr傳送按鍵4請求
call fas
ljmp startanjian5:
mov dptr,#1504h
mov a,@dptr傳送按鍵5請求
call fas
ljmp startanjian6:
mov dptr,#1505h
mov a,@dptr傳送按鍵6請求
call fas
ljmp startanjian7:
mov dptr,#1506h
mov a,@dptr傳送按鍵7請求
call fas
ljmp startanjian8:
mov dptr,#1507h
mov a,@dptr傳送按鍵8請求
call fasljmp startfas: mov sbuf,ajnb p3.1clr p3.1ret
jbc p3.0, jieshou等待序列中斷
nopnop
nopmov r7,#0ah
djnz r7,fas
lcall clear_p
mov dptr,#tab3
lcall han
ljmp fas
nopnop
nop串列埠中斷接收
jieshou:
mov a,sbuf接收(讀入)資料
mov dptr,#1500h 置資料區首址
mov r0,#08h置接收位元組數初值
mov @dptr,a存放接收資料
inc dptr修改資料區指震
djnz r0, cxz
clr p3.0
nopnop
noplcall clear_p接收完了,顯示結果
mov dptr,#1500h
lcall han
call delay3
nopnop
nopljmp kais
nopnop
nopend查詢中cxz :
lcall clear_p
mov dptr,#tab4
lcall han
nopnop
nopljmp jieshou歡迎顯示
huanying:
acall han_wr2acall han_wr3ret不是? 處理
bushi:
ajmp xunwen3檢查顯示
jiancha:
mov a,#0e2h
mov p2,a 復位
setb res ;
clr wr
clr a0
lcall delay3
nopnop
nop液晶面板初始化lgs0:
mov a,#0afh ;0afh--基本指令操作
lcall send_i
mov a,#01h ;清除顯示
lcall send_i
mov a,#0a2h ;指定在資料寫入或讀取時,游標的移動方向
lcall send_i ;ddram 的位址計數器(ac)加1
mov a,#0a5h ;開顯示,關游標,不閃爍
lcall send_i
nopnop
ret顯示漢字和字元
;加入160ms的延時,使你能夠看清楚顯示的過程
;根據漢字顯示座標分段寫入
(順序寫入han_wr:
lcall clear_p
han_wra:
mov dptr,#tab1 ;顯示漢字和字元
mov count,#10h ;位址計數器設為16。
mov a,#80h ;第一行起始位址
lcall send_i
lcall qushu
lcall delay4
lcall clear_p
rethan_wr2:
lcall clear_p
han_wr2a:
mov dptr,#tab2a ;顯示漢字和字元
han: mov count,#10h ;位址計數器設為16。
mov a,#80h ;第一行起始位址
lcall send_i
lcall qushu
han_wr2b:
mov dptr,#tab2b ;顯示漢字和字元
mov count,#10h ;位址計數器設為16。
mov a,#90h ;第二行起始位址
lcall send_i
lcall qushu
han_wr2c:
mov dptr,#tab2c ;顯示漢字和字元
mov count,#10h ;位址計數器設為16。
mov a,#88h ;第三行起始位址
lcall send_i
lcall qushu
han_wr2d:
mov dptr,#tab2d ;顯示漢字和字元
mov count,#10h ;位址計數器設為16。
mov a,#98h ;第四行起始位址
lcall send_i
lcall qushu
lcall delay4
nopnop
noplcall clear_p
rethan_wr2e:
lcall clear_p
mov dptr,#tab1 ;顯示漢字和字元
mov count,#10h ;位址計數器設為16。
mov a,#80h ;第一行起始位址
lcall send_i
lcall qushu
lcall delay4
lcall clear_p
retnop
nopnop清屏clear_p:
mov a,#01h ;清屏
lcall send_i
mov a,#34h
lcall send_i
mov a,#30h
lcall send_i
retnop
nopnop延時子程式
delay3:
mov r5,#16h
del31: mov r6,#100h
del32: mov r7,#0ffh
del33: djnz r7,del33
djnz r6,del32
djnz r5,del31
retdelay4:
mov r6,#100h
del41: mov r7,#200h
del42: djnz r7,del42
djnz r6,del41
rett10ms:
mov r7,#10h
t1: mov r6,#0ffh
t2: djnz r6,t2
djnz r7,t1
ret寫指令子程式
;rs=0,rw=0,e=高脈衝,d0-d7=指令碼send_i:
lcall chk_busy
setb res
clr rw
clr a0
mov p2,a
setb e
nopnop
clr e
retnop
nopnop測忙碌子程式
;a0=0,res=0,rw=1,e=h,d0-d7=狀態字chk_busy:
mov p2,#0ffh ;測忙碌子程式
clr a0
clr res
setb rw
setb e
jb p2.7,$
clr e
ret顯示漢字和字元
;加入160ms的延時,使你能夠看清楚顯示的過程
;根據漢字顯示座標分段寫入(順序寫入
查表取資料送顯示qushu:
clr a
movc a,@a+dptr ;查表取資料
lcall send_d ;送顯示
inc dptr
lcall delay4
djnz count,qushu
ret寫資料子程式
;a0=1,res=0,rw=0,e=高脈衝,d0-d7=資料send_d:
lcall chk_busy ;寫資料子程式
setb a0
clr res
clr rw
mov p0,a
setb e
nopnop
nopclr eret
第五章彙編檔案文獻的查選三改稿
第一節彙編檔案文獻的查詢 一 檔案文獻查詢的意義和原則 二 查詢檔案文獻策略 三 查詢檔案文獻的方法 四 查詢檔案文獻的組織分工 第二節選材的意義和原則 一 選材工作的實質 二 選材的意義 三 選材的原則 第三節選材的基本要求 一 去偽存真,選擇真實可靠的材料 二 透過現象看到本質,選擇能說明問題本...