?? lcdshow.s
字號(hào):
.module LCDShow.c
.area text
; i -> 0,X
_Lcdshowtime::
ais #-1
tsx
; /*文件描述:本文件包含了用HD44780顯示相關(guān)的3個(gè)子程序 *
; * 1. LCDShow:在LCD上顯示32個(gè)字符 *
; * 2. LcdInit:初始化Lcd *
; * 3. Lcd_Command:執(zhí)行給定的cmd命令 *
; *-------------《嵌入式應(yīng)用技術(shù)基礎(chǔ)教程》--------------*/
; //[以下為子程序源代碼]
; //[頭文件]
; #include "GP32C.h" //包含頭文件
; #define LcdData PTB //Lcd顯示數(shù)據(jù)傳送口
; #define LcdData_D DDRB //數(shù)據(jù)口方向寄存器
; #define LcdCtrl PTC //Lcd控制信號(hào)傳送口
; #define LcdCtrl_D DDRC //控制口方向寄存器
; #define LcdRS 0 //Lcd寄存器選擇信號(hào)PTC0
; #define LcdRW 1 //讀寫信號(hào)接PTC1
; #define LcdE 2 //Lcd使能信號(hào)接PTC2
; //內(nèi)部調(diào)用子程序
; void Lcd_Command(unsigned char cmd); //命令執(zhí)行子程序
; void LcdInit(void); //Lcd初始化子程序
; void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
; unsigned char ChangeASCII(unsigned char x);
; //外部變量
; extern unsigned char time[14];
; extern unsigned char alarm[14];
;
; void Lcdshowtime(void) //顯示日期時(shí)間子程序
; { unsigned char i;
; LcdInit();
jsr _LcdInit
tsx
; for(i=0;i<4;i++)
clr ,X
bra L5
L2:
clr *__r0
lda ,X
add #<_time
sta *__r1
lda *__r0
adc #>_time
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _ChangeASCII
ais #1
tsx
sta *__r1
lda ,X
add #4
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
tsx
L3:
inc ,X
L5:
lda ,X
cmp #4
blo L2
; {
; LcdshowCharacter(ChangeASCII(time[i]),1,(i+4)); //從第一行第四列開始顯示
; }
;
; LcdshowCharacter('-',1,8);
lda #8
psha
lda #1
psha
lda #45
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[4]),1,9);
lda *_time+4
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #9
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[5]),1,10);
lda *_time+5
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #10
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter('-',1,11);
lda #11
psha
lda #1
psha
lda #45
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[6]),1,12);
lda *_time+6
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #12
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[7]),1,13);
lda *_time+7
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #13
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[8]),2,5);
lda *_time+8
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #5
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[9]),2,6);
lda *_time+9
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #6
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(':',2,7);
lda #7
psha
lda #2
psha
lda #58
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[10]),2,8);
lda *_time+10
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #8
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[11]),2,9);
lda *_time+11
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #9
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(':',2,10);
lda #10
psha
lda #2
psha
lda #58
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[12]),2,11);
lda *_time+12
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #11
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(time[13]),2,12);
lda *_time+13
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #12
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
tsx
L1:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
_Lcdshowalarm::
ais #-1
tsx
;
; }
;
; void Lcdshowalarm(void) //顯示日期時(shí)間子程序
; { unsigned char i;
; LcdInit();
jsr _LcdInit
tsx
; for(i=0;i<4;i++)
clr ,X
bra L20
L17:
clr *__r0
lda ,X
add #<_alarm
sta *__r1
lda *__r0
adc #>_alarm
sta *__r0
ldhx *__r0
lda ,x
psha
jsr _ChangeASCII
ais #1
tsx
sta *__r1
lda ,X
add #4
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
tsx
L18:
inc ,X
L20:
lda ,X
cmp #4
blo L17
; {
; LcdshowCharacter(ChangeASCII(alarm[i]),1,(i+4)); //從第一行第四列開始顯示
; }
;
; LcdshowCharacter('-',1,8);
lda #8
psha
lda #1
psha
lda #45
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[4]),1,9);
lda *_alarm+4
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #9
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[5]),1,10);
lda *_alarm+5
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #10
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter('-',1,11);
lda #11
psha
lda #1
psha
lda #45
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[6]),1,12);
lda *_alarm+6
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #12
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[7]),1,13);
lda *_alarm+7
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #13
psha
lda #1
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[8]),2,5);
lda *_alarm+8
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #5
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[9]),2,6);
lda *_alarm+9
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #6
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(':',2,7);
lda #7
psha
lda #2
psha
lda #58
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[10]),2,8);
lda *_alarm+10
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #8
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[11]),2,9);
lda *_alarm+11
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #9
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(':',2,10);
lda #10
psha
lda #2
psha
lda #58
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[12]),2,11);
lda *_alarm+12
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #11
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
; LcdshowCharacter(ChangeASCII(alarm[13]),2,12);
lda *_alarm+13
psha
jsr _ChangeASCII
ais #1
sta *__r1
lda #12
psha
lda #2
psha
lda *__r1
psha
jsr _LcdshowCharacter
ais #3
tsx
L16:
ais #1
.dbline 0 ; func end
rts
; n -> 4,X
; m -> 3,X
; str -> 2,X
_LcdshowCharacter::
tsx
;
; }
;
; /*LcdShow:在HD44780顯示屏上顯示一個(gè)字符--------------------*
; *功能描述:在HD44780顯示屏上第m行,第n列顯示字符str *
; *參 數(shù):str:待顯示字符 *
; *返 回:無(wú) *
; *------------------以上為子程序說(shuō)明-------------------*/
; void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n)
; {
;
; //LcdInit();
;
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b10000000|((m-1)*0x40+(n-1)));
lda 4,X
sub #1
sta *__r0
lda 3,X
sub #1
nsa
and #-16
lsla
lsla
add *__r0
ora #-128
psha
jsr _Lcd_Command
ais #1
tsx
; LcdCtrl|=1<<LcdRS; //RS、R/W=10,寫數(shù)據(jù)到DDRAM中
bset #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(str);
lda 2,X
psha
jsr _Lcd_Command
ais #1
tsx
L31:
.dbline 0 ; func end
rts
; y -> 0,X
; x -> 3,X
_ChangeASCII::
ais #-1
tsx
;
; }
;
; unsigned char ChangeASCII(unsigned char x) //轉(zhuǎn)換數(shù)值x為對(duì)應(yīng)的ASCII碼
; {
; unsigned char y;
; return y=x+0x30;
lda 3,X
add #48
sta *__r1
sta ,X
mov *__r1,*__r0
lda *__r1
L32:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
_LcdInit::
ais #-1
tsx
; }
;
;
; /*LcdInit:初始化Lcd------------------------------------*
; *功 能:初始化Lcd(HD44780),設(shè)置顯示方式,清屏,AC自動(dòng)+1 *
; *參 數(shù):無(wú) *
; *返 回:無(wú) *
; *-----------------------------------------------------*/
; void LcdInit(void)
; {
; unsigned char i;
; LcdData_D=0b11111111; //數(shù)據(jù)口為輸出
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位數(shù)據(jù)接口,2行,5*7點(diǎn)陣
lda #56
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b00001000); //關(guān)顯示,關(guān)光標(biāo)顯示,不閃爍
lda #8
psha
jsr _Lcd_Command
ais #1
; Lcd_Command(0b00000001); //清屏
lda #1
psha
jsr _Lcd_Command
ais #1
tsx
clr ,X
bra L37
L34:
L35:
inc ,X
L37:
; for(i=0;i<250;i++); //延時(shí)>1.6ms
lda ,X
cmp #-6
blo L34
clr ,X
bra L41
L38:
L39:
inc ,X
L41:
; for(i=0;i<250;i++);
lda ,X
cmp #-6
blo L38
; //Lcd_Command(0b00010100); //光標(biāo)右移一個(gè)字符位,AC自
; // 動(dòng)加1
; Lcd_Command(0b00001100); //開顯示,關(guān)光標(biāo)顯示,不閃爍
lda #12
psha
jsr _Lcd_Command
ais #1
tsx
L33:
ais #1
.dbline 0 ; func end
rts
; i -> 0,X
; cmd -> 3,X
_Lcd_Command::
ais #-1
tsx
; }
; /*Lcd_Command:執(zhí)行給定的cmd命令------------------------*
; *功 能:執(zhí)行給定的cmd命令,且延時(shí) *
; *參 數(shù):cmd:待執(zhí)行的命令 *
; *返 回:無(wú) *
; *-----------------------------------------------------*/
; void Lcd_Command(unsigned char cmd)
; {
clr ,X
bra L46
L43:
L44:
inc ,X
L46:
; unsigned char i;
; for (i=0;i<20;i++); //等待>40us
lda ,X
cmp #20
blo L43
; LcdData=cmd; //把指令碼送到Lcd數(shù)據(jù)傳送口
lda 3,X
sta 0x1
; LcdCtrl|=(1<<LcdE); //Lcd開始接收數(shù)據(jù)
bset #2,0x2
; asm("NOP");
NOP
; asm("NOP");
NOP
; asm("NOP");
NOP
; LcdCtrl&=~(1<<LcdE); //Lcd結(jié)束接收數(shù)據(jù)
bclr #2,0x2
clr ,X
bra L50
L47:
L48:
inc ,X
L50:
; for (i=0;i<20;i++); //等待>40us
lda ,X
cmp #20
blo L47
L42:
ais #1
.dbline 0 ; func end
rts
; n -> 3,X
; m -> 2,X
_MoveCursor::
tsx
; }
;
; void MoveCursor(unsigned char m,unsigned char n) //移到光標(biāo)到第m行,第n列
; {
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00001111);
lda #15
psha
jsr _Lcd_Command
ais #1
tsx
; Lcd_Command(0b10000000|((m-1)*0x40+(n-1)));
lda 3,X
sub #1
sta *__r0
lda 2,X
sub #1
nsa
and #-16
lsla
lsla
add *__r0
ora #-128
psha
jsr _Lcd_Command
ais #1
tsx
L51:
.dbline 0 ; func end
rts
_LcdShowCursor::
; //Lcd_Command(0b00001111);
; }
;
;
; void LcdShowCursor(void) //開光標(biāo)顯示,閃爍
; {
; LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,寫指令
bclr #0,0x2
; LcdCtrl&=~(1<<LcdRW);
bclr #1,0x2
; Lcd_Command(0b00001111);
lda #15
psha
jsr _Lcd_Command
ais #1
tsx
L52:
.dbline 0 ; func end
rts
.area lit
L54:
.byte 49,46,32,'S,'e,'t,32,'T,'i,'m,'e,0
L55:
.byte 50,46,32,'S,'e,'t,32,'A,'l,'a,'r,'m,0
.area text
; temp2 -> 0,X
; temp -> 13,X
; i -> 25,X
_LcdShowMenu::
ais #-26
tsx
; }
;
; void LcdShowMenu(void) //顯示菜單
; {
;
; unsigned char temp[12]="1. Set Time";
aix #13
sthx *__r0
tsx
lda #12
psha
clra
psha
lda #<L54
psha
lda #>L54
psha
lda *__r1
psha
lda *__r0
psha
jsr __asgnblk
ais #6
; unsigned char temp2[13]="2. Set Alarm";
sthx *__r0
lda #13
psha
clra
psha
lda #<L55
psha
lda #>L55
psha
lda *__r1
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -