专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

合泰单片机笔段式LCD显示程序+电路图

作者:huqin   来源:本站原创   点击数:  更新时间:2014年02月08日   【字体:

电路图:


;内容:5位LCD笔段式LCD显示
;lcd接法SEG0-PD0...SEG7-PD7,SEG8-PE.0
;COM0-PC0,COM1-PC1,COM2-PC6,COM3-PC7
;完整源码下载:http://www.51hei.com/f/htbdlcd.rar
include HT66F50.inc
ds .section 'data'
COM0 EQU PC.0 ;COM0管脚定义
COM1 EQU PC.1 ;COM0管脚定义
COM2 EQU PC.6 ;COM0管脚定义
COM3 EQU PC.7 ;COM0管脚定义
SEG EQU PD ;SEG管脚定义
SEG9 EQU PE.0 ;seg8管脚定义
SEG01 EQU [90H] ;SEG0与seg1管脚数据寄存器
SEG23 EQU [91H] ;SEG2与seg3管脚数据寄存器
SEG45 EQU [92H] ;SEG4与seg5管脚数据寄存器
SEG67 EQU [93H] ;SEG6与seg7管脚数据寄存器
SEG8 EQU [94H] ;SEG8管脚数据寄存器
SEG_0 EQU [95H] ;SEG管脚数据处理暂存寄存器
LCD1 EQU [9AH] ;第1位LCD显示数据寄存器
LCD2 EQU [9BH] ;第2位LCD显示数据寄存器
LCD3 EQU [9CH] ;第3位LCD显示数据寄存器
LCD4 EQU [9DH] ;第4位LCD显示数据寄存器
LCD5 EQU [9EH] ;第5位LCD显示数据寄存器
cs .section 'code'

ORG 0000H
JMP A1
Q1: 
DC 06FH ; 0
DC 00AH ; 1
DC 073H ; 2
DC 03BH ; 3
DC 01EH ; 4
DC 03DH ; 5
DC 07DH ; 6
DC 00BH ; 7
DC 07FH ; 8
DC 03FH ; 9
DC 05FH ; A
DC 07CH ; B
DC 065H ; C
DC 07AH ; D
DC 075H ; E
DC 055H ; F
A1:
MOV A,08H ;
MOV CP0C,A ;设置管脚不为比较器输入口
MOV CP1C,A ;
MOV A,7FH ;
MOV SCOMC,A ;设置PC.0.1.6.7为COM口并使能
CLR PCC ;设置PC口为输出口
CLR PDC ;设置PD口为输出口
CLR PEC.0 ;设置PE.0为输出口
MOV A,1 ;
MOV LCD1,A ;LCD1显示数据
MOV A,2 ;
MOV LCD2,A ;LCD2显示数据
MOV A,3 ;
MOV LCD3,A ;LCD3显示数据
MOV A,4 ;
MOV LCD4,A ;LCD4显示数据
A2: 
MOV A,LOW Q1 ;数据表地址低8位
MOV TBLP,A 
MOV A,HIGH Q1 ;数据表地址高8位
MOV TBHP,A ;
MOV A,LCD1 ;显示数据地址码
ADDM A,TBLP ;查找数据表所在位置
TABRD SEG01 ;查表并存数据到SEG01
MOV A,LOW Q1 ;
MOV TBLP,A
MOV A,HIGH Q1 ;
MOV TBHP,A ;
MOV A,LCD2 ;
ADDM A,TBLP ;
TABRD SEG23 ;查表并存数据到SEG23
MOV A,LOW Q1 ;
MOV TBLP,A
MOV A,HIGH Q1 ;
MOV TBHP,A ;
MOV A,LCD3 ;
ADDM A,TBLP ;
TABRD SEG45 ;查表并存数据到SEG45
MOV A,LOW Q1 ;
MOV TBLP,A
MOV A,HIGH Q1 ;
MOV TBHP,A ;
MOV A,LCD4 ;
ADDM A,TBLP ;
TABRD SEG67 ;查表并存数据到SEG67
MOV A,LOW Q1 ;
MOV TBLP,A ;
MOV A,HIGH Q1 ;
MOV TBHP,A ;
MOV A,LCD5 ;
ADDM A,TBLP ;
TABRD SEG8 ;查表并存数据到SEG8

CLR COM0EN ;设置管脚为PC.0 
CLR COM0 ;输出低电平
CALL RR0 ;调用seg管脚数据处理程序
MOV A,SEG_0 ;
MOV SEG,A ;将处理后的数据从seg连接口输出
CLR SEG9
CALL M001 ;延时
SET COM0 ;输出高电平
CPL SEG_0 ;将管脚数据取反
MOV A,SEG_0 ;
MOV SEG,A ;数据从seg脚输出
SET SEG9
CALL M001 ;延时
SET COM0EN ;设置管脚为com0口输出VDD/2电压
CALL M001 ;延时
clr COM1EN ;设置管脚为PC.1 
clr com1 ;输出低电平
CALL RR0 ;调用seg管脚数据处理程序
MOV A,SEG_0 ;
MOV SEG,A ;将处理后的数据从seg连接口输出
CLR SEG9
CALL M001 ;延时
SET COM1 ;输出高电平
CPL SEG_0 ;将管脚数据取反
MOV A,SEG_0 ;
MOV SEG,A ;数据从seg脚输出
SET SEG9
CALL M001 ;延时
SET COM1EN ;设置管脚为com1口输出VDD/2电压
CALL M001 ;延时
clr COM2EN ;设置管脚为PC.6 
clr com2 ;输出低电平
CALL RR0 ;调用seg管脚数据处理程序
MOV A,SEG_0 ;
MOV SEG,A ;将处理后的数据从seg连接口输出
CLR SEG9
CALL M001 ;延时
SET COM2 ;输出高电平  
CPL SEG_0 ;将管脚数据取反
MOV A,SEG_0 ;
MOV SEG,A ;数据从seg脚输出
SET SEG9
CALL M001 ;延时
SET COM2EN ;设置管脚为com2口输出VDD/2电压
CALL M001 ;延时
clr COM3EN ;设置管脚为PC.7 
clr com3 ;输出低电平
CALL RR0 ;调用seg管脚数据处理程序
MOV A,SEG_0 ;
MOV SEG,A ;将处理后的数据从seg连接口输出
CLR SEG9
CALL M001 ;延时
SET COM3   ;输出高电平
CPL SEG_0 ;将管脚数据取反
MOV A,SEG_0 ;
MOV SEG,A ;将处理后的数据从seg连接口输出
SET SEG9
CALL M001 ;
SET COM3EN ;设置管脚为com3口输出VDD/2电压
CALL M001 ;延时
JMP A2
;*********************************************************
;********seg数据处理子程序********************************
;*********************************************************
;SEG01中为第一位要显示的编码SEG0与SEG1控制
;SEG23--SEG8分别控制对应的编码
;当扫描COM0时SEG(0-7)输出第0位与第1位 
;当扫描COM1时SEG(0-7)输出第2位与第3位
;当扫描COM2时SEG(0-7)输出第4位与第5位
;当扫描COM3时SEG(0-7)输出第6位与第7位 
;**********************************************************
RR0:
RRC SEG01 ;将SEG01第0位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG01 ;将SEG01第1位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG23 ;将SEG23第0位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG23 ;将SEG23第1位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG45 ;将SEG45第0位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG45 ;将SEG45第1位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG67 ;将SEG67第0位通过带进位C移到seg_0寄存器
RRC SEG_0 ;
RRC SEG67 ;将SEG67第1位通过带进位C移到seg_0寄存器
RRC SEG_0 ;移完时SEG_0寄存器则是扫描COM时所需seg口
RET ;输出状态
;********************************************************* 
; 延时子程序
;********************************************************* 
M001:
MOV A,4
MOV [8AH],A
M002: 
MOV A,250
MOV [8BH],A
SDZ [8BH]
JMP $-1
SDZ [8AH]
JMP M002
RET
END

关闭窗口

相关文章