📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\新建文件夹\lcd.c
0000 .dbfunc e LCD_WIRTE_DELAY _LCD_WIRTE_DELAY fV
0000 ; lcd_time -> R16,R17
.even
0000 _LCD_WIRTE_DELAY::
0000 .dbline -1
0000 .dbline 4
0000 ; #include "config.h"
0000 ;
0000 ; void LCD_WIRTE_DELAY(unsigned int lcd_time)
0000 ; {
0000 .dbline 5
0000 ; WDR();
0000 A895 wdr
0002 L2:
0002 .dbline 7
0002 ; while(--lcd_time)
0002 ; {;}
0002 .dbline 7
0002 .dbline 7
0002 L3:
0002 .dbline 6
0002 C801 movw R24,R16
0004 0197 sbiw R24,1
0006 8C01 movw R16,R24
0008 0030 cpi R16,0
000A 0107 cpc R16,R17
000C D1F7 brne L2
000E X0:
000E .dbline 8
000E ; WDR();
000E A895 wdr
0010 .dbline -2
0010 L1:
0010 .dbline 0 ; func end
0010 0895 ret
0012 .dbsym r lcd_time 16 i
0012 .dbend
0012 .dbfunc e LCD_WRI_ORDER _LCD_WRI_ORDER fV
0012 ; DATA -> <dead>
0012 ; ORDER -> R10
.even
0012 _LCD_WRI_ORDER::
0012 AA92 st -y,R10
0014 A02E mov R10,R16
0016 .dbline -1
0016 .dbline 14
0016 ; }
0016 ;
0016 ; /*--------------------------向LCD写命令---------*/
0016 ; ///////////////////////////////////////////////////////////////////////////////////////////////////
0016 ; void LCD_WRI_ORDER(unsigned char ORDER)
0016 ; {
0016 .dbline 16
0016 ; unsigned char DATA;
0016 ; WDR();
0016 A895 wdr
0018 .dbline 18
0018 ; // PORTD=PORTD&0X1F;//PD7,6,5置0
0018 ; PORTA=PORTA&0XF8;
0018 8BB3 in R24,0x1b
001A 887F andi R24,248
001C 8BBB out 0x1b,R24
001E .dbline 28
001E ; /*
001E ; PORTD=PORTD|0X40;
001E ; DDRB=0X00;
001E ; DATA=PINB;
001E ; while(DATA&&0x80)
001E ; {DATA=PINB;WDR();}
001E ; PORTD=PORTD&0X1F;
001E ; DDRB=0Xff;
001E ; */
001E ; LCD_WIRTE_DELAY(200);
001E 08EC ldi R16,200
0020 10E0 ldi R17,0
0022 EEDF xcall _LCD_WIRTE_DELAY
0024 .dbline 30
0024 ; //PORTD=PORTD&0X1F;//PD7,6,5置0
0024 ; PORTA=PORTA&0XF8;
0024 8BB3 in R24,0x1b
0026 887F andi R24,248
0028 8BBB out 0x1b,R24
002A .dbline 31
002A ; PORTB=ORDER; //
002A A8BA out 0x18,R10
002C .dbline 33
002C ; //PORTD=PORTD|0X80;//PD7置1
002C ; PORTA=PORTA |0X04;
002C DA9A sbi 0x1b,2
002E .dbline 34
002E ; LCD_WIRTE_DELAY(200);
002E 08EC ldi R16,200
0030 10E0 ldi R17,0
0032 E6DF xcall _LCD_WIRTE_DELAY
0034 .dbline 36
0034 ; //PORTD=PORTD&0X1F;//PD7,6,5置0
0034 ; PORTA=PORTA&0XF8;
0034 8BB3 in R24,0x1b
0036 887F andi R24,248
0038 8BBB out 0x1b,R24
003A .dbline -2
003A L5:
003A .dbline 0 ; func end
003A A990 ld R10,y+
003C 0895 ret
003E .dbsym l DATA 1 c
003E .dbsym r ORDER 10 c
003E .dbend
003E .dbfunc e LCD_WRI_DATA _LCD_WRI_DATA fV
003E ; ords -> <dead>
003E ; DATA -> R10
.even
003E _LCD_WRI_DATA::
003E AA92 st -y,R10
0040 A02E mov R10,R16
0042 .dbline -1
0042 .dbline 43
0042 ; }
0042 ;
0042 ;
0042 ; /*-----------写到lcd中显示数据---------*/
0042 ; ////////////////////////////////////////////////////////////////////////////////////
0042 ; void LCD_WRI_DATA(unsigned char DATA)
0042 ; {
0042 .dbline 46
0042 ;
0042 ; unsigned char ords;
0042 ; WDR();
0042 A895 wdr
0044 .dbline 58
0044 ;
0044 ; /*
0044 ; PORTD=PORTD&0X1F;
0044 ; PORTD=PORTD|0X40;
0044 ; DDRB=0X00;
0044 ; ords=PINB;
0044 ; while(ords&&0x80)
0044 ; {ords=PINB;WDR();}
0044 ; DDRB=0Xff;
0044 ; */
0044 ; //PORTD=PORTD&0X7F;//PD7置0
0044 ; PORTA=PORTA&0XFB;
0044 8BB3 in R24,0x1b
0046 8B7F andi R24,251
0048 8BBB out 0x1b,R24
004A .dbline 59
004A ; LCD_WIRTE_DELAY(200);
004A 08EC ldi R16,200
004C 10E0 ldi R17,0
004E D8DF xcall _LCD_WIRTE_DELAY
0050 .dbline 61
0050 ; //PORTD=PORTD|0X20; //PD5置1
0050 ; PORTA=PORTA|0X01;
0050 D89A sbi 0x1b,0
0052 .dbline 62
0052 ; PORTB=DATA;
0052 A8BA out 0x18,R10
0054 .dbline 64
0054 ; //PORTD=PORTD|0X80;//PD7置1
0054 ; PORTA=PORTA |0X04;
0054 DA9A sbi 0x1b,2
0056 .dbline 65
0056 ; LCD_WIRTE_DELAY(200);
0056 08EC ldi R16,200
0058 10E0 ldi R17,0
005A D2DF xcall _LCD_WIRTE_DELAY
005C .dbline 67
005C ; //PORTD=PORTD&0X1F;//PD7,6,5置0
005C ; PORTA=PORTA & 0XF8;
005C 8BB3 in R24,0x1b
005E 887F andi R24,248
0060 8BBB out 0x1b,R24
0062 .dbline -2
0062 L6:
0062 .dbline 0 ; func end
0062 A990 ld R10,y+
0064 0895 ret
0066 .dbsym l ords 1 c
0066 .dbsym r DATA 10 c
0066 .dbend
0066 .dbfunc e LCD_DELAY _LCD_DELAY fV
0066 ; time -> R16,R17
.even
0066 _LCD_DELAY::
0066 .dbline -1
0066 .dbline 75
0066 ; }
0066 ;
0066 ;
0066 ;
0066 ;
0066 ; /*-------------延时46us----------*/
0066 ; void LCD_DELAY()
0066 ; {
0066 .dbline 76
0066 ; unsigned int time=500;
0066 04EF ldi R16,500
0068 11E0 ldi R17,1
006A .dbline 77
006A ; WDR();
006A A895 wdr
006C L8:
006C .dbline 78
006C ; while(--time);
006C L9:
006C .dbline 78
006C C801 movw R24,R16
006E 0197 sbiw R24,1
0070 8C01 movw R16,R24
0072 0030 cpi R16,0
0074 0107 cpc R16,R17
0076 D1F7 brne L8
0078 X1:
0078 .dbline 79
0078 ; WDR();
0078 A895 wdr
007A .dbline -2
007A L7:
007A .dbline 0 ; func end
007A 0895 ret
007C .dbsym r time 16 i
007C .dbend
007C .dbfunc e LCD_CLEAR _LCD_CLEAR fV
.even
007C _LCD_CLEAR::
007C .dbline -1
007C .dbline 84
007C ; }
007C ;
007C ;
007C ; void LCD_CLEAR()
007C ; {
007C .dbline 85
007C ; LCD_WRI_ORDER(0X01);
007C 01E0 ldi R16,1
007E C9DF xcall _LCD_WRI_ORDER
0080 .dbline 86
0080 ; LCD_DELAY();
0080 F2DF xcall _LCD_DELAY
0082 .dbline -2
0082 L11:
0082 .dbline 0 ; func end
0082 0895 ret
0084 .dbend
0084 .dbfunc e LCD_WORD_INI _LCD_WORD_INI fV
.even
0084 _LCD_WORD_INI::
0084 .dbline -1
0084 .dbline 101
0084 ; }
0084 ;
0084 ;
0084 ; //#define EN (DDRD|=BIT(PD7))
0084 ; //#define RW (DDRD|=BIT(PD6))
0084 ; //#define CR (DDRD|=BIT(PD5))
0084 ; //////////////////////////////////////////////////////////////
0084 ; #define EN (DDRA|=BIT(PA2))
0084 ; #define RW (DDRA|=BIT(PA1))
0084 ; #define CR (DDRA|=BIT(PA0))
0084 ; /////////////////////////////////////////////////////////////
0084 ;
0084 ;
0084 ; void LCD_WORD_INI(void)
0084 ; {
0084 .dbline 102
0084 ; WDR();
0084 A895 wdr
0086 .dbline 103
0086 ; EN;RW;CR;
0086 D29A sbi 0x1a,2
0088 .dbline 103
0088 D19A sbi 0x1a,1
008A .dbline 103
008A D09A sbi 0x1a,0
008C .dbline 104
008C ; LCD_WRI_ORDER(0X30); /*----------------清显示--------------------*/
008C 00E3 ldi R16,48
008E C1DF xcall _LCD_WRI_ORDER
0090 .dbline 105
0090 ; LCD_DELAY();
0090 EADF xcall _LCD_DELAY
0092 .dbline 106
0092 ; LCD_WRI_ORDER(0X30); /*----------------清显示--------------------*/
0092 00E3 ldi R16,48
0094 BEDF xcall _LCD_WRI_ORDER
0096 .dbline 107
0096 ; LCD_DELAY();
0096 E7DF xcall _LCD_DELAY
0098 .dbline 108
0098 ; LCD_DELAY();
0098 E6DF xcall _LCD_DELAY
009A .dbline 109
009A ; LCD_WRI_ORDER(0X0C); /*------------ 显示右移光标右移 --------------*/
009A 0CE0 ldi R16,12
009C BADF xcall _LCD_WRI_ORDER
009E .dbline 110
009E ; LCD_DELAY();
009E E3DF xcall _LCD_DELAY
00A0 .dbline 111
00A0 ; LCD_WRI_ORDER(0X01); /*------------ 显示右移光标右移 --------------*/
00A0 01E0 ldi R16,1
00A2 B7DF xcall _LCD_WRI_ORDER
00A4 .dbline 112
00A4 ; Delay1ms(1);
00A4 01E0 ldi R16,1
00A6 10E0 ldi R17,0
00A8 0E940000 xcall _Delay1ms
00AC .dbline 113
00AC ; LCD_WRI_ORDER(0X06); /*-------功能定为基本指令集动作8位------------*/
00AC 06E0 ldi R16,6
00AE B1DF xcall _LCD_WRI_ORDER
00B0 .dbline 114
00B0 ; LCD_DELAY();
00B0 DADF xcall _LCD_DELAY
00B2 .dbline -2
00B2 L12:
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbend
00B4 .dbfunc e LCD_ADD _LCD_ADD fV
00B4 ; ADD -> R10
.even
00B4 _LCD_ADD::
00B4 AA92 st -y,R10
00B6 A02E mov R10,R16
00B8 .dbline -1
00B8 .dbline 127
00B8 ; }
00B8 ; /*
00B8 ; void LCD_PIC_INI()
00B8 ; {
00B8 ; WDR();
00B8 ; LCD_WORD_INI();
00B8 ; LCD_WRI_ORDER(0X32); /*-------功能设定为基本指令集8位显示图形-----------*/
00B8 ; /* LCD_DELAY();
00B8 ; LCD_WRI_ORDER(0X36); /*-------功能设定为扩充指令集8位显示图形-----------*/
00B8 ; // LCD_DELAY();
00B8 ; //}*/
00B8 ; void LCD_ADD(unsigned char ADD)//写入地址
00B8 ; {
00B8 .dbline 128
00B8 ; LCD_WRI_ORDER(ADD);
00B8 0A2D mov R16,R10
00BA ABDF xcall _LCD_WRI_ORDER
00BC .dbline 129
00BC ; LCD_DELAY();
00BC D4DF xcall _LCD_DELAY
00BE .dbline -2
00BE L13:
00BE .dbline 0 ; func end
00BE A990 ld R10,y+
00C0 0895 ret
00C2 .dbsym r ADD 10 c
00C2 .dbend
00C2 .dbfunc e DISPLAY_LCD _DISPLAY_LCD fV
00C2 ; Y -> R10
00C2 ; DISP -> R20,R21
00C2 ; ADD -> R10
.even
00C2 _DISPLAY_LCD::
00C2 0E940000 xcall push_xgset300C
00C6 A901 movw R20,R18
00C8 A02E mov R10,R16
00CA .dbline -1
00CA .dbline 133
00CA ; }
00CA ;
00CA ; void DISPLAY_LCD(unsigned char ADD,unsigned char *DISP)//显示字符串
00CA ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -