?? lcd.s
字號:
.module LCD.c
.area text
; i -> 0,X
; str -> 3,X
_lcdshow::
ais #-1
tsx
; #include "LCD.h"
; /*LcdShow:在HD44780顯示屏上顯示數據--------------------*
; *功能描述:在HD44780顯示屏上顯示str中的32個數據 *
; *參 數:str:待顯示數組 *
; *返 回:無 *
; *------------------以上為子程序說明-------------------*/
; void lcdshow(unsigned char str[])
; {
; unsigned char i;
; LcdInit(); //調用Lcd初始化子程序
jsr _LcdInit
; //顯示第1行
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b10000000); //后7位為DDRAM地址0x00
lda #-128
psha
jsr _Lcd_Command
ais #1
tsx
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
bset #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; for (i=0;i<10;i++) //逐個顯示
clr ,X
bra L5
L2:
clr *__r0
lda ,X
add 4,X
sta *__r1
lda *__r0
adc 3,X
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _Lcd_Command
ais #1
tsx
L3:
inc ,X
L5:
lda ,X
cmp #10
blo L2
; Lcd_Command(str[i]);
; //顯示第2行
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b11000000); //后7位為DDRAM地址0x40
lda #-64
psha
jsr _Lcd_Command
ais #1
tsx
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
bset #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; for (i=10;i<18;i++) //逐個顯示
lda #10
sta ,X
bra L9
L6:
clr *__r0
lda ,X
add 4,X
sta *__r1
lda *__r0
adc 3,X
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _Lcd_Command
ais #1
tsx
L7:
inc ,X
L9:
lda ,X
cmp #18
blo L6
L1:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
; n -> 5,X
; str -> 3,X
_lcdshow1::
ais #-1
tsx
; Lcd_Command(str[i]);
; }
; void lcdshow1(unsigned char str[],unsigned char n)
; {
; unsigned char i;
; LcdInit(); //調用Lcd初始化子程序
jsr _LcdInit
; //顯示第1行16個字符
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b10000000); //后7位為DDRAM地址0x00
lda #-128
psha
jsr _Lcd_Command
ais #1
tsx
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
bset #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; for (i=0;i<n;i++) //逐個顯示
clr ,X
bra L14
L11:
clr *__r0
lda ,X
add 4,X
sta *__r1
lda *__r0
adc 3,X
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _Lcd_Command
ais #1
tsx
L12:
inc ,X
L14:
lda ,X
cmp 5,X
blo L11
L10:
ais #1
.dbline 0 ; func end
rts
; str -> 2,X
_lcdshow2::
tsx
; Lcd_Command(str[i]);
; /*顯示第2行16個字符
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
; LcdCtrl&=~(1<<LcdRW);
; Lcd_Command(0b11000000); //后7位為DDRAM地址0x40
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
; LcdCtrl&=~(1<<LcdRW);
; for (i=16;i<32;i++) //逐個顯示
; Lcd_Command(str[i]);*/
; }
;
; void lcdshow2(unsigned char str)
; {
; // unsigned char i;
; //LcdInit(); //調用Lcd初始化子程序
; //顯示第2行16個字符
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; //Lcd_Command(0b00010100); //光標右移一個字符位,AC自
; Lcd_Command(0b00000110); //光標右移一個字符位,AC自
lda #6
psha
jsr _Lcd_Command
ais #1
tsx
; // 動加1 // 動加1
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數據到DDRAM中
bset #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; //for (i=0;i<16;i++) //逐個顯示
; Lcd_Command(str);
lda 2,X
psha
jsr _Lcd_Command
ais #1
tsx
L15:
.dbline 0 ; func end
rts
; i -> 0,X
_LcdInit::
ais #-1
tsx
; }
; /*LcdInit:初始化Lcd------------------------------------*
; *功 能:初始化Lcd(HD44780),設置顯示方式,清屏,AC自動+1 *
; *參 數:無 *
; *返 回:無 *
; *-----------------------------------------------------*/
; void LcdInit(void)
; {
; unsigned char i;
; LcdData_D=0b11111111; //數據口為輸出
lda #-1
sta 0x5
; LcdCtrl_D|=(1<<LcdE); //控制口低三位為輸出
bset #2,0x6
; LcdCtrl_D|=(1<<LcdRS);
bset #0,0x6
; LcdCtrl_D|=(1<<LcdRW);
bset #1,0x6
; LcdCtrl|=(1<<LcdE); //E=1
bset #2,0x2
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00111000); //8位數據接口,2行,5*7點陣
lda #56
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b00001000); //關顯示,關光標顯示,不閃爍
lda #8
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b00000001); //清屏
lda #1
psha
jsr _Lcd_Command
ais #1
tsx
clr ,X
bra L20
L17:
L18:
inc ,X
L20:
; for(i=0;i<250;i++); //延時>1.6ms
lda ,X
cmp #-6
blo L17
clr ,X
bra L24
L21:
L22:
inc ,X
L24:
; for(i=0;i<250;i++);
lda ,X
cmp #-6
blo L21
; Lcd_Command(0b00010100); //光標右移一個字符位,AC自
lda #20
psha
jsr _Lcd_Command
ais #1
; // 動加1
; Lcd_Command(0b00001100); //開顯示,關光標顯示,不閃爍
lda #12
psha
jsr _Lcd_Command
ais #1
tsx
L16:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
; cmd -> 3,X
_Lcd_Command::
ais #-1
tsx
; }
; /*Lcd_Command:執行給定的cmd命令------------------------*
; *功 能:執行給定的cmd命令,且延時 *
; *參 數:cmd:待執行的命令 *
; *返 回:無 *
; *-----------------------------------------------------*/
; void Lcd_Command(unsigned char cmd)
; {
clr ,X
bra L29
L26:
L27:
inc ,X
L29:
; unsigned char i;
; for (i=0;i<20;i++); //等待>40us
lda ,X
cmp #20
blo L26
; LcdData=cmd; //把指令碼送到Lcd數據傳送口
lda 3,X
sta 0x1
; LcdCtrl|=(1<<LcdE); //Lcd開始接收數據
bset #2,0x2
; asm("NOP");
NOP
; asm("NOP");
NOP
; asm("NOP");
NOP
; LcdCtrl&=~(1<<LcdE); //Lcd結束接收數據
bclr #2,0x2
clr ,X
bra L33
L30:
L31:
inc ,X
L33:
; for (i=0;i<20;i++); //等待>40us
lda ,X
cmp #20
blo L30
L25:
ais #1
.dbline 0 ; func end
rts
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -