?? lcd.lis
字號(hào):
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\自動(dòng)充電小車\自動(dòng)充電小車\298\lcd.c
0000 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0000 _LCD_en_write::
0000 .dbline -1
0000 .dbline 11
0000 ; #define _LCD_C_
0000 ; #include "LCD.h"
0000 ; #include <iom16v.h>
0000 ; //==========================================
0000 ; //函數(shù)名稱:液晶模塊使能
0000 ; //函數(shù)作用: 使能液晶
0000 ; //入口參數(shù): 無
0000 ; //返回類型:無
0000 ; //==========================================
0000 ; void LCD_en_write(void)
0000 ; {
0000 .dbline 12
0000 ; EN_SET;
0000 C79A sbi 0x18,7
0002 .dbline 13
0002 ; delay_nus(4);
0002 04E0 ldi R16,4
0004 10E0 ldi R17,0
0006 0E940000 xcall _delay_nus
000A .dbline 14
000A ; EN_CLR;
000A C798 cbi 0x18,7
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e LCD_write_command _LCD_write_command fV
000E ; command -> R20
.even
000E _LCD_write_command::
000E 4A93 st -y,R20
0010 402F mov R20,R16
0012 .dbline -1
0012 .dbline 24
0012 ; }
0012 ;
0012 ; //==========================================
0012 ; //函數(shù)名稱:寫指令
0012 ; //函數(shù)作用:
0012 ; //入口參數(shù): 液晶指令command
0012 ; //返回類型:無
0012 ; //==========================================
0012 ; void LCD_write_command(uchar command)
0012 ; {
0012 .dbline 25
0012 ; delay_nus( 16 );
0012 00E1 ldi R16,16
0014 10E0 ldi R17,0
0016 0E940000 xcall _delay_nus
001A .dbline 26
001A ; RS_CLR;
001A C698 cbi 0x18,6
001C .dbline 27
001C ; DB &= 0X0F; //清高四位
001C 8BB3 in R24,0x1b
001E 8F70 andi R24,15
0020 8BBB out 0x1b,R24
0022 .dbline 28
0022 ; DB |= command & 0xf0; //寫高四位
0022 842F mov R24,R20
0024 807F andi R24,240
0026 2BB2 in R2,0x1b
0028 282A or R2,R24
002A 2BBA out 0x1b,R2
002C .dbline 29
002C ; LCD_en_write();
002C E9DF xcall _LCD_en_write
002E .dbline 30
002E ; command=command << 4; //低四位移到高四位
002E 842F mov R24,R20
0030 8F70 andi R24,#0x0F
0032 8295 swap R24
0034 482F mov R20,R24
0036 .dbline 31
0036 ; DB &= 0x0f; //清高四位
0036 8BB3 in R24,0x1b
0038 8F70 andi R24,15
003A 8BBB out 0x1b,R24
003C .dbline 32
003C ; DB |= command & 0xf0; //寫低四位
003C 842F mov R24,R20
003E 807F andi R24,240
0040 2BB2 in R2,0x1b
0042 282A or R2,R24
0044 2BBA out 0x1b,R2
0046 .dbline 33
0046 ; LCD_en_write();
0046 DCDF xcall _LCD_en_write
0048 .dbline -2
0048 L2:
0048 .dbline 0 ; func end
0048 4991 ld R20,y+
004A 0895 ret
004C .dbsym r command 20 c
004C .dbend
004C .dbfunc e LCD_write_data _LCD_write_data fV
004C ; DATA -> R20
.even
004C _LCD_write_data::
004C 4A93 st -y,R20
004E 402F mov R20,R16
0050 .dbline -1
0050 .dbline 44
0050 ; //delay_nms(2); //清屏指令時(shí)間很長, 保險(xiǎn)起見,可以增加
0050 ; }
0050 ;
0050 ; //==========================================
0050 ; //函數(shù)名稱:寫數(shù)據(jù)
0050 ; //函數(shù)作用:
0050 ; //入口參數(shù): 數(shù)據(jù)DATA
0050 ; //返回類型:無
0050 ; //==========================================
0050 ; void LCD_write_data(uchar DATA)
0050 ; {
0050 .dbline 45
0050 ; delay_nus(16);
0050 00E1 ldi R16,16
0052 10E0 ldi R17,0
0054 0E940000 xcall _delay_nus
0058 .dbline 46
0058 ; RS_SET; //RS=1
0058 C69A sbi 0x18,6
005A .dbline 47
005A ; DB &= 0X0f; //清高四位
005A 8BB3 in R24,0x1b
005C 8F70 andi R24,15
005E 8BBB out 0x1b,R24
0060 .dbline 48
0060 ; DB |= DATA&0xf0; //寫高四位
0060 842F mov R24,R20
0062 807F andi R24,240
0064 2BB2 in R2,0x1b
0066 282A or R2,R24
0068 2BBA out 0x1b,R2
006A .dbline 49
006A ; LCD_en_write();
006A CADF xcall _LCD_en_write
006C .dbline 50
006C ; DATA = DATA << 4; //低四位移到高四位
006C 842F mov R24,R20
006E 8F70 andi R24,#0x0F
0070 8295 swap R24
0072 482F mov R20,R24
0074 .dbline 51
0074 ; DB &= 0X0f; //清高四位
0074 8BB3 in R24,0x1b
0076 8F70 andi R24,15
0078 8BBB out 0x1b,R24
007A .dbline 52
007A ; DB |= DATA&0xf0; //寫低四位
007A 842F mov R24,R20
007C 807F andi R24,240
007E 2BB2 in R2,0x1b
0080 282A or R2,R24
0082 2BBA out 0x1b,R2
0084 .dbline 53
0084 ; LCD_en_write();
0084 BDDF xcall _LCD_en_write
0086 .dbline -2
0086 L3:
0086 .dbline 0 ; func end
0086 4991 ld R20,y+
0088 0895 ret
008A .dbsym r DATA 20 c
008A .dbend
008A .dbfunc e LCD_init _LCD_init fV
.even
008A _LCD_init::
008A .dbline -1
008A .dbline 63
008A ; }
008A ;
008A ; //==========================================
008A ; //函數(shù)名稱:液晶初始化函數(shù)
008A ; //函數(shù)作用:
008A ; //入口參數(shù): 無
008A ; //返回類型:無
008A ; //==========================================
008A ; void LCD_init( void )
008A ; {
008A .dbline 64
008A ; DB_DDR_OUT;
008A .dbline 64
008A 8AB3 in R24,0x1a
008C 806F ori R24,240
008E 8ABB out 0x1a,R24
0090 87B3 in R24,0x17
0092 806C ori R24,192
0094 87BB out 0x17,R24
0096 .dbline 64
0096 .dbline 64
0096 .dbline 65
0096 ; LCD_write_command(0x28);
0096 08E2 ldi R16,40
0098 BADF xcall _LCD_write_command
009A .dbline 66
009A ; LCD_en_write(); //********總結(jié)這里一定要加這液晶使能*********
009A B2DF xcall _LCD_en_write
009C .dbline 67
009C ; delay_nus(20);
009C 04E1 ldi R16,20
009E 10E0 ldi R17,0
00A0 0E940000 xcall _delay_nus
00A4 .dbline 68
00A4 ; LCD_write_command(0x28); //4位顯示
00A4 08E2 ldi R16,40
00A6 B3DF xcall _LCD_write_command
00A8 .dbline 69
00A8 ; LCD_write_command(0x0c); //顯示開
00A8 0CE0 ldi R16,12
00AA B1DF xcall _LCD_write_command
00AC .dbline 70
00AC ; LCD_write_command(0x01); //清屏
00AC 01E0 ldi R16,1
00AE AFDF xcall _LCD_write_command
00B0 .dbline 71
00B0 ; delay_nms(5); //延時(shí)一定要長
00B0 05E0 ldi R16,5
00B2 10E0 ldi R17,0
00B4 0E940000 xcall _delay_nms
00B8 .dbline -2
00B8 L4:
00B8 .dbline 0 ; func end
00B8 0895 ret
00BA .dbend
00BA .dbfunc e LCD_set_rc _LCD_set_rc fV
00BA ; address -> R20
00BA ; c -> R22
00BA ; r -> R10
.even
00BA _LCD_set_rc::
00BA 0E940000 xcall push_xgsetF00C
00BE 622F mov R22,R18
00C0 A02E mov R10,R16
00C2 .dbline -1
00C2 .dbline 81
00C2 ; }
00C2 ;
00C2 ; //==========================================
00C2 ; //函數(shù)名稱:寫地址
00C2 ; //函數(shù)作用:
00C2 ; //入口參數(shù): 行位置r, 列位置c
00C2 ; //返回類型:無
00C2 ; //==========================================
00C2 ; void LCD_set_rc( uchar r, uchar c )
00C2 ; {
00C2 .dbline 84
00C2 ; uchar address;
00C2 ;
00C2 ; if (r == 1)
00C2 8A2D mov R24,R10
00C4 8130 cpi R24,1
00C6 19F4 brne L6
00C8 X0:
00C8 .dbline 85
00C8 ; address = 0x80 + c;
00C8 462F mov R20,R22
00CA 4058 subi R20,128 ; addi 128
00CC 05C0 xjmp L7
00CE L6:
00CE .dbline 86
00CE ; else if(r == 2)
00CE 8A2D mov R24,R10
00D0 8230 cpi R24,2
00D2 11F4 brne L8
00D4 X1:
00D4 .dbline 87
00D4 ; address = 0xc0 + c;
00D4 462F mov R20,R22
00D6 4054 subi R20,64 ; addi 192
00D8 L8:
00D8 L7:
00D8 .dbline 89
00D8 ;
00D8 ; LCD_write_command( address );
00D8 042F mov R16,R20
00DA 99DF xcall _LCD_write_command
00DC .dbline -2
00DC L5:
00DC .dbline 0 ; func end
00DC 0C940000 xjmp pop_xgsetF00C
00E0 .dbsym r address 20 c
00E0 .dbsym r c 22 c
00E0 .dbsym r r 10 c
00E0 .dbend
00E0 .dbfunc e LCD_write_string _LCD_write_string fV
00E0 ; s -> R20,R21
00E0 ; c -> R12
00E0 ; r -> R10
.even
00E0 _LCD_write_string::
00E0 0E940000 xcall push_xgset303C
00E4 C22E mov R12,R18
00E6 A02E mov R10,R16
00E8 4E81 ldd R20,y+6
00EA 5F81 ldd R21,y+7
00EC .dbline -1
00EC .dbline 99
00EC ; }
00EC ;
00EC ; //==========================================
00EC ; //函數(shù)名稱:寫字符串
00EC ; //函數(shù)作用: 在指定位置寫一串字符串
00EC ; //入口參數(shù): 行位置r, 列位置c, 字符串*s
00EC ; //返回類型:無
00EC ; //==========================================
00EC ; void LCD_write_string(uchar r, uchar c, uchar *s)
00EC ; {
00EC .dbline 100
00EC ; LCD_set_rc( r, c ); //寫地址
00EC 2C2D mov R18,R12
00EE 0A2D mov R16,R10
00F0 E4DF xcall _LCD_set_rc
00F2 05C0 xjmp L12
00F4 L11:
00F4 .dbline 103
00F4 ;
00F4 ; while( *s ) // 寫顯示字符
00F4 ; {
00F4 .dbline 104
00F4 ; LCD_write_data( *s );
00F4 FA01 movw R30,R20
00F6 0081 ldd R16,z+0
00F8 A9DF xcall _LCD_write_data
00FA .dbline 105
00FA ; s++;
00FA 4F5F subi R20,255 ; offset = 1
00FC 5F4F sbci R21,255
00FE .dbline 106
00FE ; }
00FE L12:
00FE .dbline 102
00FE FA01 movw R30,R20
0100 2080 ldd R2,z+0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -