?? lcd.s
字號:
.module lcd.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文件夾\lcd.c
.dbfunc e LCD_WIRTE_DELAY _LCD_WIRTE_DELAY fV
; lcd_time -> R16,R17
.even
_LCD_WIRTE_DELAY::
.dbline -1
.dbline 4
; #include "config.h"
;
; void LCD_WIRTE_DELAY(unsigned int lcd_time)
; {
.dbline 5
; WDR();
wdr
L2:
.dbline 7
; while(--lcd_time)
; {;}
.dbline 7
.dbline 7
L3:
.dbline 6
movw R24,R16
sbiw R24,1
movw R16,R24
cpi R16,0
cpc R16,R17
brne L2
X0:
.dbline 8
; WDR();
wdr
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r lcd_time 16 i
.dbend
.dbfunc e LCD_WRI_ORDER _LCD_WRI_ORDER fV
; DATA -> <dead>
; ORDER -> R10
.even
_LCD_WRI_ORDER::
st -y,R10
mov R10,R16
.dbline -1
.dbline 14
; }
;
; /*--------------------------向LCD寫命令---------*/
; ///////////////////////////////////////////////////////////////////////////////////////////////////
; void LCD_WRI_ORDER(unsigned char ORDER)
; {
.dbline 16
; unsigned char DATA;
; WDR();
wdr
.dbline 18
; // PORTD=PORTD&0X1F;//PD7,6,5置0
; PORTA=PORTA&0XF8;
in R24,0x1b
andi R24,248
out 0x1b,R24
.dbline 28
; /*
; PORTD=PORTD|0X40;
; DDRB=0X00;
; DATA=PINB;
; while(DATA&&0x80)
; {DATA=PINB;WDR();}
; PORTD=PORTD&0X1F;
; DDRB=0Xff;
; */
; LCD_WIRTE_DELAY(200);
ldi R16,200
ldi R17,0
xcall _LCD_WIRTE_DELAY
.dbline 30
; //PORTD=PORTD&0X1F;//PD7,6,5置0
; PORTA=PORTA&0XF8;
in R24,0x1b
andi R24,248
out 0x1b,R24
.dbline 31
; PORTB=ORDER; //
out 0x18,R10
.dbline 33
; //PORTD=PORTD|0X80;//PD7置1
; PORTA=PORTA |0X04;
sbi 0x1b,2
.dbline 34
; LCD_WIRTE_DELAY(200);
ldi R16,200
ldi R17,0
xcall _LCD_WIRTE_DELAY
.dbline 36
; //PORTD=PORTD&0X1F;//PD7,6,5置0
; PORTA=PORTA&0XF8;
in R24,0x1b
andi R24,248
out 0x1b,R24
.dbline -2
L5:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym l DATA 1 c
.dbsym r ORDER 10 c
.dbend
.dbfunc e LCD_WRI_DATA _LCD_WRI_DATA fV
; ords -> <dead>
; DATA -> R10
.even
_LCD_WRI_DATA::
st -y,R10
mov R10,R16
.dbline -1
.dbline 43
; }
;
;
; /*-----------寫到lcd中顯示數據---------*/
; ////////////////////////////////////////////////////////////////////////////////////
; void LCD_WRI_DATA(unsigned char DATA)
; {
.dbline 46
;
; unsigned char ords;
; WDR();
wdr
.dbline 58
;
; /*
; PORTD=PORTD&0X1F;
; PORTD=PORTD|0X40;
; DDRB=0X00;
; ords=PINB;
; while(ords&&0x80)
; {ords=PINB;WDR();}
; DDRB=0Xff;
; */
; //PORTD=PORTD&0X7F;//PD7置0
; PORTA=PORTA&0XFB;
in R24,0x1b
andi R24,251
out 0x1b,R24
.dbline 59
; LCD_WIRTE_DELAY(200);
ldi R16,200
ldi R17,0
xcall _LCD_WIRTE_DELAY
.dbline 61
; //PORTD=PORTD|0X20; //PD5置1
; PORTA=PORTA|0X01;
sbi 0x1b,0
.dbline 62
; PORTB=DATA;
out 0x18,R10
.dbline 64
; //PORTD=PORTD|0X80;//PD7置1
; PORTA=PORTA |0X04;
sbi 0x1b,2
.dbline 65
; LCD_WIRTE_DELAY(200);
ldi R16,200
ldi R17,0
xcall _LCD_WIRTE_DELAY
.dbline 67
; //PORTD=PORTD&0X1F;//PD7,6,5置0
; PORTA=PORTA & 0XF8;
in R24,0x1b
andi R24,248
out 0x1b,R24
.dbline -2
L6:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym l ords 1 c
.dbsym r DATA 10 c
.dbend
.dbfunc e LCD_DELAY _LCD_DELAY fV
; time -> R16,R17
.even
_LCD_DELAY::
.dbline -1
.dbline 75
; }
;
;
;
;
; /*-------------延時46us----------*/
; void LCD_DELAY()
; {
.dbline 76
; unsigned int time=500;
ldi R16,500
ldi R17,1
.dbline 77
; WDR();
wdr
L8:
.dbline 78
; while(--time);
L9:
.dbline 78
movw R24,R16
sbiw R24,1
movw R16,R24
cpi R16,0
cpc R16,R17
brne L8
X1:
.dbline 79
; WDR();
wdr
.dbline -2
L7:
.dbline 0 ; func end
ret
.dbsym r time 16 i
.dbend
.dbfunc e LCD_CLEAR _LCD_CLEAR fV
.even
_LCD_CLEAR::
.dbline -1
.dbline 84
; }
;
;
; void LCD_CLEAR()
; {
.dbline 85
; LCD_WRI_ORDER(0X01);
ldi R16,1
xcall _LCD_WRI_ORDER
.dbline 86
; LCD_DELAY();
xcall _LCD_DELAY
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_WORD_INI _LCD_WORD_INI fV
.even
_LCD_WORD_INI::
.dbline -1
.dbline 101
; }
;
;
; //#define EN (DDRD|=BIT(PD7))
; //#define RW (DDRD|=BIT(PD6))
; //#define CR (DDRD|=BIT(PD5))
; //////////////////////////////////////////////////////////////
; #define EN (DDRA|=BIT(PA2))
; #define RW (DDRA|=BIT(PA1))
; #define CR (DDRA|=BIT(PA0))
; /////////////////////////////////////////////////////////////
;
;
; void LCD_WORD_INI(void)
; {
.dbline 102
; WDR();
wdr
.dbline 103
; EN;RW;CR;
sbi 0x1a,2
.dbline 103
sbi 0x1a,1
.dbline 103
sbi 0x1a,0
.dbline 104
; LCD_WRI_ORDER(0X30); /*----------------清顯示--------------------*/
ldi R16,48
xcall _LCD_WRI_ORDER
.dbline 105
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 106
; LCD_WRI_ORDER(0X30); /*----------------清顯示--------------------*/
ldi R16,48
xcall _LCD_WRI_ORDER
.dbline 107
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 108
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 109
; LCD_WRI_ORDER(0X0C); /*------------ 顯示右移光標右移 --------------*/
ldi R16,12
xcall _LCD_WRI_ORDER
.dbline 110
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 111
; LCD_WRI_ORDER(0X01); /*------------ 顯示右移光標右移 --------------*/
ldi R16,1
xcall _LCD_WRI_ORDER
.dbline 112
; Delay1ms(1);
ldi R16,1
ldi R17,0
xcall _Delay1ms
.dbline 113
; LCD_WRI_ORDER(0X06); /*-------功能定為基本指令集動作8位------------*/
ldi R16,6
xcall _LCD_WRI_ORDER
.dbline 114
; LCD_DELAY();
xcall _LCD_DELAY
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_ADD _LCD_ADD fV
; ADD -> R10
.even
_LCD_ADD::
st -y,R10
mov R10,R16
.dbline -1
.dbline 127
; }
; /*
; void LCD_PIC_INI()
; {
; WDR();
; LCD_WORD_INI();
; LCD_WRI_ORDER(0X32); /*-------功能設定為基本指令集8位顯示圖形-----------*/
; /* LCD_DELAY();
; LCD_WRI_ORDER(0X36); /*-------功能設定為擴充指令集8位顯示圖形-----------*/
; // LCD_DELAY();
; //}*/
; void LCD_ADD(unsigned char ADD)//寫入地址
; {
.dbline 128
; LCD_WRI_ORDER(ADD);
mov R16,R10
xcall _LCD_WRI_ORDER
.dbline 129
; LCD_DELAY();
xcall _LCD_DELAY
.dbline -2
L13:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r ADD 10 c
.dbend
.dbfunc e DISPLAY_LCD _DISPLAY_LCD fV
; Y -> R10
; DISP -> R20,R21
; ADD -> R10
.even
_DISPLAY_LCD::
xcall push_xgset300C
movw R20,R18
mov R10,R16
.dbline -1
.dbline 133
; }
;
; void DISPLAY_LCD(unsigned char ADD,unsigned char *DISP)//顯示字符串
; {
.dbline 135
; unsigned char Y;
; WDR();
wdr
.dbline 136
; LCD_WRI_ORDER(ADD);
mov R16,R10
xcall _LCD_WRI_ORDER
.dbline 137
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 138
; for(Y=0;*DISP!='\0';Y++)
clr R10
xjmp L18
L15:
.dbline 139
; {
.dbline 140
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 141
; LCD_WRI_DATA(*DISP);
movw R30,R20
ldd R16,z+0
xcall _LCD_WRI_DATA
.dbline 142
; LCD_DELAY();DISP++;
xcall _LCD_DELAY
.dbline 142
subi R20,255 ; offset = 1
sbci R21,255
.dbline 143
; }
L16:
.dbline 138
inc R10
L18:
.dbline 138
movw R30,R20
ldd R2,z+0
tst R2
brne L15
X2:
.dbline -2
L14:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r Y 10 c
.dbsym r DISP 20 pc
.dbsym r ADD 10 c
.dbend
.area lit(rom, con, rel)
L20:
.byte 48,49,50,51,52,53,54,55,56,57,'a,'b,'c,'d,'e,'f
.byte 0
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文件夾\lcd.c
.dbfunc e shuzi_disp _shuzi_disp fV
; number -> y+0
; NUMber -> R10
; ADD -> R12
.even
_shuzi_disp::
st -y,R10
st -y,R12
mov R10,R18
mov R12,R16
sbiw R28,17
.dbline -1
.dbline 147
; }
;
; void shuzi_disp(unsigned char ADD,unsigned char NUMber) //一位數字顯示
; {
.dbline 148
; unsigned char number[]={"0123456789abcdef"};
ldi R24,<L20
ldi R25,>L20
movw R30,R28
ldi R16,17
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 149
; WDR();
wdr
.dbline 150
; LCD_WRI_ORDER(ADD); LCD_DELAY();
mov R16,R12
xcall _LCD_WRI_ORDER
.dbline 150
xcall _LCD_DELAY
.dbline 151
; LCD_WRI_DATA(number[NUMber]); LCD_DELAY();
movw R24,R28
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
.dbline 151
xcall _LCD_DELAY
.dbline -2
L19:
.dbline 0 ; func end
adiw R28,17
ld R12,y+
ld R10,y+
ret
.dbsym l number 0 A[17:17]c
.dbsym r NUMber 10 c
.dbsym r ADD 12 c
.dbend
.area lit(rom, con, rel)
L22:
.byte 48,49,50,51,52,53,54,55,56,57,32,0
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\新建文件夾\lcd.c
.dbfunc e NUM_DISPLAY_LCD _NUM_DISPLAY_LCD fV
; GW -> R10
; SW -> R12
; SWS -> R10
; BW -> R22
; QW -> R20
; WW -> R14
; number -> y+0
; NUMber -> R10,R11
; ADD -> R12
.even
_NUM_DISPLAY_LCD::
xcall push_xgsetF0FC
movw R10,R18
mov R12,R16
sbiw R28,12
.dbline -1
.dbline 154
; }
; void NUM_DISPLAY_LCD(unsigned char ADD,unsigned int NUMber)//數字顯示
; {
.dbline 161
; unsigned char WW;
; unsigned char QW;
; unsigned char BW;
; unsigned char SW;
; unsigned char SWS;
; unsigned char GW;
; unsigned char number[]={"0123456789 "};
ldi R24,<L22
ldi R25,>L22
movw R30,R28
ldi R16,12
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
xcall asgncblk
.dbline 162
; WDR();
wdr
.dbline 163
; LCD_WRI_ORDER(ADD);
mov R16,R12
xcall _LCD_WRI_ORDER
.dbline 164
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 165
; WW=NUMber/10000;
ldi R18,10000
ldi R19,39
movw R16,R10
xcall div16u
mov R14,R16
.dbline 166
; QW=(NUMber%10000)/1000;
ldi R18,10000
ldi R19,39
movw R16,R10
xcall mod16u
ldi R18,1000
ldi R19,3
xcall div16u
mov R20,R16
.dbline 167
; BW=(NUMber%1000)/100;
ldi R18,1000
ldi R19,3
movw R16,R10
xcall mod16u
ldi R18,100
ldi R19,0
xcall div16u
mov R22,R16
.dbline 168
; SWS=(NUMber%1000)%100;
ldi R18,1000
ldi R19,3
movw R16,R10
xcall mod16u
ldi R18,100
ldi R19,0
xcall mod16u
mov R10,R16
.dbline 169
; SW=SWS/10;
ldi R17,10
xcall div8u
mov R12,R16
.dbline 170
; GW=SWS%10;
ldi R17,10
mov R16,R10
xcall mod8u
mov R10,R16
.dbline 171
; if(WW)
tst R14
breq L23
X3:
.dbline 172
; LCD_WRI_DATA(number[WW]);
movw R24,R28
mov R30,R14
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
xjmp L24
L23:
.dbline 174
; else
; LCD_WRI_DATA(number[10]);
ldd R16,y+10
xcall _LCD_WRI_DATA
L24:
.dbline 175
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 176
; if(QW||WW)
tst R20
brne L28
X4:
tst R14
breq L26
X5:
L28:
.dbline 177
; LCD_WRI_DATA(number[QW]);
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
xjmp L27
L26:
.dbline 179
; else
; LCD_WRI_DATA(number[10]);
ldd R16,y+10
xcall _LCD_WRI_DATA
L27:
.dbline 180
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 181
; if(BW||QW||WW)
tst R22
brne L33
X6:
tst R20
brne L33
X7:
tst R14
breq L30
X8:
L33:
.dbline 182
; LCD_WRI_DATA(number[BW]);
movw R24,R28
mov R30,R22
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
xjmp L31
L30:
.dbline 184
; else
; LCD_WRI_DATA(number[10]);
ldd R16,y+10
xcall _LCD_WRI_DATA
L31:
.dbline 185
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 186
; if(SW!=0||BW||QW||WW)
tst R12
brne L39
X9:
tst R22
brne L39
X10:
tst R20
brne L39
X11:
tst R14
breq L35
X12:
L39:
.dbline 187
; LCD_WRI_DATA(number[SW]);
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
xjmp L36
L35:
.dbline 189
; else
; LCD_WRI_DATA(number[10]);
ldd R16,y+10
xcall _LCD_WRI_DATA
L36:
.dbline 190
; LCD_DELAY();
xcall _LCD_DELAY
.dbline 191
; LCD_WRI_DATA(number[GW]);
movw R24,R28
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _LCD_WRI_DATA
.dbline 192
; LCD_DELAY();
xcall _LCD_DELAY
.dbline -2
L21:
.dbline 0 ; func end
adiw R28,12
xjmp pop_xgsetF0FC
.dbsym r GW 10 c
.dbsym r SW 12 c
.dbsym r SWS 10 c
.dbsym r BW 22 c
.dbsym r QW 20 c
.dbsym r WW 14 c
.dbsym l number 0 A[12:12]c
.dbsym r NUMber 10 i
.dbsym r ADD 12 c
.dbend
; }
;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -