📄 lcdshow.lis
字号:
.module lcdshow.c
.area data
0000 _flat::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data
.area text
; i -> 0,X
; str -> 3,X
0000 _lcdshow2::
0000 A7FF ais #-1
0002 95 tsx
0003 ; /*文件描述:本文件包含了用HD44780显示相关的3个子程序 *
0003 ; * 1. LCDShow:在LCD上显示32个字符 *
0003 ; * 2. LcdInit:初始化Lcd *
0003 ; * 3. Lcd_Command:执行给定的cmd命令 *
0003 ; *-------------《嵌入式应用技术基础教程》--------------*/
0003 ; //[以下为子程序源代码]
0003 ; //[头文件]
0003 ; #include "GP32C.h" //包含头文件
0003 ; #define LcdData PTB //Lcd显示数据传送口
0003 ; #define LcdData_D DDRB //数据口方向寄存器
0003 ; #define LcdCtrl PTC //Lcd控制信号传送口
0003 ; #define LcdCtrl_D DDRC //控制口方向寄存器
0003 ; #define LcdRS 0 //Lcd寄存器选择信号PTC0
0003 ; #define LcdRW 1 //读写信号接PTC1
0003 ; #define LcdE 2 //Lcd使能信号接PTC2
0003 ; //内部调用子程序
0003 ; void Lcd_Command(unsigned char cmd); //命令执行子程序
0003 ; void LcdInit(void); //Lcd初始化子程序
0003 ; unsigned char flat=0;
0003 ; extern unsigned char clockstr[8]; /*时间显示的LCD显示*/
0003 ; extern unsigned char alartstr[5]; /*闹钟显示的LCD显示*/
0003 ; extern unsigned char datestr[10]; /*日期显示LCD显示*/
0003 ; unsigned char data[3];time[3];
0003 ; /*LcdShow:在HD44780显示屏上显示数据--------------------*
0003 ; *功能描述:在HD44780显示屏上显示str中的32个数据 *
0003 ; *参 数:str:待显示数组 *
0003 ; *返 回:无 *
0003 ; *------------------以上为子程序说明-------------------*/
0003 ; void lcdshow2(unsigned char str[])
0003 ; {
0003 ; unsigned char i;
0003 ; LcdInit(); //调用Lcd初始化子程序
0003 CD0123 jsr _LcdInit
0006 ; //显示第1行16个字符
0006 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0006 1102 bclr #0,0x2
0008 ; LcdCtrl&=~(1<<LcdRW);
0008 1302 bclr #1,0x2
000A ; Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
000A A680 lda #-128
000C 87 psha
000D CD0175 jsr _Lcd_Command
0010 A701 ais #1
0012 95 tsx
0013 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0013 1002 bset #0,0x2
0015 ; LcdCtrl&=~(1<<LcdRW);
0015 1302 bclr #1,0x2
0017 ; for (i=0;i<16;i++) //逐个显示
0017 7F clr ,X
0018 2018 bra L5
001A L2:
001A 3F00 clr *__r0
001C F6 lda ,X
001D EB04 add 4,X
001F B700 sta *__r1
0021 B600 lda *__r0
0023 E903 adc 3,X
0025 B700 sta *__r0
0027 5500 ldhx *__r0
0029 F6 lda ,x
002A 87 psha
002B CD0175 jsr _Lcd_Command
002E A701 ais #1
0030 95 tsx
0031 L3:
0031 7C inc ,X
0032 L5:
0032 F6 lda ,X
0033 A110 cmp #16
0035 25E3 blo L2
0037 ; Lcd_Command(str[i]);
0037 ; //显示第2行16个字符
0037 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0037 1102 bclr #0,0x2
0039 ; LcdCtrl&=~(1<<LcdRW);
0039 1302 bclr #1,0x2
003B ; Lcd_Command(0b11000000); //后7位为DDRAM地址0x40
003B A6C0 lda #-64
003D 87 psha
003E CD0175 jsr _Lcd_Command
0041 A701 ais #1
0043 95 tsx
0044 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0044 1002 bset #0,0x2
0046 ; LcdCtrl&=~(1<<LcdRW);
0046 1302 bclr #1,0x2
0048 ; for (i=16;i<32;i++) //逐个显示
0048 A610 lda #16
004A F7 sta ,X
004B 2018 bra L9
004D L6:
004D 3F00 clr *__r0
004F F6 lda ,X
0050 EB04 add 4,X
0052 B700 sta *__r1
0054 B600 lda *__r0
0056 E903 adc 3,X
0058 B700 sta *__r0
005A 5500 ldhx *__r0
005C F6 lda ,x
005D 87 psha
005E CD0175 jsr _Lcd_Command
0061 A701 ais #1
0063 95 tsx
0064 L7:
0064 7C inc ,X
0065 L9:
0065 F6 lda ,X
0066 A120 cmp #32
0068 25E3 blo L6
006A L1:
006A A701 ais #1
006C .dbline 0 ; func end
006C 81 rts
006D ; i -> 0,X
006D ; strl2 -> 5,X
006D ; strl1 -> 3,X
006D _lcdshow::
006D A7FF ais #-1
006F 95 tsx
0070 ; Lcd_Command(str[i]);
0070 ; }
0070 ; void lcdshow(unsigned char strl1[],unsigned char strl2[])
0070 ; {
0070 ; unsigned char i;
0070 ; LcdInit(); //调用Lcd初始化子程序
0070 CD0123 jsr _LcdInit
0073 ; //显示第1行16个字符
0073 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0073 1102 bclr #0,0x2
0075 ; LcdCtrl&=~(1<<LcdRW);
0075 1302 bclr #1,0x2
0077 ; Lcd_Command(0b10000011); //后7位为DDRAM地址0x03
0077 A683 lda #-125
0079 87 psha
007A CD0175 jsr _Lcd_Command
007D A701 ais #1
007F 95 tsx
0080 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
0080 1002 bset #0,0x2
0082 ; LcdCtrl&=~(1<<LcdRW);
0082 1302 bclr #1,0x2
0084 ; for (i=0;i<16;i++) //逐个显示
0084 7F clr ,X
0085 2018 bra L14
0087 L11:
0087 3F00 clr *__r0
0089 F6 lda ,X
008A EB04 add 4,X
008C B700 sta *__r1
008E B600 lda *__r0
0090 E903 adc 3,X
0092 B700 sta *__r0
0094 5500 ldhx *__r0
0096 F6 lda ,x
0097 87 psha
0098 CD0175 jsr _Lcd_Command
009B A701 ais #1
009D 95 tsx
009E L12:
009E 7C inc ,X
009F L14:
009F F6 lda ,X
00A0 A110 cmp #16
00A2 25E3 blo L11
00A4 ; Lcd_Command(strl1[i]);
00A4 ; //显示第2行16个字符
00A4 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
00A4 1102 bclr #0,0x2
00A6 ; LcdCtrl&=~(1<<LcdRW);
00A6 1302 bclr #1,0x2
00A8 ; Lcd_Command(0b11000100); //后7位为DDRAM地址0x44
00A8 A6C4 lda #-60
00AA 87 psha
00AB CD0175 jsr _Lcd_Command
00AE A701 ais #1
00B0 95 tsx
00B1 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
00B1 1002 bset #0,0x2
00B3 ; LcdCtrl&=~(1<<LcdRW);
00B3 1302 bclr #1,0x2
00B5 ; for (i=16;i<32;i++) //逐个显示
00B5 A610 lda #16
00B7 F7 sta ,X
00B8 2018 bra L18
00BA L15:
00BA 3F00 clr *__r0
00BC F6 lda ,X
00BD EB06 add 6,X
00BF B700 sta *__r1
00C1 B600 lda *__r0
00C3 E905 adc 5,X
00C5 B700 sta *__r0
00C7 5500 ldhx *__r0
00C9 F6 lda ,x
00CA 87 psha
00CB CD0175 jsr _Lcd_Command
00CE A701 ais #1
00D0 95 tsx
00D1 L16:
00D1 7C inc ,X
00D2 L18:
00D2 F6 lda ,X
00D3 A120 cmp #32
00D5 25E3 blo L15
00D7 L10:
00D7 A701 ais #1
00D9 .dbline 0 ; func end
00D9 81 rts
00DA ; i -> 0,X
00DA ; data -> 5,X
00DA ; y -> 4,X
00DA ; x -> 3,X
00DA _lcdshow1::
00DA A7FF ais #-1
00DC 95 tsx
00DD ; Lcd_Command(strl2[i]);
00DD ; }
00DD ;
00DD ; void lcdshow1(unsigned char x,unsigned char y,unsigned char data)
00DD ; {
00DD ; unsigned char i;
00DD ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
00DD 1102 bclr #0,0x2
00DF ; LcdCtrl&=~(1<<LcdRW);
00DF 1302 bclr #1,0x2
00E1 ; Lcd_Command(0b10000000|(x*0x40+y)); //DDRAM地址
00E1 E603 lda 3,X
00E3 62 nsa
00E4 A4F0 and #-16
00E6 48 lsla
00E7 48 lsla
00E8 EB04 add 4,X
00EA AA80 ora #-128
00EC 87 psha
00ED CD0175 jsr _Lcd_Command
00F0 A701 ais #1
00F2 95 tsx
00F3 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
00F3 1002 bset #0,0x2
00F5 ; LcdCtrl&=~(1<<LcdRW);
00F5 1302 bclr #1,0x2
00F7 ; Lcd_Command(data);
00F7 E605 lda 5,X
00F9 87 psha
00FA CD0175 jsr _Lcd_Command
00FD A701 ais #1
00FF 95 tsx
0100 L19:
0100 A701 ais #1
0102 .dbline 0 ; func end
0102 81 rts
0103 ; y -> 3,X
0103 ; x -> 2,X
0103 _guangbiao::
0103 95 tsx
0104 ; }
0104 ;
0104 ; void guangbiao(unsigned char x,unsigned char y)
0104 ; {
0104 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0104 1102 bclr #0,0x2
0106 ; LcdCtrl&=~(1<<LcdRW);
0106 1302 bclr #1,0x2
0108 ; Lcd_Command(0b10000000|(x*0x40+y)); //DDRAM地址 0x03
0108 E602 lda 2,X
010A 62 nsa
010B A4F0 and #-16
010D 48 lsla
010E 48 lsla
010F EB03 add 3,X
0111 AA80 ora #-128
0113 87 psha
0114 CD0175 jsr _Lcd_Command
0117 A701 ais #1
0119 ; Lcd_Command(0b00001111);
0119 A60F lda #15
011B 87 psha
011C CD0175 jsr _Lcd_Command
011F A701 ais #1
0121 95 tsx
0122 L20:
0122 .dbline 0 ; func end
0122 81 rts
0123 ; i -> 0,X
0123 _LcdInit::
0123 A7FF ais #-1
0125 95 tsx
0126 ;
0126 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -