lcd-16sn.lis
来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 871 行 · 第 1/3 页
LIS
871 行
.module LCD-16sn.c
.area text(rom, con, rel)
0000 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
.area data(ram, con, rel)
0000 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0000 _lcd_enable::
0000 .blkb 1
.area idata
0000 01 .byte 1
.area data(ram, con, rel)
0001 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0001 .dbsym e lcd_enable _lcd_enable c
0001 _lcd_disable::
0001 .blkb 1
.area idata
0001 FE .byte 254
.area data(ram, con, rel)
0002 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0002 .dbsym e lcd_disable _lcd_disable c
0002 _in_instr_wr::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0003 .dbsym e in_instr_wr _in_instr_wr c
0003 _in_data_wr::
0003 .blkb 1
.area idata
0003 04 .byte 4
.area data(ram, con, rel)
0004 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0004 .dbsym e in_data_wr _in_data_wr c
0004 _in_instr_rd::
0004 .blkb 1
.area idata
0004 02 .byte 2
.area data(ram, con, rel)
0005 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0005 .dbsym e in_instr_rd _in_instr_rd c
0005 _in_data_rd::
0005 .blkb 1
.area idata
0005 06 .byte 6
.area data(ram, con, rel)
0006 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0006 .dbsym e in_data_rd _in_data_rd c
0006 _indexhead::
0006 .blkb 2
.area idata
0006 0000 .word 0
.area data(ram, con, rel)
0008 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0008 .dbsym e indexhead _indexhead I
0008 _indextail::
0008 .blkb 2
.area idata
0008 0000 .word 0
.area data(ram, con, rel)
000A .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
000A .dbsym e indextail _indextail I
000A _cursor_index::
000A .blkb 2
.area idata
000A 0000 .word 0
.area data(ram, con, rel)
000C .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
000C .dbsym e cursor_index _cursor_index I
.area lit(rom, con, rel)
0000 _message1::
0000 202048656C6C6F20576F726C642100 .byte 32,32,'H,'e,'l,'l,'o,32,'W,'o,'r,'l,'d,33,0
000F .dbsym e message1 _message1 A[15:15]kc
000F _message2::
000F 7777772E696E6F766163732E636F6D00 .byte 'w,'w,'w,46,'i,'n,'o,'v,'a,'c,'s,46,'c,'o,'m,0
001F .dbsym e message2 _message2 A[16:16]kc
001F _message3::
001F 204861707079204E6577205965617200 .byte 32,'H,'a,'p,'p,'y,32,'N,'e,'w,32,'Y,'e,'a,'r,0
002F .dbsym e message3 _message3 A[16:16]kc
002F _message4::
002F 203230303820697320636F6D696E6700 .byte 32,50,48,48,56,32,'i,'s,32,'c,'o,'m,'i,'n,'g,0
003F .dbsym e message4 _message4 A[16:16]kc
003F _message5::
003F 204772656574696E672046726F6D00 .byte 32,'G,'r,'e,'e,'t,'i,'n,'g,32,'F,'r,'o,'m,0
004E .dbsym e message5 _message5 A[15:15]kc
004E _message6::
004E 7777772E696E6F766163732E636F6D00 .byte 'w,'w,'w,46,'i,'n,'o,'v,'a,'c,'s,46,'c,'o,'m,0
005E .dbsym e message6 _message6 A[16:16]kc
005E _message7::
005E 436F6E7461637420496E6F766100 .byte 'C,'o,'n,'t,'a,'c,'t,32,'I,'n,'o,'v,'a,0
006C .dbsym e message7 _message7 A[14:14]kc
006C _message8::
006C 54656C3A303539322035353633353730 .byte 'T,'e,'l,58,48,53,57,50,32,53,53,54,51,53,55,48
007C 00 .byte 0
007D .dbsym e message8 _message8 A[17:17]kc
.area text(rom, con, rel)
0000 .dbfile C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 38
0000 ; // Title: LCD-16sn.c
0000 ; // Functon program for DEMOA-16sm utilizing LCD
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <stdlib.h>
0000 ;
0000 ; unsigned char lcd_enable = 0b00000001, lcd_disable = 0b11111110;
0000 ; unsigned char in_instr_wr = 0b00000000, in_data_wr = 0b00000100;
0000 ; unsigned char in_instr_rd = 0b00000010, in_data_rd = 0b00000110;
0000 ;
0000 ; void wr_instruction(unsigned char instr);
0000 ; void wr_data(unsigned char data);
0000 ;
0000 ; int indexhead=0, indextail=0, indexcount;
0000 ; int cursor_index=0;
0000 ;
0000 ;
0000 ; const char message1[]= {" Hello World!"};
0000 ; const char message2[]= {"www.inovacs.com"};
0000 ; const char message3[]= {" Happy New Year"};
0000 ; const char message4[]= {" 2008 is coming"};
0000 ; const char message5[]= {" Greeting From"};
0000 ; const char message6[]= {"www.inovacs.com"};
0000 ; const char message7[]= {"Contact Inova"};
0000 ; const char message8[]= {"Tel:0592 5563570"};
0000 ;
0000 ; void cursor_home(void);
0000 ; void cursor_line1(void);
0000 ; void cursor_line2(void);
0000 ; void lcd_delay(int);
0000 ;
0000 ; unsigned char swin, swin2;
0000 ; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0000 ; // Initilization file
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 39
0000 ; DDRA = 0xff; //PA0-PA2 for LCD control
0000 8FEF ldi R24,255
0002 8ABB out 0x1a,R24
0004 .dbline 40
0004 ; DDRB = 0xff; //PB0-PB7 for LCD data
0004 87BB out 0x17,R24
0006 .dbline 42
0006 ;
0006 ; DDRD = 0xff; //Control LEDs on left group
0006 81BB out 0x11,R24
0008 .dbline 43
0008 ; DDRC = 0x00; //Receive from dip-switch and button
0008 2224 clr R2
000A 24BA out 0x14,R2
000C .dbline 44
000C ; PORTC=0xff;
000C 85BB out 0x15,R24
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e WDT_off _WDT_off fV
.even
0010 _WDT_off::
0010 .dbline -1
0010 .dbline 48
0010 ; }
0010 ;
0010 ; void WDT_off(void)
0010 ; {
0010 .dbline 49
0010 ; WDR();
0010 A895 wdr
0012 .dbline 50
0012 ; WDTCR=0b00010111;
0012 87E1 ldi R24,23
0014 81BD out 0x21,R24
0016 .dbline 51
0016 ; WDTCR=0b00000111;
0016 87E0 ldi R24,7
0018 81BD out 0x21,R24
001A .dbline -2
001A L2:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbend
001C .dbfunc e lcd_delay _lcd_delay fV
001C ; b -> R10,R11
001C ; a -> R20,R21
001C ; count -> R16,R17
.even
001C _lcd_delay::
001C 0E940000 xcall push_xgset300C
0020 .dbline -1
0020 .dbline 55
0020 ; }
0020 ;
0020 ; void lcd_delay(int count)
0020 ; {
0020 .dbline 57
0020 ; int a,b;
0020 ; b=2*count;
0020 5801 movw R10,R16
0022 AA0C lsl R10
0024 BB1C rol R11
0026 .dbline 58
0026 ; for(a=0; a<b; a++)
0026 4427 clr R20
0028 5527 clr R21
002A 02C0 xjmp L7
002C L4:
002C .dbline 59
002C ; ;
002C L5:
002C .dbline 58
002C 4F5F subi R20,255 ; offset = 1
002E 5F4F sbci R21,255
0030 L7:
0030 .dbline 58
0030 4A15 cp R20,R10
0032 5B05 cpc R21,R11
0034 DCF3 brlt L4
0036 X0:
0036 .dbline -2
0036 L3:
0036 .dbline 0 ; func end
0036 0C940000 xjmp pop_xgset300C
003A .dbsym r b 10 I
003A .dbsym r a 20 I
003A .dbsym r count 16 I
003A .dbend
003A .dbfunc e ldelay _ldelay fV
003A ; i -> R20,R21
003A ; ms -> R10,R11
.even
003A _ldelay::
003A 0E940000 xcall push_xgset300C
003E 5801 movw R10,R16
0040 .dbline -1
0040 .dbline 63
0040 ; }
0040 ;
0040 ; void ldelay(int ms)
0040 ; {
0040 .dbline 65
0040 ; int i;
0040 ; for(i=0; i<=ms; i++)
0040 4427 clr R20
0042 5527 clr R21
0044 05C0 xjmp L12
0046 L9:
0046 .dbline 66
0046 ; lcd_delay(0x2000); //2000-->4000
0046 00E0 ldi R16,8192
0048 10E2 ldi R17,32
004A E8DF xcall _lcd_delay
004C L10:
004C .dbline 65
004C 4F5F subi R20,255 ; offset = 1
004E 5F4F sbci R21,255
0050 L12:
0050 .dbline 65
0050 A416 cp R10,R20
0052 B506 cpc R11,R21
0054 C4F7 brge L9
0056 X1:
0056 .dbline -2
0056 L8:
0056 .dbline 0 ; func end
0056 0C940000 xjmp pop_xgset300C
005A .dbsym r i 20 I
005A .dbsym r ms 10 I
005A .dbend
005A .dbfunc e wr_instruction _wr_instruction fV
005A ; instr -> R10
.even
005A _wr_instruction::
005A AA92 st -y,R10
005C A02E mov R10,R16
005E .dbline -1
005E .dbline 79
005E ; }
005E ;
005E ; // ************************************************************
005E ; // LCD functions follows
005E ;
005E ; //PORTB to LCD data port
005E ; //PORTA to LCD control port
005E ; //PA0--> R/S
005E ; //PA1--> R/W
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?