?? lcd.lis
字號:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile C:\bak\YM200\lcd1602\lcd.c
0000 .dbfunc e delay _delay fV
0000 ; dk -> R16,R17
.even
0000 _delay::
0000 .dbline -1
0000 .dbline 19
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #define LCD_RS (1 << 4)
0000 ; #define LCD_RW (1 << 5)
0000 ; #define LCD_E (1 << 7)
0000 ; #define set_e() (PORTD |= LCD_E)
0000 ; #define set_rs() (PORTD |= LCD_RS)
0000 ; #define set_rw() (PORTD |= LCD_RW)
0000 ; #define clr_e() (PORTD &= ~LCD_E)
0000 ; #define clr_rs() (PORTD &= ~LCD_RS)
0000 ; #define clr_rw() (PORTD &= ~LCD_RW)
0000 ;
0000 ; /*-----------------------------------------------------------
0000 ; delay :短延時函數
0000 ; 輸入參數 x :粗略延時,x越大,延時越長
0000 ; 輸出參數 :無
0000 ; ------------------------------------------------------------*/
0000 ; void delay(unsigned int dk)
0000 ; {
0000 L2:
0000 .dbline 20
0000 L3:
0000 .dbline 20
0000 ; while(dk--);
0000 1801 movw R2,R16
0002 0150 subi R16,1
0004 1040 sbci R17,0
0006 2220 tst R2
0008 D9F7 brne L2
000A 3320 tst R3
000C C9F7 brne L2
000E X0:
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbsym r dk 16 i
0010 .dbend
0010 .dbfunc e lcdwait _lcdwait fV
.even
0010 _lcdwait::
0010 .dbline -1
0010 .dbline 29
0010 ; }
0010 ;
0010 ; /*------------------------------------------------------------
0010 ; lcdwait :液晶延時函數
0010 ; 輸入參數 :無
0010 ; 輸出參數 :無
0010 ; --------------------------------------------------------------*/
0010 ; void lcdwait(void)
0010 ; {
0010 .dbline 30
0010 ; delay(600);
0010 08E5 ldi R16,600
0012 12E0 ldi R17,2
0014 F5DF xcall _delay
0016 .dbline -2
0016 L5:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e lcdpulse _lcdpulse fV
.even
0018 _lcdpulse::
0018 .dbline -1
0018 .dbline 38
0018 ; }
0018 ; /*-----------------------------------------------------------
0018 ; lcdpulse :脈沖函數,把數據寫入1602液晶
0018 ; 輸入參數 :無
0018 ; 輸出參數 :無
0018 ; ---------------------------------------------------------------*/
0018 ; void lcdpulse(void)
0018 ; {
0018 .dbline 39
0018 ; set_e();
0018 979A sbi 0x12,7
001A .dbline 40
001A ; clr_e();
001A 9798 cbi 0x12,7
001C .dbline -2
001C L6:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbend
001E .dbfunc e lcdsend _lcdsend fV
001E ; data -> R20
.even
001E _lcdsend::
001E 0E940000 xcall push_gset1
0022 402F mov R20,R16
0024 .dbline -1
0024 .dbline 49
0024 ; }
0024 ;
0024 ; /*----------------------------------------------------------------
0024 ; lcdsend :發送一字節數據函數
0024 ; 輸入參數 data :要發送字節數據
0024 ; 輸出參數 :無
0024 ; ------------------------------------------------------------------*/
0024 ; void lcdsend(unsigned char data)
0024 ; {
0024 .dbline 50
0024 ; lcdwait();
0024 F5DF xcall _lcdwait
0026 .dbline 51
0026 ; PORTB=data;
0026 48BB out 0x18,R20
0028 .dbline 52
0028 ; lcdpulse();
0028 F7DF xcall _lcdpulse
002A .dbline -2
002A L7:
002A 0E940000 xcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r data 20 c
0030 .dbend
0030 .dbfunc e wcom _wcom fV
0030 ; com -> R20
.even
0030 _wcom::
0030 0E940000 xcall push_gset1
0034 402F mov R20,R16
0036 .dbline -1
0036 .dbline 60
0036 ; }
0036 ; /*------------------------------------------------------------------
0036 ; wcom :寫一字節控制字函數
0036 ; 輸入參數 com :要寫入控制字
0036 ; 輸出參數 :無
0036 ; -----------------------------------------------------------------*/
0036 ; void wcom(unsigned char com)
0036 ; {
0036 .dbline 61
0036 ; clr_rs();
0036 9498 cbi 0x12,4
0038 .dbline 62
0038 ; clr_rw();
0038 9598 cbi 0x12,5
003A .dbline 63
003A ; lcdsend(com);
003A 042F mov R16,R20
003C F0DF xcall _lcdsend
003E .dbline 64
003E ; lcdwait();
003E E8DF xcall _lcdwait
0040 .dbline -2
0040 L8:
0040 0E940000 xcall pop_gset1
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbsym r com 20 c
0046 .dbend
0046 .dbfunc e wdat _wdat fV
0046 ; dat -> R20
.even
0046 _wdat::
0046 0E940000 xcall push_gset1
004A 402F mov R20,R16
004C .dbline -1
004C .dbline 73
004C ; }
004C ;
004C ; /*--------------------------------------------------------------
004C ; wdat :顯示一字節函數
004C ; 輸入參數 com :要顯示字符ASCⅡ碼
004C ; 輸出參數 :無
004C ; ----------------------------------------------------------------*/
004C ; void wdat(unsigned char dat)
004C ; {
004C .dbline 74
004C ; set_rs();
004C 949A sbi 0x12,4
004E .dbline 75
004E ; clr_rw();
004E 9598 cbi 0x12,5
0050 .dbline 76
0050 ; lcdsend(dat);
0050 042F mov R16,R20
0052 E5DF xcall _lcdsend
0054 .dbline 77
0054 ; lcdwait();
0054 DDDF xcall _lcdwait
0056 .dbline -2
0056 L9:
0056 0E940000 xcall pop_gset1
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r dat 20 c
005C .dbend
005C .dbfunc e LCM1602Reset _LCM1602Reset fV
.even
005C _LCM1602Reset::
005C .dbline -1
005C .dbline 85
005C ; }
005C ; /*------------------------------------------------------------------
005C ; LCM1602Reset :LCM1602復位
005C ; 輸入參數 :無
005C ; 輸出參數 :無
005C ; ------------------------------------------------------------------*/
005C ; void LCM1602Reset(void)
005C ; {
005C .dbline 86
005C ; delay(65000);
005C 08EE ldi R16,65000
005E 1DEF ldi R17,253
0060 CFDF xcall _delay
0062 .dbline 87
0062 ; wcom(0x38);
0062 08E3 ldi R16,56
0064 E5DF xcall _wcom
0066 .dbline 88
0066 ; delay(5000);
0066 08E8 ldi R16,5000
0068 13E1 ldi R17,19
006A CADF xcall _delay
006C .dbline 89
006C ; wcom(0x38);
006C 08E3 ldi R16,56
006E E0DF xcall _wcom
0070 .dbline 90
0070 ; delay(5000);
0070 08E8 ldi R16,5000
0072 13E1 ldi R17,19
0074 C5DF xcall _delay
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -