|
; By Paprika
; 2017.10.31
; 程序內(nèi)容: 1開機(jī)顯示四位8確定數(shù)碼管好壞和程序的正確性
;2 摁第一個(gè)鍵顯示班級(jí),第其余三位顯示學(xué)號(hào)的四位 摁動(dòng)四個(gè)數(shù)字鍵依次顯示為1503 1504 0130 2###
CH452_DCLK BIT P2.5 ;串行數(shù)據(jù)時(shí)鐘,上升沿激活
CH452_DIN BIT P2.6 ;串行數(shù)據(jù)輸出,接CH452的數(shù)據(jù)輸入
CH452_LOAD BIT P3.3 ;串行命令加載,上升沿激活
CH452_DOUT BIT P2.7 ;接 CH452 的數(shù)據(jù)輸出
ORG 0000H
START: ACALL CH452_INIT;調(diào)用初始化程序
MOV R5,#00H;R5清零
MOV R4,#00H;R清零
ceshi:;檢測(cè)數(shù)碼管是否OK顯示四位8
MOV B,#0CH ;B是高四位
MOV A,#0fdH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0dH ;B是高四位
MOV A,#0FDH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0eH ;B是高四位
MOV A,#0FDH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0fH ;B是高四位
MOV A,#0FDH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
xianshi: ACALL jiance ;檢測(cè)是否有按鍵按下
SJMP xianshi ;顯示功能
SJMP $
jiance:
MOV C,CH452_DOUT ;判斷是否有按鍵按下,位判斷
JC jiance ;沒有按鍵按下,繼續(xù)檢測(cè)
ACALL CH452_READ ;有按鍵按下,通過452讀值
MOV R1,A
C0: CJNE R1,#44H,C1 ;由鍵碼得
ACALL banji
AJMP TES
C1: CJNE R1,#45H,C2
ACALL xuehao1
AJMP TES
C2: CJNE R1,#46H,C3
ACALL xuehao2
C3: CJNE R1,#47H,jiance ;由鍵碼得
ACALL xuehao3
AJMP TES
TES:
RET
JC jiance
banji:
; 顯示班級(jí) 具體寫入數(shù)據(jù)為: 段選+數(shù)字1503
MOV B,#0CH ;B是高四位
MOV A,#18H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0dH ;B是高四位
MOV A,#0e9H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0eH ;B是高四位
MOV A,#0bdH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0fH ;B是高四位
MOV A,#0d9H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
RET
xuehao1:
; 顯示1504 具體寫入數(shù)據(jù)為: 段選+數(shù)字
MOV B,#0CH ;B是高四位
MOV A,#18H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0dH ;B是高四位
MOV A,#0e9H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0eH ;B是高四位
MOV A,#0bdH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0fH ;B是高四位
MOV A,#078H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
RET
xuehao2:
; 顯示學(xué)號(hào)0130 具體寫入數(shù)據(jù)為: 段選+數(shù)字
MOV B,#0CH ;B是高四位
MOV A,#0bdH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0dH ;B是高四位
MOV A,#018H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0eH ;B是高四位
MOV A,#0d9H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0fH ;B是高四位
MOV A,#0bdH ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
RET
xuehao3:
; 顯示2### 具體寫入數(shù)據(jù)為: 段選+數(shù)字
MOV B,#0cH ;B是高四位
MOV A,#0d5H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0dH ;B是高四位
MOV A,#0H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0eH ;B是高四位
MOV A,#0H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#0fH ;B是高四位
MOV A,#0H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
RET
;**************************************************************************** CH452初始程序
CH452_INIT: ;CH452初始化
CLR CH452_DIN ;先低后高,輸出上升沿通知 CH452 選擇 4 線串行接口
SETB CH452_DCLK;置為默認(rèn)的高電平
SETB CH452_DIN
SETB CH452_LOAD
SETB CH452_DOUT;置為輸入
MOV B,#04H ;B是高四位
MOV A,#03H ;設(shè)置為鍵盤與顯示開 ;A 是低八位
ACALL CH452_WRITE
MOV B,#05H ;設(shè)定顯示參數(shù)
MOV A,#0AH ;設(shè)置no bcd 掃描極限最高1000B
ACALL CH452_WRITE
RET
;****************************************************************************串口通信讀出寫入程序
CH452_WRITE:
CLR CH452_LOAD;命令開始
MOV R7,#08H;設(shè)置循環(huán)次數(shù),將 ACC 中 8 位送出
CH452_WRITE_8:
RRC A;右移,低位在前,高位在后
CLR CH452_DCLK
MOV CH452_DIN,C;送出一位數(shù)據(jù)
SETB CH452_DCLK;產(chǎn)生時(shí)鐘上升沿通知 CH452 輸入位數(shù)據(jù)
DJNZ R7,CH452_WRITE_8;位數(shù)據(jù)未完繼續(xù)
MOV A,B
MOV R7,#04H;設(shè)置循環(huán)次數(shù),將 B 中 高4 位送出
CH452_WRITE_4:
RRC A;低位在前,高位在后
CLR CH452_DCLK
MOV CH452_DIN,C;送出一位數(shù)據(jù)
SETB CH452_DCLK;產(chǎn)生時(shí)鐘上升沿通知 CH452 輸入位數(shù)據(jù)
DJNZ R7,CH452_WRITE_4;位數(shù)據(jù)未完繼續(xù)
SETB CH452_LOAD;產(chǎn)生加載上升沿通知 CH452 處理命令數(shù)據(jù)
RET
; 讀取數(shù)據(jù)
CH452_READ:
CLR CH452_LOAD ;命令開始
MOV A,#07H;讀取鍵值命令的高 4 位 0111B
MOV R7,#04H ;忽略 12 位命令的低 8 位 1111 0000 ;改過#040H
CH452_READ_4: ;讀出按鍵代碼命令
RRC A ;低位在前,高位在后
CLR CH452_DCLK
MOV CH452_DIN,C;送出一位數(shù)據(jù)
SETB CH452_DCLK;產(chǎn)生時(shí)鐘上升沿鎖通知 CH452 輸入位數(shù)據(jù)
DJNZ R7,CH452_READ_4 ;位數(shù)據(jù)未完繼續(xù)
SETB CH452_LOAD;產(chǎn)生加載上升沿通知 CH452處理命令數(shù)據(jù)
CLR A;先清除鍵值單元以便移位
MOV R7,#07H;讀入 7 位鍵值
CH452_READ_7: ;讀入按鍵代碼
MOV C,CH452_DOUT;讀入一位數(shù)據(jù)
CLR CH452_DCLK;產(chǎn)生時(shí)鐘下升沿通知 CH452輸出下一位
RLC A;數(shù)據(jù)移入 ACC,高位在前,低位在后
SETB CH452_DCLK
DJNZ R7,CH452_READ_7 ;位數(shù)據(jù)未完繼續(xù)
RET
|
|