;SMG12864K5标准图形点阵型液晶显示模块的演示程序[ASM51编程语言][四线式串行接口] ;应用产品: SMG12864K5标准图形点阵型液晶显示模块 ; 本演示程序适用于SMG12864K5液晶显示模块与MCS51系列单片机采用四线式串行接口的 ;硬件连线方式。相对于SMG12864L的并行连接方式,这种串行连接方式的优点是连接简单, ;可靠性强.但缺点是由于这种串行连接方式只有写操作,没有读操作,所以对于NT7532芯片在行 ;方向的变量只能取8的倍数,图片及字符的行方向大小也只能取8的倍数,另外由于没有读操作 ;所以不能实现绘图操作.如果在行方向上的图片及字符的大小是8的倍数,且不需要绘图操作, ;建议采用本模块,否则应采用SMG12864T液晶显示模块. ; 本演示程序包括NT7532兼容芯片的四线式串行接口子程序集,NT7532兼容芯片的12864K5 ;液晶显示模块的基本子程序,12864系列图形子程序集,12864系列精简中英文字库子程序集, ;以及SMG12864K5系列标准图形点阵型液晶显示的扩展演示子程序. ; 本演示的内容为,在128列X64行的点阵液晶显示屏上清屏,图片演示,英文字符串演示, ;中文字符串演示,反白显示字符串,全屏显示. ;------------------------------------------------------------------------------- ;创建日期: 2009.11.03 ;软件环境: VW For Windows ;硬件环境: AT89C52 MCU,MCS-51系列 MCU,etc. ;创建人: 褚建军(chujianjun@sunman.cn),谭超(tanchao@sunman.cn). ;技术支持: 电话(0731-84167806,84167807),传真(0731-84167807),网址(www.sunman.cn) ;版权信息: 长沙太阳人电子有限公司版权所有,转载请指明出处. ;参考网页: http:/www.sunman.cn/lcm/product/SMG12864K5.html ;------------------------------------------------------------------------------- ;SMG12864K5产品引脚说明及演示连线 ;PIN1: SI [串行数据输入]----------------P1.0 ;PIN2: SCL [串行移位脉冲输入]------------P1.1 ;PIN3: A0 [数据命令选择 1:数据,0:命令]--P1.2 ;PIN4: RST [复位端 H:正常,L:复位]--------P1.3 ;PIN5: CS [片选信号 低有效]-------------P1.4 ;PIN6: VSS [电源地]----------------------VSS ;PIN7: VDD [电源正极]--------------------VDD ;PIN8: BG [背光源控制端 1:熄灭,0:点亮]--VSS ;注:8031的晶振频率为12MHz. ;请参见http://download.sunman.cn/lcm/product/1/SMG12864K5.pdf ;------------------------------------------------------------------------------- ;以下为产品接口引脚在演示程序中的预定义 ;用户在编写应用程序时,需按自己的实际硬件连线来重新定义 SIPIN BIT P1.0 ;SI对应单片机引脚 SCLPIN BIT P1.1 ;SCL对应单片机引脚 A0PIN BIT P1.2 ;A0对应单片机引脚 RSTPIN BIT P1.3 ;RST对应单片机引脚 CSPIN BIT P1.4 ;CS对应单片机引脚 ;------------------------------------------------------------------------------- ;以下XPOS,YPOS变量用于指示当前操作点的位置的预定义 ;用户在编写应用程序时,需按自己的实际软件程序需要来重新定义 XPOS EQU 20H ;列方向LCD点阵位置指针 YPOS EQU 21H ;行方向LCD点阵位置指针 ;对于SMG12864K5,YPOS只能取8的倍数 CHARIMAGEREVERSE EQU 23H ;字符及图形的反显控制,0(正常显示),1(反显) XDOTS EQU 128 ;图形空间X方向大小 YDOTS EQU 64 ;图形空间Y方向大小 ;------------------------------------------------------------------------------- ORG 0000H ; JMP START ;------------------------------------------------------------------------------- ;以下为精简版中英文字库 ;实际使用时请包含由Sunman精简版中英文字符库代码生成器.exe自动生成的CHARLIB.ASM文 ;文件来替换该部分 ;精简版中英文字符库常量定义 ENGLISHCHARNUMBER EQU 8 ;精简版英文字符库中的英文字符的个数 CHINESECHARNUMBER EQU 11 ;精简版中文字符库中的中文字符的个数 ENGLISHCHARSIZE EQU 8 ;英文字符X方向显示点的个数 CHINESECHARSIZE EQU 16 ;中文字符X方向及中英文字符Y方向显示点的个数 ENGLISHCHARDOTSIZE EQU 16 ;单个英文字符点阵的字节数 CHINESECHARDOTSIZE EQU 32 ;单个中文字符点阵的字节数 ENGLISHCODETAB: ;精简版英文字符库的字符代码表 DB 02eH ;字符001:[.] DB 041H ;字符002:[A] DB 043H ;字符003:[C] DB 04dH ;字符004:[M] DB 04eH ;字符005:[N] DB 053H ;字符006:[S] DB 055H ;字符007:[U] DB 057H ;字符008:[W] CHINESECODETAB: ;精简版中文字符库的字符代码表 DW 0b3a4H ;字符001:[长] DW 0b5e7H ;字符002:[电] DW 0b9abH ;字符003:[公] DW 0c8cbH ;字符004:[人] DW 0c9b3H ;字符005:[沙] DW 0cbbeH ;字符006:[司] DW 0ccabH ;字符007:[太] DW 0cfdeH ;字符008:[限] DW 0d1f4H ;字符009:[阳] DW 0d3d0H ;字符010:[有] DW 0d7d3H ;字符011:[子] ENGLISHCHARDOTTAB: ;精简版英文字符库的字符点阵表 DB 000H,000H,000H,030H,000H,030H,000H,000H ;字符001:[.] DB 000H,000H,000H,000H,000H,000H,000H,000H DB 000H,020H,000H,03cH,0c0H,023H,038H,002H ;字符002:[A] DB 0e0H,002H,000H,027H,000H,038H,000H,000H DB 0c0H,007H,030H,018H,008H,020H,008H,020H ;字符003:[C] DB 008H,020H,008H,010H,038H,008H,000H,000H DB 008H,020H,0f8H,03fH,0f8H,000H,000H,03fH ;字符004:[M] DB 0f8H,000H,0f8H,03fH,008H,020H,000H,000H DB 008H,020H,0f8H,03fH,030H,020H,0c0H,000H ;字符005:[N] DB 000H,007H,008H,018H,0f8H,03fH,000H,000H DB 000H,000H,070H,038H,088H,020H,008H,021H ;字符006:[S] DB 008H,021H,008H,022H,038H,01cH,000H,000H DB 008H,000H,0f8H,01fH,008H,020H,000H,020H ;字符007:[U] DB 000H,020H,008H,020H,0f8H,01fH,000H,000H DB 0f8H,003H,008H,03cH,000H,007H,0f8H,000H ;字符008:[W] DB 000H,007H,008H,03cH,0f8H,003H,000H,000H CHINESECHARDOTTAB: ;精简版中文字符库的字符点阵表 DB 080H,000H,080H,000H,080H,000H,080H,000H ;字符001:[长] DB 0ffH,0ffH,0a0H,040H,0a0H,021H,090H,012H DB 090H,004H,088H,008H,084H,010H,082H,030H DB 080H,060H,080H,020H,080H,000H,000H,000H DB 000H,000H,000H,000H,0f8H,00fH,048H,004H ;字符002:[电] DB 048H,004H,048H,004H,048H,004H,0ffH,03fH DB 048H,044H,048H,044H,048H,044H,048H,044H DB 0f8H,04fH,000H,040H,000H,070H,000H,000H DB 000H,000H,000H,001H,080H,020H,040H,070H ;字符003:[公] DB 030H,028H,00eH,024H,084H,023H,000H,031H DB 000H,010H,00eH,010H,010H,014H,060H,078H DB 0c0H,030H,080H,001H,080H,000H,000H,000H DB 000H,000H,000H,040H,000H,020H,000H,010H ;字符004:[人] DB 000H,00cH,000H,003H,0c0H,000H,03fH,000H DB 0c2H,001H,000H,006H,000H,00cH,000H,018H DB 000H,030H,000H,060H,000H,020H,000H,000H DB 000H,004H,010H,004H,021H,0feH,086H,001H ;字符005:[沙] DB 060H,080H,080H,080H,060H,040H,018H,040H DB 000H,020H,0ffH,023H,000H,010H,008H,008H DB 010H,004H,020H,003H,040H,000H,000H,000H DB 000H,000H,010H,000H,092H,01fH,092H,004H ;字符006:[司] DB 092H,004H,092H,004H,092H,004H,092H,004H DB 092H,004H,092H,00fH,012H,000H,002H,020H DB 002H,040H,0feH,03fH,000H,000H,000H,000H DB 000H,000H,010H,080H,010H,040H,010H,020H ;字符007:[太] DB 010H,010H,010H,00cH,010H,003H,0ffH,008H DB 010H,071H,010H,022H,010H,004H,010H,018H DB 010H,030H,010H,0e0H,010H,040H,000H,000H DB 0feH,0ffH,002H,000H,032H,002H,04eH,004H ;字符008:[限] DB 082H,003H,000H,000H,0feH,0ffH,04aH,040H DB 0caH,020H,04aH,003H,04aH,00cH,04aH,012H DB 07eH,021H,000H,060H,000H,020H,000H,000H DB 000H,000H,0feH,0ffH,002H,004H,022H,008H ;字符009:[阳] DB 05aH,004H,086H,003H,000H,000H,0feH,03fH DB 042H,010H,042H,010H,042H,010H,042H,010H DB 042H,010H,0feH,03fH,000H,000H,000H,000H DB 000H,002H,004H,001H,084H,000H,044H,000H ;字符010:[有] DB 0e4H,0ffH,034H,009H,02cH,009H,027H,009H DB 024H,029H,024H,049H,024H,0c9H,0e4H,07fH DB 004H,000H,004H,000H,004H,000H,000H,000H DB 000H,001H,000H,001H,002H,001H,002H,001H ;字符011:[子] DB 002H,001H,002H,041H,002H,081H,0e2H,07fH DB 012H,001H,00aH,001H,006H,001H,002H,001H DB 000H,001H,080H,001H,000H,001H,000H,000H ;------------------------------------------------------------------------------- ;以下为图片库点阵代码 ;实际使用时请包含由SUNMAN图形点阵代码生成器.EXE自动生成的IMAGELIB.ASM文件来替换该 ;部分 IMG_sunman_32TAB: DB 32,32 DB 000H,0f0H,00fH,000H DB 000H,0feH,07fH,000H DB 080H,00fH,0f6H,001H DB 0c0H,003H,0c6H,003H DB 0e0H,070H,00eH,007H DB 070H,07cH,03eH,00eH DB 038H,07fH,0feH,01cH DB 09cH,07fH,0feH,039H DB 0ccH,07fH,0feH,033H DB 0ceH,07fH,0feH,073H DB 0e6H,07fH,0feH,067H DB 0e6H,007H,0e0H,067H DB 0f3H,007H,0e0H,0cfH DB 0f3H,0cfH,0ffH,0cfH DB 073H,09eH,0ffH,0cfH DB 033H,03cH,0ffH,0cfH DB 033H,03cH,0ffH,0cfH DB 073H,09eH,0ffH,0cfH DB 0f3H,0cfH,0ffH,0cfH DB 0f3H,007H,0e0H,0cfH DB 0e6H,007H,0e0H,067H DB 0e6H,07fH,0feH,067H DB 0ceH,07fH,0feH,073H DB 0ccH,07fH,0feH,033H DB 09cH,07fH,0feH,039H DB 038H,07fH,0feH,01cH DB 070H,07cH,03eH,00eH DB 0e0H,070H,00eH,007H DB 0c0H,063H,0c0H,003H DB 080H,06fH,0f0H,001H DB 000H,0feH,07fH,000H DB 000H,0f0H,00fH,000H ;------------------------------------------------------------------------------- START: MOV SP,#60H MAIN: CALL LCDRESET ;LCD显示初始化子程序 CALL EXSAMPLE ;演示程序 JMP MAIN STR1: DB "SUNMAN",0 STR2: DB "太阳人电子",0 EXSAMPLE: ;演示程序 ;0.演示前的准备,将LCD液晶显示全部清空 MOV CHARIMAGEREVERSE,#0 ;反显关闭 MOV A,#0 ;清屏 CALL LCDFILL ;1.图片测试: 在(16,48)位置显示32点阵SUNMAN图标 MOV XPOS,#0 ;起始位置为第17列 MOV YPOS,#16 ;起始位置为第49行 MOV DPTR,#IMG_sunman_32TAB ; CALL PUTIMAGE ;显示图象 CALL EXDELAY ;延时约600mS ;2.字符串测试: 在(84,48)位置显示"SUNMAN"字符串. MOV XPOS,#56 ;起始位置为第85列 MOV YPOS,#16 ;起始位置为第49行 MOV DPTR,#STR1 ; CALL PUTSTR ;显示字符串 CALL EXDELAY ;延时约600mS ;3.字符串测试: 在(48,64)位置显示"太阳人电子"字符串. MOV XPOS,#40 ;起始位置为第49列 MOV YPOS,#32 ;起始位置为第65行 MOV DPTR,#STR2 ; CALL PUTSTR ;显示字符串 CALL EXDELAY ;延时约600mS ;3.反显测试: 在(48,64)位置反显"太阳人电子"字符串. MOV XPOS,#40 ;起始位置为第49列 MOV YPOS,#32 ;起始位置为第65行 MOV CHARIMAGEREVERSE,#1 MOV DPTR,#STR2 ; CALL PUTSTR ;显示字符串 MOV CHARIMAGEREVERSE,#0 CALL EXDELAY ;延时约600mS ;8.全屏测试: 所有坐标点全部显示. MOV A,#0FFH ;全显 CALL LCDFILL CALL EXDELAY ;延时约600mS RET EXDELAY: ;示例延时子程序 MOV R2,#60 ;延时约600S EDY_PA: MOV R1,#100 EDY_PB: MOV R0,#49 DJNZ R0,$ DJNZ R1,EDY_PB DJNZ R2,EDY_PA RET ;------------------------------------------------------------------------------- ;以下PUTCHAR为字符对象的基本子程序,PUTSTR为字符对象的扩充子程序,GETSTRCHAR, ;GETCHINESECODE,GETCHINESECODECMP,GETENGLISHCODE为字符对象的辅助子程序. ;------------------------------------------------------------------------------- ;子程序名称:PUTCHAR(A,B). ;功能:写单个字符点阵,若B>127且A>127 表示为中文字符 此时中文字符码为A/B;否则为西 ; 文字符A. ;输入:A/B表示中文字符码 或 A表示ASCII西文字符码. ;输出:. ;影响:R0,R1,R2,R3,R4,R5,R6,R7,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- PUTCHAR: ;定位写字符子程序 PUSH DPL PUSH DPH JNB ACC.7,PSR_LBY JNB B.7,PSR_LBY ;CHINESE: CALL GETCHINESECODEPOS ;定位中文字库位置 MOV R6,#CHINESECHARSIZE ;写中文字符点阵 MOV R7,#CHINESECHARSIZE CALL PUTSIZEIMAGE JMP PSR_LBX PSR_LBY: ;ENGLISH: CALL GETENGLISHCODEPOS ;定位西文字库位置 MOV R6,#ENGLISHCHARSIZE ;写西文字符点阵 MOV R7,#CHINESECHARSIZE CALL PUTSIZEIMAGE PSR_LBX: POP DPH POP DPL RET ;------------------------------------------------------------------------------- ;子程序名称:PUTSTR(*S). ;功能:写字符串点阵,若*S=0 表示字符串结束. ;输入:*S. ;输出:. ;影响:R0,R1,R2,R3,R4,R5,R6,R7,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- PUTSTR: ;显示字符串子程序,字符码为0时退出 CALL GETSTRCHAR JZ PSR_LAX CALL PUTCHAR JMP PUTSTR PSR_LAX: RET ;------------------------------------------------------------------------------- ;子程序名称:GETSTRCHAR(*S). ;功能:读单个字符串字符代码,本子程序仅供PUTSTR使用,若*S<128 表示字符为ASCII码, ; A=*S后退出;否则表示为中文汉字代码,B=*S后,再读一个字符置入A中. ;输入:*S(DPTR). ;输出:. ;影响:R0,R1,R2,R3,R4,R5,R6,R7,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- GETSTRCHAR: ;字符串中取字符码子程序 GSC_PA: CLR A MOVC A,@A+DPTR INC DPTR JNB ACC.7,GSC_LAX MOV B,A CLR A MOVC A,@A+DPTR INC DPTR GSC_LAX: RET ;------------------------------------------------------------------------------- ;子程序名称:GETCHINESECODEPOS(A,B). ;功能:根据当前中文字符码查表后计算得到当前中文字符码的字库点阵位置. ;输入:当前中文字符码=A/B[L/H]. ;输出:DPTR=*S,R0/R1=A/B. ;影响:R0,R2,R3,R4,R5,R6,R7,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- GETCHINESECODEPOS: ;根据当前中文字符码设置字库点阵位置子程序 MOV R0,A ;当前字符码置入[R0/R1] MOV R1,B ; MOV R2,#00H ;小值[R2/R3]置0 MOV R3,#00H ; MOV R4,#(CHINESECHARNUMBER-1)%256;大值[R4/R5]置为最后一个位置 MOV R5,#(CHINESECHARNUMBER-1)/256; ;折半查找搜索当前值 GCI_PA: CLR C ;MAX-MIN<->2 MOV A,R4 SUBB A,R2 MOV B,A MOV A,R5 SUBB A,R3 CLR C XCH A,B SUBB A,#2 MOV A,B SUBB A,#0 ; JNC GCI_LAX ;MAX-MIN>=2 ;MAX-MIN<2 MOV A,R2 ;MID=MIN MOV R6,A MOV A,R3 MOV R7,A CALL GETCHINESECODECMP ;MIDCODE<->CURCODE JZ GCI_PAX ;MIDCODE=CURCODE,搜索完成 MOV A,R4 ;MID=MAX MOV R6,A MOV A,R5 MOV R7,A CALL GETCHINESECODECMP ;MIDCODE<->CURCODE JZ GCI_PAX ;MIDCODE=CURCODE,搜索完成 NOP ;CURCODE字符不在字库表中 MOV R6,#00H ;用户可在此设置断点,若程序执行到此 MOV R7,#00H ;请重新生成包含该字符字库文件 JMP GCI_PAX GCI_LAX: MOV A,R4 ;MID=(MIN+MAX)/2 ADD A,R2 MOV R6,A MOV A,R5 ADDC A,R3 RRC A MOV R7,A MOV A,R6 RRC A MOV R6,A ; CALL GETCHINESECODECMP ;MIDCODE<->CURCODE JZ GCI_PAX ;MIDCODE=CURCODE,搜索完成 JC GCI_LBY ;MIDCODECURCODE CLR C ;MAX=MID-1 MOV A,R6 SUBB A,#1 MOV R4,A MOV A,R7 SUBB A,#0 MOV R5,A ; JMP GCI_LBX GCI_LBY: ;MIDCODECURCODE SUBB A,R0 XCH A,B SUBB A,R1 ORL A,B RET ;------------------------------------------------------------------------------- ;子程序名称:GETENGLISHCODEPOS(A). ;功能:根据当前ASCII字符码查表后计算得到当前ASCII字符码的字库点阵位置. ;输入:当前ASCII字符码=A. ;输出:DPTR=*S. ;影响:R0,R2,R3,R4,R5,R6,R7,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- GETENGLISHCODEPOS: ;根据当前ASCII字符码设置字库点阵位置子程序 MOV R0,A ;当前字符码置入[R0] MOV R2,#00H ;MIN[R2]置0 MOV R4,#ENGLISHCHARNUMBER-1 ;MAX[R4]置为最后一个位置 ;折半查找搜索当前值 GEI_PA: CLR C ;MAX-MIN<->2 MOV A,R4 SUBB A,R2 SUBB A,#2 JNC GEI_LAX ;MAX-MIN>=2 ;MAX-MIN<2 MOV DPTR,#ENGLISHCODETAB ;A=MIDCODE MOV A,R2 ;MID=MIN MOV R6,A MOVC A,@A+DPTR ;MIDCODE<->CURCODE XRL A,R0 JZ GEI_PAX ;MIDCODE=CURCODE,搜索完成 MOV A,R4 ;MID=MAX MOV R6,A MOVC A,@A+DPTR ;MIDCODE<->CURCODE XRL A,R0 JZ GEI_PAX ;MIDCODE=CURCODE,搜索完成 NOP ;CURCODE字符不在字库表中 MOV R6,#00H ;用户可在此设置断点,若程序执行到此 ;请重新生成包含该字符字库文件 JMP GEI_PAX GEI_LAX: MOV A,R4 ;MID[R6]=(MIN+MAX)/2 ADD A,R2 RRC A MOV R6,A ; MOV DPTR,#ENGLISHCODETAB ;A=MIDCODE MOV A,R6 MOVC A,@A+DPTR ; CLR C ;MIDCODE<->CURCODE SUBB A,R0 JZ GEI_PAX ;MIDCODE=CURCODE,搜索完成 JC GEI_LBY ;MIDCODECURCODE MOV A,R6 ;MAX=MID-1 MOV R4,A DEC R4 ; JMP GEI_LBX GEI_LBY: ;MIDCODE=XDOTS 则XPOS=0,YPOS=YPOS+YSIZE. ;影响:R0,R1,R2,R3,R4,R5,R6,R7. ;修改日期:2009.10.10 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- PUTSIZEIMAGE: ;显示图形子程序 ;图形的大小,XSIZE=R6,YSIZE=R7 ;图形的大小循环变量LX=R4,LY=R5 ;图形数据1变量A1=R1,图形数据2变量A2=R2 MOV A,YPOS ;第一列数据的BIT位移变量K=R3 MOV R5,#00H ;LX=0 PIM_PA: PUSH YPOS ;保存YPOS位置,准备进行一行数据的处理 MOV R4,#00H ;LY=0 PIM_PB: ;写一行图形数据 CLR A ;A2=*S MOVC A,@A+DPTR MOV R2,A INC DPTR ;S++ MOV A,CHARIMAGEREVERSE ; JZ PIM_LFX ; MOV A,R2 ;A2=~A2 XRL A,#0FFH MOV R2,A PIM_LFX: CALL LCDPOS ;绘图地址指针定位 MOV A,R2 CALL LCDWD MOV A,R4 ;LY+=8 ADD A,#08H MOV R4,A MOV A,YPOS ;YPOS+=8 ADD A,#08H MOV YPOS,A MOV A,R7 ;YSIZE与LY比较 XRL A,R4 JZ PIM_PBX ;YSIZE=LY JMP PIM_PB ;YSIZE<>LY PIM_PBX: POP YPOS ;恢复列首位置 INC XPOS ;位置转下一列 INC R5 ;LX++ MOV A,R6 ;XSIZE与LX比较 XRL A,R5 JZ PIM_PAX ;XSIZE=LX JMP PIM_PA ;XSIZE<>LX PIM_PAX: RET ;------------------------------------------------------------------------------- ;子程序名称:PUTIMAGE(XPOS,YPOS,*S). ;功能:在(XPOS,YPOS)位置绘制XSIZE列及YISZE行点阵的图形*(S+2). ;输入:位置XPOS,YPOS;XSIZE=*S,YSIZE=*(S+1),S=DPTR+2. ;输出:XPOS=XPOS+XSIZE;如果XPOS>=XDOTS 则XPOS=0,YPOS=YPOS+YSIZE. ;影响:R0,R1,R2,R3,R4,R5,R6,R7. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- PUTIMAGE: ;显示图象子程序,在(XPOS,YPOS)位置显示一幅 ;图象,图象地址指针为DPTR, ;第2个字节为Y方向点阵数,随后的数据为图象 ;点阵数据. CLR A ;图象数据的第1个字节为X方向点阵数 MOVC A,@A+DPTR ;XSIZE=*S MOV R6,A ; INC DPTR ;S++ CLR A ;图象数据的第2个字节为Y方向点阵数 MOVC A,@A+DPTR ;YSIZE=*S MOV R7,A ; INC DPTR ;S++ CALL PUTSIZEIMAGE ;绘制图形 RET ;------------------------------------------------------------------------------- ;以下LCDRESET,LCDPOS,LCDFILL为T6963型硬件接口的240128液晶显示模块的基本子程序 ;------------------------------------------------------------------------------- ;子程序名称:LCDRESET() ;功能:液晶显示控制器初始化 ;输入:无 ;输出:无 ;影响:R0,R2,R3,A ;修改日期:2009.11.03 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDRESET: ;液晶显示控制器初始化子程序 CLR RSTPIN ;复位脚产生10ms低脉冲,IC硬件复位 CALL DELAY10MS SETB RSTPIN CALL DELAY10MS ;复位结束后,需等待10ms后方能送指令 MOV A,#0A2H ;设置LCD bias CALL LCDWC MOV A,#0A0H ;设置ADC select CALL LCDWC MOV A,#0C8H ;设置COM反向 CALL LCDWC MOV A,#02FH ;设置电源控制模式 CALL LCDWC MOV A,#060H ;设置显示初始行 CALL LCDWC MOV A,#0AFH ;开显示 CALL LCDWC RET DELAY10MS: ;延时子程序 MOV R2,#1 ;延时约10MS D10_PA: MOV R1,#100 D10_PB: MOV R0,#49 DJNZ R0,$ DJNZ R1,D10_PB DJNZ R2,D10_PA RET ;------------------------------------------------------------------------------- ;子程序名称:LCDPOS(XPOS,YPOS). ;功能:设置(XPOS,YPOS)位置对应的内部RAM地址. ;输入:位置XPOS,YPOS. ;输出:无 ;影响:R0. ;修改日期:2009.11.03 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDPOS: ;设置(XPOS,YPOS)内部RAM地址的子程序 PUSH ACC ;保护ACC的值 ANL YPOS,#3FH ;Y位置范围(0到63) MOV A,YPOS CLR C RRC A CLR C RRC A CLR C RRC A ORL A,#0B0H CALL LCDWC ;LCD行地址设置 ANL XPOS,#7FH ;X位置范围(0到127) MOV A,XPOS ADD A,#1 SWAP A ANL A,#0FH ORL A,#10H CALL LCDWC ;LCD列地址的高四位 MOV A,XPOS ADD A,#1 ANL A,#0FH CALL LCDWC ;LCD列地址的低四位 POP ACC ;恢复ACC的值 RET ;------------------------------------------------------------------------------- ;子程序名称:LCDFILL(A). ;功能:整屏显示A表示的字节数据. ;输入:A. ;输出:B=A. ;影响:R0,R2,R3,R4,R5,A,B. ;修改日期:2009.7.17 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDFILL: ;整屏显示A代表的字节数据子程序 MOV B,A MOV YPOS,#0 ;第1行位置 LFL_PA: MOV XPOS,#0 ;第1列位置 CALL LCDPOS MOV R1,#128 LFL_PB: MOV A,B CALL LCDWD DJNZ R1,LFL_PB MOV A,YPOS ADD A,#8 MOV YPOS,A CJNE A,#64,LFL_PA MOV YPOS,#0 RET ;------------------------------------------------------------------------------- ;以下LCDWC,LCDWD为四线式串行硬件接口的NT7532液晶显示控制器的基本子程序,TRANSBYTE, ;TRANSBIT为内部子程序. ;------------------------------------------------------------------------------- ;子程序名称:LCDWC(A). ;功能:送控制字到液晶显示控制器. ;输入:A. ;输出:无. ;影响:R0. ;修改日期:2009.08.11 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDRD: RET LCDWC: ;送控制字到液晶显示控制器子程序 CLR A0PIN ;A0=0 表示为控制字 SETB CSPIN CLR CSPIN CALL TRANSBYTE ;送字节数据到液晶显示控制器 SETB CSPIN RET ;------------------------------------------------------------------------------- ;子程序名称:LCDWD(A). ;功能:送数据到液晶显示控制器. ;输入:A. ;输出:无. ;影响:R0. ;修改日期:2009.08.11 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- LCDWD: ;送数据到液晶显示控制器子程序 SETB A0PIN ;A0=1 表示为数据 SETB CSPIN CLR CSPIN CALL TRANSBYTE ;送字节数据到液晶显示控制器 SETB CSPIN RET ;------------------------------------------------------------------------------- ;子程序名称:TRANSBYTE(). ;功能:送1字节数据到液晶显示控制器. ;输入:ACC. ;输出:无. ;影响:R0. ;修改日期:2009.08.07 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- TRANSBYTE: ;送1字节数据到液晶显示控制器子程序 MOV R0,#8 TSB_PA: RLC A CALL TRANSBIT DJNZ R0,TSB_PA RLC A RET ;------------------------------------------------------------------------------- ;子程序名称:TRANSBIT(). ;功能:送1位数据到液晶显示控制器. ;输入:C. ;输出:无. ;影响:无. ;修改日期:2009.08.13 ;修改人:chujianjun@sunman.cn,tanchao@sunman.cn ;------------------------------------------------------------------------------- TRANSBIT: ;送1位数据到液晶显示控制器子程序 MOV SIPIN,C ;先送数据到数据口线DI NOP SETB SCLPIN ;再使时钟口线发一个负脉冲 NOP CLR SCLPIN NOP SETB SCLPIN RET