低成本 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
(未完待续)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |