📄 lcdshow.lis
字号:
.module LCDShow.c
.area text
; n -> 4,X
; m -> 3,X
; str -> 2,X
0000 _LcdshowCharacter::
0000 95 tsx
0001 ; /*文件描述:本文件包含了用HD44780显示相关的3个子程序 *
0001 ; * 1. LCDShow:在LCD上显示32个字符 *
0001 ; * 2. LcdInit:初始化Lcd *
0001 ; * 3. Lcd_Command:执行给定的cmd命令 *
0001 ; *-------------《嵌入式应用技术基础教程》--------------*/
0001 ; //[以下为子程序源代码]
0001 ; //[头文件]
0001 ; #include "GP32C.h" //包含头文件
0001 ;
0001 ; #define LcdData PTB //Lcd显示数据传送口
0001 ; #define LcdData_D DDRB //数据口方向寄存器
0001 ; #define LcdCtrl PTC //Lcd控制信号传送口
0001 ; #define LcdCtrl_D DDRC //控制口方向寄存器
0001 ; #define LcdRS 0 //Lcd寄存器选择信号PTC0
0001 ; #define LcdRW 1 //读写信号接PTC1
0001 ; #define LcdE 2 //Lcd使能信号接PTC2
0001 ;
0001 ; //内部调用子程序
0001 ; void Lcd_Command(unsigned char cmd); //命令执行子程序
0001 ; void LcdInit(void); //Lcd初始化子程序
0001 ; //在HD44780显示屏上显示一个字符子函数
0001 ; void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
0001 ; unsigned char ChangeASCII(unsigned char x); //转换数值x为对应的ASCII码子函数
0001 ; //外部变量
0001 ; extern unsigned char time[14];
0001 ; extern unsigned char alarm[14];
0001 ; extern unsigned char Ttime[3];
0001 ; extern int Tdate[3];
0001 ; extern unsigned char Ttime2[3];
0001 ; extern int Tdate2[3];
0001 ;
0001 ;
0001 ;
0001 ;
0001 ;
0001 ; /*LcdshowCharacter:在HD44780显示屏上显示一个字符--------------------*
0001 ; *功能描述:在HD44780显示屏上第m行,第n列显示字符str *
0001 ; *参 数:str:待显示字符 *
0001 ; *返 回:无 *
0001 ; *------------------以上为子程序说明-------------------*/
0001 ; void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n)
0001 ; {
0001 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
0001 1102 bclr #0,0x2
0003 ; LcdCtrl&=~(1<<LcdRW);
0003 1302 bclr #1,0x2
0005 ; Lcd_Command(0b10000000|((m-1)*0x40+(n-1)));
0005 E604 lda 4,X
0007 A001 sub #1
0009 B700 sta *__r0
000B E603 lda 3,X
000D A001 sub #1
000F 62 nsa
0010 A4F0 and #-16
0012 48 lsla
0013 48 lsla
0014 BB00 add *__r0
0016 AA80 ora #-128
0018 87 psha
0019 CD02AB jsr _Lcd_Command
001C A701 ais #1
001E 95 tsx
001F ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,写数据到DDRAM中
001F 1002 bset #0,0x2
0021 ; LcdCtrl&=~(1<<LcdRW);
0021 1302 bclr #1,0x2
0023 ; Lcd_Command(str);
0023 E602 lda 2,X
0025 87 psha
0026 CD02AB jsr _Lcd_Command
0029 A701 ais #1
002B 95 tsx
002C L1:
002C .dbline 0 ; func end
002C 81 rts
002D ; y -> 0,X
002D ; x -> 3,X
002D _ChangeASCII::
002D A7FF ais #-1
002F 95 tsx
0030 ; }
0030 ;
0030 ; unsigned char ChangeASCII(unsigned char x) //转换数值x为对应的ASCII码
0030 ; {
0030 ; unsigned char y;
0030 ; return y=x+0x30;
0030 E603 lda 3,X
0032 AB30 add #48
0034 B700 sta *__r1
0036 F7 sta ,X
0037 4E0000 mov *__r1,*__r0
003A B600 lda *__r1
003C L2:
003C A701 ais #1
003E .dbline 0 ; func end
003E 81 rts
003F ; i -> 0,X
003F ; m -> 6,X
003F ; n -> 5,X
003F ; str -> 3,X
003F _LcdShowString::
003F A7FF ais #-1
0041 95 tsx
0042 ; }
0042 ;
0042 ; //显示大小为n字符数组在第m行的子函数
0042 ; void LcdShowString(unsigned char str[],unsigned char n,unsigned char m)
0042 ; {
0042 ; unsigned char i;
0042 ; LcdInit();
0042 CD0261 jsr _LcdInit
0045 95 tsx
0046 ; for(i=0;i<n;i++)
0046 7F clr ,X
0047 201F bra L7
0049 L4:
0049 F6 lda ,X
004A AB01 add #1
004C 87 psha
004D E606 lda 6,X
004F 87 psha
0050 3F00 clr *__r0
0052 F6 lda ,X
0053 EB04 add 4,X
0055 B700 sta *__r1
0057 B600 lda *__r0
0059 E903 adc 3,X
005B B700 sta *__r0
005D 5500 ldhx *__r0
005F F6 lda ,x
0060 87 psha
0061 CD0000 jsr _LcdshowCharacter
0064 A703 ais #3
0066 95 tsx
0067 L5:
0067 7C inc ,X
0068 L7:
0068 F6 lda ,X
0069 E105 cmp 5,X
006B 25DC blo L4
006D L3:
006D A701 ais #1
006F .dbline 0 ; func end
006F 81 rts
0070 ; i -> 0,X
0070 ; temp -> 3,X
0070 _Lcdshow::
0070 A7FF ais #-1
0072 95 tsx
0073 ; {
0073 ; LcdshowCharacter(str[i],m,(i+1));
0073 ; }
0073 ; }
0073 ;
0073 ;
0073 ;
0073 ; void Lcdshow(unsigned char temp[]) //显示日期时间子程序
0073 ; { unsigned char i;
0073 ; LcdInit();
0073 CD0261 jsr _LcdInit
0076 95 tsx
0077 ; for(i=0;i<4;i++)
0077 7F clr ,X
0078 202A bra L12
007A L9:
007A 3F00 clr *__r0
007C F6 lda ,X
007D EB04 add 4,X
007F B700 sta *__r1
0081 B600 lda *__r0
0083 E903 adc 3,X
0085 B700 sta *__r0
0087 5500 ldhx *__r0
0089 F6 lda ,x
008A 87 psha
008B CD002D jsr _ChangeASCII
008E A701 ais #1
0090 95 tsx
0091 B700 sta *__r1
0093 F6 lda ,X
0094 AB04 add #4
0096 87 psha
0097 A601 lda #1
0099 87 psha
009A B600 lda *__r1
009C 87 psha
009D CD0000 jsr _LcdshowCharacter
00A0 A703 ais #3
00A2 95 tsx
00A3 L10:
00A3 7C inc ,X
00A4 L12:
00A4 F6 lda ,X
00A5 A104 cmp #4
00A7 25D1 blo L9
00A9 ; {
00A9 ; LcdshowCharacter(ChangeASCII(temp[i]),1,(i+4));
00A9 ; }
00A9 ;
00A9 ; LcdshowCharacter('-',1,8);
00A9 A608 lda #8
00AB 87 psha
00AC A601 lda #1
00AE 87 psha
00AF A62D lda #45
00B1 87 psha
00B2 CD0000 jsr _LcdshowCharacter
00B5 A703 ais #3
00B7 95 tsx
00B8 ; LcdshowCharacter(ChangeASCII(temp[4]),1,9);
00B8 E604 lda 4,X
00BA AB04 add #4
00BC B700 sta *__r1
00BE E603 lda 3,X
00C0 A900 adc #0
00C2 B700 sta *__r0
00C4 5500 ldhx *__r0
00C6 F6 lda ,x
00C7 87 psha
00C8 CD002D jsr _ChangeASCII
00CB A701 ais #1
00CD B700 sta *__r1
00CF A609 lda #9
00D1 87 psha
00D2 A601 lda #1
00D4 87 psha
00D5 B600 lda *__r1
00D7 87 psha
00D8 CD0000 jsr _LcdshowCharacter
00DB A703 ais #3
00DD 95 tsx
00DE ; LcdshowCharacter(ChangeASCII(temp[5]),1,10);
00DE E604 lda 4,X
00E0 AB05 add #5
00E2 B700 sta *__r1
00E4 E603 lda 3,X
00E6 A900 adc #0
00E8 B700 sta *__r0
00EA 5500 ldhx *__r0
00EC F6 lda ,x
00ED 87 psha
00EE CD002D jsr _ChangeASCII
00F1 A701 ais #1
00F3 B700 sta *__r1
00F5 A60A lda #10
00F7 87 psha
00F8 A601 lda #1
00FA 87 psha
00FB B600 lda *__r1
00FD 87 psha
00FE CD0000 jsr _LcdshowCharacter
0101 A703 ais #3
0103 ; LcdshowCharacter('-',1,11);
0103 A60B lda #11
0105 87 psha
0106 A601 lda #1
0108 87 psha
0109 A62D lda #45
010B 87 psha
010C CD0000 jsr _LcdshowCharacter
010F A703 ais #3
0111 95 tsx
0112 ; LcdshowCharacter(ChangeASCII(temp[6]),1,12);
0112 E604 lda 4,X
0114 AB06 add #6
0116 B700 sta *__r1
0118 E603 lda 3,X
011A A900 adc #0
011C B700 sta *__r0
011E 5500 ldhx *__r0
0120 F6 lda ,x
0121 87 psha
0122 CD002D jsr _ChangeASCII
0125 A701 ais #1
0127 B700 sta *__r1
0129 A60C lda #12
012B 87 psha
012C A601 lda #1
012E 87 psha
012F B600 lda *__r1
0131 87 psha
0132 CD0000 jsr _LcdshowCharacter
0135 A703 ais #3
0137 95 tsx
0138 ; LcdshowCharacter(ChangeASCII(temp[7]),1,13);
0138 E604 lda 4,X
013A AB07 add #7
013C B700 sta *__r1
013E E603 lda 3,X
0140 A900 adc #0
0142 B700 sta *__r0
0144 5500 ldhx *__r0
0146 F6 lda ,x
0147 87 psha
0148 CD002D jsr _ChangeASCII
014B A701 ais #1
014D B700 sta *__r1
014F A60D lda #13
0151 87 psha
0152 A601 lda #1
0154 87 psha
0155 B600 lda *__r1
0157 87 psha
0158 CD0000 jsr _LcdshowCharacter
015B A703 ais #3
015D 95 tsx
015E ; LcdshowCharacter(ChangeASCII(temp[8]),2,5);
015E E604 lda 4,X
0160 AB08 add #8
0162 B700 sta *__r1
0164 E603 lda 3,X
0166 A900 adc #0
0168 B700 sta *__r0
016A 5500 ldhx *__r0
016C F6 lda ,x
016D 87 psha
016E CD002D jsr _ChangeASCII
0171 A701 ais #1
0173 B700 sta *__r1
0175 A605 lda #5
0177 87 psha
0178 A602 lda #2
017A 87 psha
017B B600 lda *__r1
017D 87 psha
017E CD0000 jsr _LcdshowCharacter
0181 A703 ais #3
0183 95 tsx
0184 ; LcdshowCharacter(ChangeASCII(temp[9]),2,6);
0184 E604 lda 4,X
0186 AB09 add #9
0188 B700 sta *__r1
018A E603 lda 3,X
018C A900 adc #0
018E B700 sta *__r0
0190 5500 ldhx *__r0
0192 F6 lda ,x
0193 87 psha
0194 CD002D jsr _ChangeASCII
0197 A701 ais #1
0199 B700 sta *__r1
019B A606 lda #6
019D 87 psha
019E A602 lda #2
01A0 87 psha
01A1 B600 lda *__r1
01A3 87 psha
01A4 CD0000 jsr _LcdshowCharacter
01A7 A703 ais #3
01A9 ; LcdshowCharacter(':',2,7);
01A9 A607 lda #7
01AB 87 psha
01AC A602 lda #2
01AE 87 psha
01AF A63A lda #58
01B1 87 psha
01B2 CD0000 jsr _LcdshowCharacter
01B5 A703 ais #3
01B7 95 tsx
01B8 ; LcdshowCharacter(ChangeASCII(temp[10]),2,8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -