lcd-16sm.lis

来自「大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多」· LIS 代码 · 共 1,093 行 · 第 1/3 页

LIS
1,093
字号
                        .module LCD-16sm.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\+samples-16small\LCD-16sm\LCD-16sm.c
                        .area data(ram, con, rel)
 0000                   .dbfile C:\+samples-16small\LCD-16sm\LCD-16sm.c
 0000           _lcd_enable::
 0000                   .blkb 1
                        .area idata
 0000 01                .byte 1
                        .area data(ram, con, rel)
 0001                   .dbfile C:\+samples-16small\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.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\LCD-16sm\LCD-16sm.c
 0000                   .dbfunc e port_init _port_init fV
                        .even
 0000           _port_init::
 0000                   .dbline -1
 0000                   .dbline 61
 0000           ; /*
 0000           ; Title:        LCD-16sm.c
 0000           ; Connection:
 0000           ;         Factory fixed setting:
 0000           ;         PORTA:
 0000           ;                       PA0-PA2 LCD control
 0000           ;                       PA3-PA7 4x7-segment display control
 0000           ;                       Drive LED group2 (the right group of LED)
 0000           ;         PORTB:
 0000           ;                       Shared by LCD and 4x7-segment displays
 0000           ;                       output 8-bit data to LCD or 8-bit data to 4x7-segment displays
 0000           ;         PORTC:
 0000           ;               shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
 0000           ;                       receive inputs from dipswitch, touch switches and buttons                               
 0000           ;         PORTD: 
 0000           ;                       Drive LED group1 (the left group of LED) 
 0000           ; Attention:
 0000           ;         1. J12 should be capped (connectted)
 0000           ;         2. J5 is the Jump for LCD back light power      
 0000           ; 
 0000           ; Operation:
 0000           ;         LCD panel display messages
 0000           ;         Four messages can be displayed 
 0000           ;         which message displayed is controlled by SW4 and SW5
 0000           ;         LED group1 display status of SW4 and SW5
 0000           ; */
 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           ; int ifr_decode(void);
 0000           ; unsigned char swin, swin2;
 0000           ; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 0000           ; // Initilization file
 0000           ; 
 0000           ; void port_init(void)
 0000           ;  {
 0000                   .dbline 62
 0000           ;  DDRA = 0xff;          //PA0-PA2 for LCD control
 0000 8FEF              ldi R24,255
 0002 8ABB              out 0x1a,R24
 0004                   .dbline 63
 0004           ;  DDRB = 0xff;          //PB0-PB7 for LCD data
 0004 87BB              out 0x17,R24
 0006                   .dbline 65
 0006           ;                                        
 0006           ;  DDRD = 0xff;          //Control LEDs on left group 
 0006 81BB              out 0x11,R24
 0008                   .dbline 66
 0008           ;  DDRC = 0x00;          //Receive from dip-switch and button           
 0008 2224              clr R2
 000A 24BA              out 0x14,R2
 000C                   .dbline 67
 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 71
 0010           ;  }
 0010           ; 
 0010           ; void WDT_off(void)
 0010           ;  {
 0010                   .dbline 72
 0010           ;  WDR();
 0010 A895              wdr
 0012                   .dbline 73
 0012           ;  WDTCR=0b00010111;
 0012 87E1              ldi R24,23
 0014 81BD              out 0x21,R24
 0016                   .dbline 74
 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 delay _delay fV
 001C           ;              b -> R10,R11
 001C           ;              a -> R20,R21
 001C           ;          count -> R16,R17
                        .even
 001C           _delay::
 001C 0E940000          xcall push_xgset300C
 0020                   .dbline -1
 0020                   .dbline 78
 0020           ;  }
 0020           ;  
 0020           ; void delay(int count)
 0020           ; {
 0020                   .dbline 80
 0020           ;  int a,b;
 0020           ;     b=2*count;
 0020 5801              movw R10,R16
 0022 AA0C              lsl R10
 0024 BB1C              rol R11
 0026                   .dbline 81
 0026           ;       for(a=0; a<b; a++)
 0026 4427              clr R20
 0028 5527              clr R21
 002A 02C0              xjmp L7
 002C           L4:
 002C                   .dbline 82
 002C           ;                        ;
 002C           L5:
 002C                   .dbline 81
 002C 4F5F              subi R20,255  ; offset = 1
 002E 5F4F              sbci R21,255
 0030           L7:
 0030                   .dbline 81
 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 86
 0040           ; }
 0040           ; 
 0040           ; void ldelay(int ms)
 0040           ; {
 0040                   .dbline 88
 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 89
 0046           ;        delay(0x2000);           //2000-->4000
 0046 00E0              ldi R16,8192
 0048 10E2              ldi R17,32
 004A E8DF              xcall _delay
 004C           L10:
 004C                   .dbline 88
 004C 4F5F              subi R20,255  ; offset = 1
 004E 5F4F              sbci R21,255
 0050           L12:
 0050                   .dbline 88
 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 102
 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
 005E           ; //PA2--> E
 005E           ; 
 005E           ; void wr_instruction(unsigned char instr)
 005E           ; {
 005E                   .dbline 103
 005E           ;  DDRA=0xff;
 005E 8FEF              ldi R24,255
 0060 8ABB              out 0x1a,R24
 0062                   .dbline 104
 0062           ;  delay(1);
 0062 01E0              ldi R16,1
 0064 10E0              ldi R17,0
 0066 DADF              xcall _delay
 0068                   .dbline 105
 0068           ;  PORTA=0b00000000;
 0068 2224              clr R2
 006A 2BBA              out 0x1b,R2
 006C                   .dbline 106
 006C           ;  PORTB=instr;                  //send out instruction
 006C A8BA              out 0x18,R10
 006E                   .dbline 107
 006E           ;  delay(2);
 006E 02E0              ldi R16,2
 0070 10E0              ldi R17,0
 0072 D4DF              xcall _delay
 0074                   .dbline 108
 0074           ;  PORTA=0b00000100;             //PA2<--1 LCD-E ON (enable)
 0074 84E0              ldi R24,4
 0076 8BBB              out 0x1b,R24
 0078                   .dbline 109
 0078           ;  delay(2);
 0078 02E0              ldi R16,2
 007A 10E0              ldi R17,0
 007C CFDF              xcall _delay
 007E                   .dbline 110
 007E           ;  PORTA=0b00000000;             //PA2<--0 LCD-E OFF (disable) 
 007E 2224              clr R2
 0080 2BBA              out 0x1b,R2
 0082                   .dbline 111
 0082           ;  delay(1);
 0082 01E0              ldi R16,1
 0084 10E0              ldi R17,0
 0086 CADF              xcall _delay
 0088                   .dbline -2
 0088           L13:
 0088                   .dbline 0 ; func end
 0088 A990              ld R10,y+
 008A 0895              ret
 008C                   .dbsym r instr 10 c
 008C                   .dbend
 008C                   .dbfunc e wr_data _wr_data fV

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?