📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile D:\垃圾站\lcd.c
0000 .dbfile D:\垃圾站\delay.h
0000 .dbfunc e delay_nus _delay_nus fV
0000 ; time -> R16,R17
.even
0000 _delay_nus::
0000 .dbline -1
0000 .dbline 33
0000 ; //#define F_CPU 12000000
0000 ; #define F_CPU 11059200
0000 ; //#define F_CPU 8000000
0000 ; //#define F_CPU 7372800
0000 ; //#define F_CPU 4000000
0000 ; /*************************************************************************
0000 ; 通用延时头文件:
0000 ; delay_nus(n)延时n微秒
0000 ; delay_nms(n)延时n毫秒
0000 ; *************************************************************************/
0000 ; #if F_CPU == 12000000
0000 ; void delay_nus(unsigned int time)
0000 ; {
0000 ; while (time!=0)
0000 ; {
0000 ; NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0000 ; time--;
0000 ; }
0000 ; }
0000 ; void delay_nms(unsigned int time)
0000 ; {
0000 ; unsigned int i;
0000 ; while (time!=0)
0000 ; {
0000 ; for(i=0;i<1740;i++);
0000 ; time--;
0000 ; }
0000 ; }
0000 ; #endif
0000 ;
0000 ; #if F_CPU == 11059200
0000 ; void delay_nus(unsigned int time)
0000 ; {
0000 09C0 xjmp L3
0002 L2:
0002 .dbline 35
0002 ; while (time!=0)
0002 ; {
0002 .dbline 36
0002 ; NOP();NOP();NOP();NOP();NOP();NOP();NOP();
0002 0000 nop
0004 .dbline 36
0004 0000 nop
0006 .dbline 36
0006 0000 nop
0008 .dbline 36
0008 0000 nop
000A .dbline 36
000A 0000 nop
000C .dbline 36
000C 0000 nop
000E .dbline 36
000E 0000 nop
0010 .dbline 37
0010 ; time--;
0010 0150 subi R16,1
0012 1040 sbci R17,0
0014 .dbline 38
0014 ; }
0014 L3:
0014 .dbline 34
0014 0030 cpi R16,0
0016 0107 cpc R16,R17
0018 A1F7 brne L2
001A X0:
001A .dbline -2
001A L1:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbsym r time 16 i
001C .dbend
001C .dbfunc e delay_nms _delay_nms fV
001C ; i -> R20,R21
001C ; time -> R16,R17
.even
001C _delay_nms::
001C 4A93 st -y,R20
001E 5A93 st -y,R21
0020 .dbline -1
0020 .dbline 41
0020 ; }
0020 ; void delay_nms(unsigned int time)
0020 ; {
0020 0BC0 xjmp L7
0022 L6:
0022 .dbline 44
0022 ; unsigned int i;
0022 ; while (time!=0)
0022 ; {
0022 .dbline 45
0022 ; for(i=0;i<1580;i++);
0022 4427 clr R20
0024 5527 clr R21
0026 02C0 xjmp L12
0028 L9:
0028 .dbline 45
0028 L10:
0028 .dbline 45
0028 4F5F subi R20,255 ; offset = 1
002A 5F4F sbci R21,255
002C L12:
002C .dbline 45
002C 4C32 cpi R20,44
002E E6E0 ldi R30,6
0030 5E07 cpc R21,R30
0032 D0F3 brlo L9
0034 X1:
0034 .dbline 46
0034 ; time--;
0034 0150 subi R16,1
0036 1040 sbci R17,0
0038 .dbline 47
0038 ; }
0038 L7:
0038 .dbline 43
0038 0030 cpi R16,0
003A 0107 cpc R16,R17
003C 91F7 brne L6
003E X2:
003E .dbline -2
003E L5:
003E .dbline 0 ; func end
003E 5991 ld R21,y+
0040 4991 ld R20,y+
0042 0895 ret
0044 .dbsym r i 20 i
0044 .dbsym r time 16 i
0044 .dbend
0044 .dbfile D:\垃圾站\lcd.c
0044 .dbfunc e delay _delay fV
0044 ; i -> R10
0044 ; n -> R16
.even
0044 _delay::
0044 AA92 st -y,R10
0046 BA92 st -y,R11
0048 .dbline -1
0048 .dbline 10
0048 ; #include <iom16v.h>
0048 ; #include <macros.h>
0048 ; #define LCD12864 TRUE
0048 ; #include "delay.h"
0048 ; #define LCD_DATAL PORTA&=~BIT(1)
0048 ; #define LCD_DATAH PORTA|=BIT(1)
0048 ; #define LCD_CLKL PORTA&=~BIT(3)
0048 ; #define LCD_CLKH PORTA|=BIT(3)
0048 ; void delay(unsigned char n)
0048 ; {
0048 .dbline 12
0048 ; unsigned char i;
0048 ; for(i=0;i<n;i++) //延时
0048 AA24 clr R10
004A 02C0 xjmp L17
004C L14:
004C .dbline 13
004C ; {asm("nop");}
004C .dbline 13
004C 0000 nop
004E .dbline 13
004E L15:
004E .dbline 12
004E A394 inc R10
0050 L17:
0050 .dbline 12
0050 A016 cp R10,R16
0052 E0F3 brlo L14
0054 X3:
0054 .dbline -2
0054 L13:
0054 .dbline 0 ; func end
0054 B990 ld R11,y+
0056 A990 ld R10,y+
0058 0895 ret
005A .dbsym r i 10 c
005A .dbsym r n 16 c
005A .dbend
005A .dbfunc e lcd_out _lcd_out fV
005A ; s -> <dead>
005A ; i -> R20
005A ; send_byte -> R10
.even
005A _lcd_out::
005A 0E940000 xcall push_xgset300C
005E A02E mov R10,R16
0060 .dbline -1
0060 .dbline 19
0060 ; }
0060 ; //*************************************************************************
0060 ;
0060 ; //***************************************************************************
0060 ; void lcd_out(unsigned char send_byte)
0060 ; {
0060 .dbline 21
0060 ; unsigned char i,s;
0060 ; for (i=0;i<8;i++)
0060 4427 clr R20
0062 09C0 xjmp L22
0064 L19:
0064 .dbline 22
0064 ; {
0064 .dbline 23
0064 ; if((send_byte&0x80)==0)
0064 A7FC sbrc R10,7
0066 02C0 rjmp L23
0068 X4:
0068 .dbline 24
0068 ; {
0068 .dbline 25
0068 ; LCD_DATAL;
0068 D998 cbi 0x1b,1
006A .dbline 26
006A ; }
006A 01C0 xjmp L24
006C L23:
006C .dbline 28
006C ; else
006C ; {
006C .dbline 29
006C ; LCD_DATAH;
006C D99A sbi 0x1b,1
006E .dbline 30
006E ; } //送数据
006E L24:
006E .dbline 31
006E ; LCD_CLKL;
006E DB98 cbi 0x1b,3
0070 .dbline 32
0070 ; LCD_CLKH;
0070 DB9A sbi 0x1b,3
0072 .dbline 33
0072 ; send_byte=send_byte<<1;
0072 AA0C lsl R10
0074 .dbline 34
0074 ; }
0074 L20:
0074 .dbline 21
0074 4395 inc R20
0076 L22:
0076 .dbline 21
0076 4830 cpi R20,8
0078 A8F3 brlo L19
007A X5:
007A .dbline 35
007A ; delay(256);
007A 00E0 ldi R16,0
007C E3DF xcall _delay
007E .dbline -2
007E L18:
007E .dbline 0 ; func end
007E 0C940000 xjmp pop_xgset300C
0082 .dbsym l s 1 c
0082 .dbsym r i 20 c
0082 .dbsym r send_byte 10 c
0082 .dbend
0082 .dbfunc e WR_dat _WR_dat fV
0082 ; s -> R20
0082 ; dat -> R22
.even
0082 _WR_dat::
0082 0E940000 xcall push_xgsetF000
0086 602F mov R22,R16
0088 .dbline -1
0088 .dbline 40
0088 ; }
0088 ; //***************************************************************************
0088 ;
0088 ; void WR_dat(unsigned char dat)
0088 ; {
0088 .dbline 42
0088 ; unsigned char s;
0088 ; s=dat&0xf0;
0088 462F mov R20,R22
008A 407F andi R20,240
008C .dbline 43
008C ; lcd_out(0xfa);
008C 0AEF ldi R16,250
008E E5DF xcall _lcd_out
0090 .dbline 44
0090 ; lcd_out(s);
0090 042F mov R16,R20
0092 E3DF xcall _lcd_out
0094 .dbline 45
0094 ; s=dat&0x0f;
0094 462F mov R20,R22
0096 4F70 andi R20,15
0098 .dbline 46
0098 ; s<<=4;
0098 842F mov R24,R20
009A 8F70 andi R24,#0x0F
009C 8295 swap R24
009E 482F mov R20,R24
00A0 .dbline 47
00A0 ; lcd_out(s);
00A0 082F mov R16,R24
00A2 DBDF xcall _lcd_out
00A4 .dbline -2
00A4 L25:
00A4 .dbline 0 ; func end
00A4 0C940000 xjmp pop_xgsetF000
00A8 .dbsym r s 20 c
00A8 .dbsym r dat 22 c
00A8 .dbend
00A8 .dbfunc e WR_control _WR_control fV
00A8 ; s -> R20
00A8 ; dat -> R22
.even
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -