TMS320LF2407与图形液晶显示模块接口及应用Word格式.docx
《TMS320LF2407与图形液晶显示模块接口及应用Word格式.docx》由会员分享,可在线阅读,更多相关《TMS320LF2407与图形液晶显示模块接口及应用Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
![TMS320LF2407与图形液晶显示模块接口及应用Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/10/ad805e97-f1cb-44fd-bee7-0647c8055432/ad805e97-f1cb-44fd-bee7-0647c80554321.gif)
CALLLCDINIT
LARAR1,#SHIJIAN;
送显示时间
MAR*,AR1
LACL#01H
SACL*+
LACL#1115H
LACL#22H
LACL#4155H
SACL*
CALLLCDP0;
显示一屏信息
WAIT:
NOP
NOP
BWAIT
系统初始化程序
SYSINIT:
SETCINTM
CLRCSXM
CLRCOVM
CLRCCNF;
B0被配置为数据存储空间
LDP#0E0H
SPLK#81FEH,SCSR1;
CLKIN=6M,CLKOUT=24M
SPLK#0E8H,WDCR;
DisableWDT
LDP#0
SPLK#0000H,IMR;
不使能中断
SPLK#0FFFFH,IFR;
清全部中断标志
RET
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LCD初始化及底层程序
描述:
LCD初始化程序
被修改的寄存器:
ACC,LCDCMD
调用到的子程序:
COMWE,CLEAR
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LCDINIT:
LDP#DP_PF2;
DP → 7080h~70FFh
LACLMCRA
AND#000FH;
配置IOPA[4~7],IOPB[0~7]为一般I/O口功能
SACLMCRA
LACLPADATDIR
OR#0F000H;
IOPA4~IOPA7为输出方式
AND#0FF0FH;
IOPA[4~7]=0
SACLPADATDIR
LDP#DP_USER
SPLK#0AEH,LCDCMD;
关显示10101110B
CALLCOMWE
SPLK#00E2H,LCDCMD;
复位11100010B
SPLK#0A4H,LCDCMD;
正常显示驱动10100101B
SPLK#0A9H,LCDCMD;
占空比为1/32,10101001B
SPLK#0A0H,LCDCMD;
ADC选择,正常输出10100000B
SPLK#0C0H,LCDCMD;
显示起始行
CALLCLEAR;
清屏
SPLK#0AFH,LCDCMD;
开显示10101111B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
对E1和E2写控制命令子程序,此程序只用在LCD初始化程序中
ACC,LCD_FLAG
CWE
COMWE:
LACLLCD_FLAG
AND#0FFFEH;
LCD_FLAG.0=0选中E1
SACLLCD_FLAG
CALLCWE
LACLLCD_FLAG
OR#0001H;
LCD_FLAG.0=1选中E2
LDP#DP_USER
写控制命令子程序,向LCD写一个控制字
人口:
LCD_FLAG,LCDCMD
ACC
CWE:
LDP#DP_USER
BITLCD_FLAG,15;
判是E1还是E2?
LCD_FLAG.0=0,则选中E1
BCNDCWE1,TC;
TC=1则选中E2
LDP#DP_PF2
LACLPADATDIR
AND#E2_L;
AND#RW_L;
R/W=0
OR#E1_H;
E1=1
BCWE2
CWE1:
LDP#DP_PF2;
LCD_FLAG=01,则选中E2
AND#E1_L;
AND#RW_L;
OR#E2_H;
E2=1
CWE2:
LACLPADATDIR
AND#A0_L;
A0=0
LACLPBDATDIR
OR#0FF00H;
IOPB[0~7]设置为输出
AND#0FF00H;
IOPB[0~7]=0
ORLCDCMD;
IOPB[0~7]=LCDCMD
SACLPBDATDIR;
送列地址
LDP#DP_USER
写数据子程序,向LCD写一个数据
LCD_FLAG,LCDCMD,LCDDATA
ACC,AR7
DWE:
LDP#DP_USER
SARAR7,LCDCMD;
AR7存放列地址
BITLCD_FLAG,15;
判是E1或E2模块?
LDP#DP_PF2
BCNDDWE1,TC;
LCD_FLAG=0001h,则为E2模块
ANDE2_L;
BDWE2
DWE1:
LACLPADATDIR
DWE2:
OR#A0_H;
A0=1
IOPB[0~7]=0
ORLCDDATA;
IOPB[0~7]=LCDDATA
LDP#DP_PF2
送显示的数据
MAR*,AR7
ADRK#1;
向列地址增1,以便向下一列写数
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
清屏子程序,LCD清屏
ACC,AR0,AR6,AR7,LCD_FLAG,LCDCMD,LCDDATA
CWE,DWE
CLEAR:
LARAR6,#0B8H;
设置页地址代码指令10111000B
;
AR6存放的是页地址
SPLK#00H,LCDDATA;
将00写入
CLR1:
SARAR6,LCDCMD
AND#0FFFEH;
LCD_FLAG.0=0
CALLCWE;
设置页号
LACLLCD_FLAG
OR#0001H;
LCD_FLAG.0=1
LARAR7,#00H;
从00列开始清0,AR7存放的是列地址
LARAR0,#80;
比较值(可以61列)
CLR2:
AND#0FFEH;
SACLLCD_FLAG
CALLDWE;
向E1写入00
MAR*,AR7;
AR7兼作循环计数器
CMPR01;
(AR7<
AR0)?
BCNDCLR2,TC
从00列开始清0
CLR3:
OR#0001H;
CALLDWE;
向E2写入00
MAR*,AR7
CMPR01
BCNDCLR3,TC
LARAR0,#0BCH;
比较值(10111100B)
MAR*,AR6
ADRK#1;
将页号增1,以便向下一页写数
CMPR01;
(AR6)<
(AR0)?
BCNDCLR1,TC
描述:
汉字显示子程序,LCD显示汉字程序
人口:
LCD_FLAG,AR6--页号,AR7--列地址
LCD_FLAG的高8位--字号,LCD_FLAG的低8位为标志位
LCD_FLAG.0=0选中E1,LCD_FLAG.0=1选中E2
ACC,AR0,AR5,AR6,AR7,LCD_FLAG,LCDCMD,LCDDATA,LCDZKTAB
调用到的子程序:
LCDHZ:
LACLLCD_FLAG
LARAR0,#59
CMPR2;
(AR7)>
60?
BCNDHZ0,TC
AND#0FFFEH;
在E1块显示
BHZ00
HZ0:
OR#0001H;
在E2块显示
SBRK#59;
(AR7)—60
HZ00:
SACLLCD_FLAG;
根据AR7的值设置LCD_FLAG.0
AND0FF00H
RPT#7
SFR
SUB#1
SACLLCDZKTAB;
得字号
LTLCDZKTAB
MPY#10H
SPM#0H;
P寄存器无输出移位
PAC;
ACC=PREG
ADD#LCDHZK
SACLLCDZKTAB
LARAR0,#0H
MAR*,AR6
CMPR#2H;
AR6>
AR0则显示在B8位置
BCNDHZPSET0,TC
LARAR6,#0BAH
BHZPSET1
HZPSET0:
LARAR6,#0B8H
HZPSET1:
SARAR6,LCDCMD;
MAR*,AR6
ADRK#1;
页号加1,以准备显示汉字的下半部分
LARAR0,#9
LARAR5,#1;
计数器
HZ1:
LACCLCDZKTAB
TBLRLCDDATA;
表读
LACC#00FFH
ANDLCDDATA
SACLLCDDATA
CALLDWE
TBLRLCDDATA
ADD#1
SACLLCDZKTAB
LACC#0FF00H
RPT#7
MAR*,AR5
计数器加1
CMPR01;
比较,是否该汉字在本页显示完成
BCNDHZ1,TC
SARAR6,LCDCMD
设置汉字下半部分显示的页
SBRK#16
LARAR0,#17;
新比较值
CMPR01;
比较,是否该汉字显示完成
MAR*,AR7;
准备下一个汉字显示
BITLCD_FLAG,15
BCNDHZ2,NTC
ADRK#59;
E2块(AR7)+60
HZ2:
ADRK#16
LARAR0,#0BBH
CMPR00
BCNDHZ3,NTC
LARAR6,#0
BHZRET
HZ3:
LARAR6,#1
HZRET:
SPLK#00,LCD_FLAG
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数字、字母显示子程序,LCD显示数字或字母程序
LCD_FLAG,AR6——页号,AR7——列地址
LCD_FLAG的高8位——字号,LCD_FLAG的低8位为标志位
LCDSZ:
LDP#DP_USER
AND#0FFFEH;
E1块
BCNDSZ0,TC
BSZ00
SZ0:
OR#0001H;
E2块
SZ00:
SACLLCD_FLAG;
AND#0FF00H
MPY#08H
SPM#0H
PAC
ADD#LCDSZK
LARAR0,#0
CMPR#2H
BCNDSZPSET0,TC
BSZPSET1
SZPSET0:
SZPSET1:
页号加1,以准备显示字符的下半部分
LARAR0,#5
SZ1:
比较,是否该数字在本页显示完成
BCNDSZ1,TC
SARAR6,LCDCMD
CALLCWE
MAR*,AR7
SBRK#8
LARAR0,#9;
比较,是否该数字显示完成
BCNDSZ1,TC
MAR*,AR7;
准备下一个字符显示
BCNDSZ2,NTC
ADRK#59;
SZ2:
ADRK#0AH
LARAR0,#0BBH
MAR*,AR6
CMPR00
BCNDSZ3,NTC
LARAR6,#0
BSZRET
SZ3:
LARAR6,#1
SZRET:
显示主屏程序
液晶显示液晶主屏程序,显示日期XX年XX月XX日,显示时间XX:
XX:
XX
为要显示内容寄存器
ACC,AR1,AR6,AR7,LCD_FLAG
CLEAR,LCDSZ,LCDHZ
LCDP0:
CALLCLEAR
LARAR6,#0;
页地址为00BAh
LARAR7,#2H;
列地址为0002h
(年,月日,时,分秒)
LACL*
AND#0F0H;
取“年”的十位数字
RPT#3
SFL;
左移4位得到字号
ORLCD_FLAG
SACLLCD_FLAG
CALLLCDSZ;
显示“年”的十位数字
LARAR7,#0CH
LACL*+
AND#0FH;
取“年”的个位数字
左移8位得到字号
显示“年”的个位数字
LARAR7,#18H
SPLK#01FFH,LCD_FLAG;
显示“年”这个字
CALLLCDHZ
LARAR7,#2AH
AND#