低成本 SN8P2624 I/O 直接驅動 LCD 液晶屏幕: 完整的源程序如下: /*;**************************************************** SN2624 單片機IO口直接驅動LCD 試驗程序 ;****************************************************/ /* Compile ...2007-12-21 5:30 E:\07_SN\2604_24\IOLCD\IOLCD.ASM Link ... EPROM Check Sum is CF63. Security Check Sum is 6493. Chip SN8P2624 has maximum program ROM size : 2044 The program has used size : 381 [0x17D] The program remain free size : 1663 for use 利用單片機IO口驅動3位LCD已經成功! */ ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CHIP SN8P2624 //{{SONIX_CODE_OPTION .Code_Option Noise_Filter Enable .Code_Option Reset_Pin P02 .Code_Option Watch_Dog Disable ; Disable Watchdog .Code_Option High_Clk 12M_X'tal ; Crystal/Resonator: 10Mhz~16Mhz .Code_Option Fcpu #2 ; Fcpu = Fosc/4 .Code_Option Security Enable //}}SONIX_CODE_OPTION ;===================================== .NOLIST INCLUDE e:\07_sn\xsdzmacro.H INCLUDE e:\07_sn\snmacrox3.h ; INCLUDE E:\07_SN\2604_24\IOLCD\IOLCD_0.ASM .LIST ;=============================================== .DATA HIH DS 1 HIL DS 1 LOH DS 1;/滯后,回差 LOL DS 1;/滯后,回差 TZ0D DS 1 DP DS 1 XISCH DS 1;/AD 系數 XISCL DS 1
XISH DS 1;/AD 系數 XISL DS 1
SZ03S DS 1 SZ05S DS 1 KEYJS DS 1 KEY10S DS 1;按鍵退出時間
XSQW DS 1 XSBW DS 1 ;顯示數碼管寄存器 XSSW DS 1 XSGW DS 1
TQW DS 1 TBW DS 1 TSW DS 1 TGW DS 1 JJJS DS 1
JS0D DS 1;測量零點計數
TESS DS 1 TESH DS 1 TESL DS 1 ADJS DS 1
ADH DS 1 ADL DS 1
GNDH DS 1 GNDL DS 1 VINL DS 1 VINH DS 1 VINS DS 1 VREL DS 1 VREH DS 1 VRES DS 1 XSH DS 1 XSL DS 1 DVL DS 1 ;低溫顯示寄存器 DVH DS 1 ;------------------------- TEMP0 DS 1 TEMP DS 1 XSJS DS 1 CLJS DS 1 TTH DS 1 TTL DS 1 JS00 DS 1 SEG0H DS 1;寫入LCD數據 SEG1H DS 1 SEG2H DS 1 SEG0 DS 1;寫入LCD數據 SEG1 DS 1 SEG2 DS 1 LCDJS DS 1
ARD24 DS 1;讀寫地址 RE24 DS 1;讀出數據 WR24 DS 1;寫入數據
SFL DS 1 SFL0 DS 1 SFL1 DS 1 SFL2 DS 1 ;------------------------------ FSS05S EQU SFL.0 FK03S EQU SFL.1 F_DIS EQU SFL.2 FK05S EQU SFL.3 F_ENOUT EQU SFL.4 FADCL EQU SFL.5 F_01 EQU SFL.6 FADZH EQU SFL.7
FADAB EQU SFL0.0 FK2S EQU SFL0.1 FM00 EQU SFL0.2 FVIN EQU SFL0.3 FVINX2 EQU SFL0.4 Fdataxt EQU SFL0.5;/數據相同 F_READ EQU SFL0.6 ;AD讀數通知 F_CLKS EQU SFL0.7;測量開始標志
FHHH EQU SFL1.0 FWR24C EQU SFL1.1 F24CZ EQU SFL1.2 FSETXS EQU SFL1.3;/設置系數 FPSD EQU SFL1.4;設定鍵標志 F_TZ0D EQU SFL1.5 FLLL EQU SFL1.6 ;------------------------------ ;引腳定義 ;HC4051控制 PHA EQU FP16 PHB EQU FP17 ;10P.充放電電,設置為開漏輸出 P_CFD EQU FP10 ;數碼管驅動 P_QW EQU FP54 P_BW EQU FP51 P_SW EQU FP50 P_GW EQU FP52 ;電存儲器 P_24SDA EQU FP14;數據--------可能與印刷板反了 P_24SDAM EQU FP14M P_24SCL EQU FP15; 時鐘 P_24SCLM EQU FP15M ;按鍵 PSD EQU FP02;/28P PADD EQU FP11;/11P PDEC EQU FP12;/12P ;控制輸出 POUT0 EQU FP13;/13P POUT1 EQU FP53;/9P ;===================================== .CODE ORG 0 ;代碼起始處 JMP RESET ;復位向量;地址4至7為保留 ORG 8 JMP ISR ;中斷向量 ORG 10H ;========================================= LED_TABLE: B0MOV Y,#TABLELED$M B0MOV Z,#TABLELED$L B_ADDZ: ADD Z,A BTS0 FC ; 檢查進位標志C INCMS Y NOP MOVC RET TABLELED:;b,a,f,c,g,e,h,d----d 后有一個圖標位----0=點亮 DW 000010101B ;0 /b,a,f,g,c,e,h,d----d 后有一個圖標位 DW 011011111B ;1 DW 001100101B ;2 DW 001001101B ;3 DW 010001111B ;4 DW 100001101B ;5 DW 100000101B ;6 DW 001011111B ;7 DW 000000101B ;8 ;b,a,f,c,g,e,h,d----d 后有一個圖標位 DW 000001101B ;9 DW 111111111B ;滅 10 DW 010000111B ;H 11 DW 110110101B ;L 12 DW 111101111B ;- 13 ;====================================================== ;SN8P2624:[;OTP ROM : 2K*16 bits.;RAM : 64*8 bits.] ;SN8P2604:[;OTP ROM : 4K*16 bits.;RAM : 128*8 bits.] RESET:;重置 MOV A,#07FH ;初始化堆棧指針和 B0MOV STKP,A ;禁止全局中斷 CLR PFLAG ;PFLAG = X,X,X,X,X,C,DC,Z MOV A,#00H ;初始化系統模式 B0MOV OSCM,A @RST_WDT ; 清看門狗計數器 CLRRAM:;清除 RAM CLR Y B0MOV Z,#3FH ;2624=64 ; B0MOV Z,#080H ;2604=128,這里出現錯誤會造成上電有直接進入狀態的情況 CLRRAM0: CLR @YZ DECMS Z JMP CLRRAM0 CLR @YZ ;************************************** ; 系統初始化程序,; 初始化I/O, 定時器,中斷等 SYSINIT: MOV A,#00H MOV P0M,A MOV P5,A MOV A,#0FFH ; 使能P0、P1、P2、P5 口的上拉電阻,
MOV P2M,A;全部輸出 MOV P2,A MOV P1,A MOV A,#00H MOV P1M,A MOV P5M,A;全部輸出 BSET FP50M MOV A,#0FFH ; B0MOV P1UR,A ;作為COM端口不能上拉! B0MOV P2UR,A B0MOV P5UR,A B0MOV P0UR,A ; ;初始化TC1 B0BCLR FTC1IEN ; 禁止TC1 中斷 B0BCLR FTC1ENB ; 停止TC1 計數 MOV A,#70H ;最快速度 ; MOV A,#60H ;最快速度,太快不穩 ; MOV A,#50H ;最快速度,太快不穩 B0MOV TC1M,A ; TC1 定時模式Fcpu/2 MOV A,#00 ;TC1 初始值 ;+5V:20R,12M晶體/4=62.4KHZ,產生 -5.04V電壓 B0MOV TC1C,A ; 定時中斷為10ms B0MOV TC1R,A B0BCLR FTC1IRQ ; 清中斷標志 B0BSET FALOAD1;使能 TC1自動重裝功能 ; B0BSET FTC1ENB ; 開始TC1 計數 ; B0BSET FTC1OUT;使能 TC1 輸出到 P5.3和禁止P5.3 I/O 功能 ;初始化T0 B0BCLR FT0IEN ;關TC1中斷 B0BCLR FT0ENB ;關TC1計數模式 B0BCLR FT0IRQ ;清TC1中斷申請
MOV A,#00H ;編譯選項16/4=4.0MHZ ; MOV A,#20H ;編譯選項12/4=3.0MHZ MOV T0M,A;盡量使用最長的中斷間隔 MOV_ T0C,#00;/131 B0BSET FT0IEN ;使能TC1中斷 B0BCLR FT0IRQ ;清TC1中斷申請 B0BSET FT0ENB ;開TC1計時器 BSET F_DIS BSET FGIE ;總中斷使能 ;============================================================ B_LOOP:;1,2,;顯示1,2,的SEG0對應筆段,0=點亮,a4 是千位的筆段..... /* MOV_ SEG0,#11001011B;**b3,a3,f3,b4,a4,F4 MOV_ SEG1,#11100011B;**c3,g3,e3,c4,g4,e4 MOV_ SEG2,#11101111B;***,d3,*,*,d4,* ;需要3個表格,它們對應某COM端口有效時的筆段代碼 ;如果筆段超過8個,還需要使用2個寄存器來轉移 ;COM端口:由+5V經過一幾百K電阻,再由GND經過一幾百K電阻,構成2.5V電平 ;這個電平就是關閉筆段的電平.就是說,只要把端口設置為輸入模式,就會關閉所有筆段. ;筆段電平僅僅有0V和5V的選擇. */ ;顯示4,7,5,的SEG0對應筆段,0=點亮 ;2007-12-20 18:44 成功顯示 475 3位數字 /* MOV_ SEG0,#00001010B;P50-b2, a2,f2,b3,a3,f3,b4,a4,f4 BSET SEG0H.0 MOV_ SEG1,#01011001B;P50-C2, g2,e2,c3,g3,e3,c4,g4,e4 BCLR SEG1H.0 MOV_ SEG2,#01111111B;P50-LO, d2,dp2,*,d3,*,*,d4,* BSET SEG2H.0
;471 MOV_ SEG0,#11001010B;P50-b2, a2,f2,b3,a3,f3,b4,a4,f4 BCLR SEG0H.0 MOV_ SEG1,#11011001B;P50-C2, g2,e2,c3,g3,e3,c4,g4,e4 BCLR SEG1H.0 MOV_ SEG2,#11111111B;P50-LO, d2,dp2,*,d3,*,*,d4,* BSET SEG2H.0
;411 MOV_ SEG0,#11011010B;P50-b2, a2,f2,b3,a3,f3,b4,a4,f4 BCLR SEG0H.0 MOV_ SEG1,#11011001B;P50-C2, g2,e2,c3,g3,e3,c4,g4,e4 BCLR SEG1H.0 MOV_ SEG2,#11111111B;P50-LO, d2,dp2,*,d3,*,*,d4,* BSET SEG2H.0
JMP B_LOOP */ BTS1 FK03S JMP B_LOOP BCLR FK03S BCLR FGIE ;總中斷使能 MOV_ XSBW,#1 MOV_ XSSW,#9 MOV_ XSGW,#1;1X2X3X4X,0,5,6_OK,7X,8,9_OK,
CLR SEG0 CLR SEG1 CLR SEG2 CLR SEG0H CLR SEG1H CLR SEG2H
MOV A,XSGW CALL LED_TABLE CALL B_MOV8W
MOV A,XSSW CALL LED_TABLE CALL B_MOV8WA
MOV A,XSBW CALL LED_TABLE CALL B_MOV8WA BSET FGIE ;總中斷使能 JMP B_LOOP
(未完待續)
|