?? lcd.lis
字號:
.module LCD.c
.area text
; i -> 0,X
; str -> 3,X
0000 _lcdshow::
0000 A7FF ais #-1
0002 95 tsx
0003 ; #include "LCD.h"
0003 ; /*LcdShow:在HD44780顯示屏上顯示數據--------------------*
0003 ; *功能描述:在HD44780顯示屏上顯示str中的32個數據 *
0003 ; *參 數:str:待顯示數組 *
0003 ; *返 回:無 *
0003 ; *------------------以上為子程序說明-------------------*/
0003 ; void lcdshow(unsigned char str[])
0003 ; {
0003 ; unsigned char i;
0003 ; LcdInit(); //調用Lcd初始化子程序
0003 CD00C3 jsr _LcdInit
0006 ; //顯示第1行
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 CD0115 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<10;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 CD0115 jsr _Lcd_Command
002E A701 ais #1
0030 95 tsx
0031 L3:
0031 7C inc ,X
0032 L5:
0032 F6 lda ,X
0033 A10A cmp #10
0035 25E3 blo L2
0037 ; Lcd_Command(str[i]);
0037 ; //顯示第2行
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 CD0115 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=10;i<18;i++) //逐個顯示
0048 A60A lda #10
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 CD0115 jsr _Lcd_Command
0061 A701 ais #1
0063 95 tsx
0064 L7:
0064 7C inc ,X
0065 L9:
0065 F6 lda ,X
0066 A112 cmp #18
0068 25E3 blo L6
006A L1:
006A A701 ais #1
006C .dbline 0 ; func end
006C 81 rts
006D ; i -> 0,X
006D ; n -> 5,X
006D ; str -> 3,X
006D _lcdshow1::
006D A7FF ais #-1
006F 95 tsx
0070 ; Lcd_Command(str[i]);
0070 ; }
0070 ; void lcdshow1(unsigned char str[],unsigned char n)
0070 ; {
0070 ; unsigned char i;
0070 ; LcdInit(); //調用Lcd初始化子程序
0070 CD00C3 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(0b10000000); //后7位為DDRAM地址0x00
0077 A680 lda #-128
0079 87 psha
007A CD0115 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<n;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 CD0115 jsr _Lcd_Command
009B A701 ais #1
009D 95 tsx
009E L12:
009E 7C inc ,X
009F L14:
009F F6 lda ,X
00A0 E105 cmp 5,X
00A2 25E3 blo L11
00A4 L10:
00A4 A701 ais #1
00A6 .dbline 0 ; func end
00A6 81 rts
00A7 ; str -> 2,X
00A7 _lcdshow2::
00A7 95 tsx
00A8 ; Lcd_Command(str[i]);
00A8 ; /*顯示第2行16個字符
00A8 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
00A8 ; LcdCtrl&=~(1<<LcdRW);
00A8 ; Lcd_Command(0b11000000); //后7位為DDRAM地址0x40
00A8 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
00A8 ; LcdCtrl&=~(1<<LcdRW);
00A8 ; for (i=16;i<32;i++) //逐個顯示
00A8 ; Lcd_Command(str[i]);*/
00A8 ; }
00A8 ;
00A8 ; void lcdshow2(unsigned char str)
00A8 ; {
00A8 ; // unsigned char i;
00A8 ; //LcdInit(); //調用Lcd初始化子程序
00A8 ; //顯示第2行16個字符
00A8 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
00A8 1102 bclr #0,0x2
00AA ; LcdCtrl&=~(1<<LcdRW);
00AA 1302 bclr #1,0x2
00AC ; //Lcd_Command(0b00010100); //光標右移一個字符位,AC自
00AC ; Lcd_Command(0b00000110); //光標右移一個字符位,AC自
00AC A606 lda #6
00AE 87 psha
00AF CD0115 jsr _Lcd_Command
00B2 A701 ais #1
00B4 95 tsx
00B5 ; // 動加1 // 動加1
00B5 ; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
00B5 1002 bset #0,0x2
00B7 ; LcdCtrl&=~(1<<LcdRW);
00B7 1302 bclr #1,0x2
00B9 ; //for (i=0;i<16;i++) //逐個顯示
00B9 ; Lcd_Command(str);
00B9 E602 lda 2,X
00BB 87 psha
00BC CD0115 jsr _Lcd_Command
00BF A701 ais #1
00C1 95 tsx
00C2 L15:
00C2 .dbline 0 ; func end
00C2 81 rts
00C3 ; i -> 0,X
00C3 _LcdInit::
00C3 A7FF ais #-1
00C5 95 tsx
00C6 ; }
00C6 ; /*LcdInit:初始化Lcd------------------------------------*
00C6 ; *功 能:初始化Lcd(HD44780),設置顯示方式,清屏,AC自動+1 *
00C6 ; *參 數:無 *
00C6 ; *返 回:無 *
00C6 ; *-----------------------------------------------------*/
00C6 ; void LcdInit(void)
00C6 ; {
00C6 ; unsigned char i;
00C6 ; LcdData_D=0b11111111; //數據口為輸出
00C6 A6FF lda #-1
00C8 B705 sta 0x5
00CA ; LcdCtrl_D|=(1<<LcdE); //控制口低三位為輸出
00CA 1406 bset #2,0x6
00CC ; LcdCtrl_D|=(1<<LcdRS);
00CC 1006 bset #0,0x6
00CE ; LcdCtrl_D|=(1<<LcdRW);
00CE 1206 bset #1,0x6
00D0 ; LcdCtrl|=(1<<LcdE); //E=1
00D0 1402 bset #2,0x2
00D2 ; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
00D2 1102 bclr #0,0x2
00D4 ; LcdCtrl&=~(1<<LcdRW);
00D4 1302 bclr #1,0x2
00D6 ; Lcd_Command(0b00111000); //8位數據接口,2行,5*7點陣
00D6 A638 lda #56
00D8 87 psha
00D9 CD0115 jsr _Lcd_Command
00DC A701 ais #1
00DE ; Lcd_Command(0b00001000); //關顯示,關光標顯示,不閃爍
00DE A608 lda #8
00E0 87 psha
00E1 CD0115 jsr _Lcd_Command
00E4 A701 ais #1
00E6 ; Lcd_Command(0b00000001); //清屏
00E6 A601 lda #1
00E8 87 psha
00E9 CD0115 jsr _Lcd_Command
00EC A701 ais #1
00EE 95 tsx
00EF 7F clr ,X
00F0 2001 bra L20
00F2 L17:
00F2 L18:
00F2 7C inc ,X
00F3 L20:
00F3 ; for(i=0;i<250;i++); //延時>1.6ms
00F3 F6 lda ,X
00F4 A1FA cmp #-6
00F6 25FA blo L17
00F8 7F clr ,X
00F9 2001 bra L24
00FB L21:
00FB L22:
00FB 7C inc ,X
00FC L24:
00FC ; for(i=0;i<250;i++);
00FC F6 lda ,X
00FD A1FA cmp #-6
00FF 25FA blo L21
0101 ; Lcd_Command(0b00010100); //光標右移一個字符位,AC自
0101 A614 lda #20
0103 87 psha
0104 CD0115 jsr _Lcd_Command
0107 A701 ais #1
0109 ; // 動加1
0109 ; Lcd_Command(0b00001100); //開顯示,關光標顯示,不閃爍
0109 A60C lda #12
010B 87 psha
010C CD0115 jsr _Lcd_Command
010F A701 ais #1
0111 95 tsx
0112 L16:
0112 A701 ais #1
0114 .dbline 0 ; func end
0114 81 rts
0115 ; i -> 0,X
0115 ; cmd -> 3,X
0115 _Lcd_Command::
0115 A7FF ais #-1
0117 95 tsx
0118 ; }
0118 ; /*Lcd_Command:執行給定的cmd命令------------------------*
0118 ; *功 能:執行給定的cmd命令,且延時 *
0118 ; *參 數:cmd:待執行的命令 *
0118 ; *返 回:無 *
0118 ; *-----------------------------------------------------*/
0118 ; void Lcd_Command(unsigned char cmd)
0118 ; {
0118 7F clr ,X
0119 2001 bra L29
011B L26:
011B L27:
011B 7C inc ,X
011C L29:
011C ; unsigned char i;
011C ; for (i=0;i<20;i++); //等待>40us
011C F6 lda ,X
011D A114 cmp #20
011F 25FA blo L26
0121 ; LcdData=cmd; //把指令碼送到Lcd數據傳送口
0121 E603 lda 3,X
0123 B701 sta 0x1
0125 ; LcdCtrl|=(1<<LcdE); //Lcd開始接收數據
0125 1402 bset #2,0x2
0127 ; asm("NOP");
0127 9D NOP
0128 ; asm("NOP");
0128 9D NOP
0129 ; asm("NOP");
0129 9D NOP
012A ; LcdCtrl&=~(1<<LcdE); //Lcd結束接收數據
012A 1502 bclr #2,0x2
012C 7F clr ,X
012D 2001 bra L33
012F L30:
012F L31:
012F 7C inc ,X
0130 L33:
0130 ; for (i=0;i<20;i++); //等待>40us
0130 F6 lda ,X
0131 A114 cmp #20
0133 25FA blo L30
0135 L25:
0135 A701 ais #1
0137 .dbline 0 ; func end
0137 81 rts
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -