demoa-16sm.lis

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

LIS
349
字号
                        .module DEMOA-16sm.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\+samples-16small\DEMOA-16sm\DEMOA-16sm.c
 0000                   .dbfunc e main _main fV
 0000           ;              a -> <dead>
 0000           ;         array1 -> y+0
 0000           ;          jsave -> <dead>
 0000           ;              j -> <dead>
 0000           ;           dark -> <dead>
 0000           ;           pfin -> <dead>
 0000           ;           data -> <dead>
 0000           ;              i -> R10,R11
 0000           ;         darkfg -> R20
                        .even
 0000           _main::
 0000 2A97              sbiw R28,10
 0002                   .dbline -1
 0002                   .dbline 77
 0002           ; /*
 0002           ; Title:        DEMOA-16sm.c
 0002           ; Connection:
 0002           ;         Factory fixed setting:
 0002           ;         PORTA:
 0002           ;                       PA0-PA2 LCD control
 0002           ;                       PA3-PA7 4x7-segment display control
 0002           ;                       Drive LED group2 (the right group of LED)
 0002           ;         PORTB:
 0002           ;                       Shared by LCD and 4x7-segment displays
 0002           ;                       output 8-bit data to LCD or 8-bit data to 4x7-segment displays
 0002           ;         PORTC:
 0002           ;               shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
 0002           ;                       receive inputs from dipswitch, touch switches and buttons                               
 0002           ;         PORTD: 
 0002           ;                       Drive LED group1 (the left group of LED) 
 0002           ; Attention:
 0002           ;         1. J12 should be capped (connectted)
 0002           ;         2. J5 is the Jump for LCD back light power      
 0002           ; 
 0002           ; Operation:
 0002           ;         See the User Mannual, which is included in CD
 0002           ; */
 0002           ; 
 0002           ; #include <iom16v.h>
 0002           ; #include <macros.h>
 0002           ; #include <stdlib.h>
 0002           ; 
 0002           ; // external symbols defined in LCD-avr-sm.c
 0002           ; extern unsigned char lcd_enable, lcd_disable;
 0002           ; extern unsigned char in_instr_wr, in_data_wr;
 0002           ; extern unsigned char in_instr_rd, in_data_rd;
 0002           ; extern void wr_instruction(unsigned char instr);
 0002           ; extern void wr_data(unsigned char data);
 0002           ; extern int indexhead, indextail, indexcount;
 0002           ; extern int cursor_index;
 0002           ; extern unsigned char swin, swin2;
 0002           ; extern const char message1[];
 0002           ; extern const char message2[]; 
 0002           ; extern const char message3[];
 0002           ; extern const char message4[];
 0002           ; extern const char message5[];
 0002           ; extern const char message6[];
 0002           ; extern const char message7[];
 0002           ; extern const char message8[];
 0002           ; 
 0002           ; extern void port_init(void);
 0002           ; extern void WDT_off(void);
 0002           ; extern void lcd_delay(int count);
 0002           ; extern void ldelay(int ms);
 0002           ; extern void wr_instruction(unsigned char instr);
 0002           ; extern void wr_data(unsigned char data);
 0002           ; extern void wr_instruction2(unsigned char instr);
 0002           ; extern void wr_data2(unsigned char data);
 0002           ; extern void cursor_home(void);                        
 0002           ; extern void cursor_line1(void);                 
 0002           ; extern void cursor_line2(void);               
 0002           ; extern void space(void);                                
 0002           ; extern void out_string(const char array[]); 
 0002           ; extern void lcd_on(void);
 0002           ; 
 0002           ; // External symboles defined in SegDisp-avr-fn.c
 0002           ; 
 0002           ; extern const char dig0, dig1, dig2, dig3, dot;
 0002           ; extern char segconv[];
 0002           ; extern unsigned char BCD0, BCD1, BCD2, BCD3;
 0002           ; extern int count;
 0002           ; 
 0002           ; //extern void port_init(void);
 0002           ; extern void delay(int count);
 0002           ; extern void BinToBCD(int data);
 0002           ; extern void dispseg(void);
 0002           ; 
 0002           ; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 0002           ; 
 0002           ; void main(void)
 0002           ; {
 0002                   .dbline 78
 0002           ;  unsigned char data, pfin, dark, darkfg=0xff;
 0002 4FEF              ldi R20,255
 0004                   .dbline 79
 0004           ;  int i=0;
 0004 AA24              clr R10
 0006 BB24              clr R11
 0008                   .dbline 82
 0008           ;  unsigned char j, jsave, array1[10];
 0008           ;  int a;
 0008           ;  CLI();
 0008 F894              cli
 000A                   .dbline 83
 000A           ;  port_init();
 000A 0E940000          xcall _port_init
 000E                   .dbline 84
 000E           ;  WDT_off();
 000E 0E940000          xcall _WDT_off
 0012                   .dbline 85
 0012           ;  ldelay(200);
 0012 08EC              ldi R16,200
 0014 10E0              ldi R17,0
 0016 0E940000          xcall _ldelay
 001A                   .dbline 86
 001A           ;  lcd_on();
 001A 0E940000          xcall _lcd_on
 001E                   .dbline 87
 001E           ;  PORTD=0x50;
 001E 80E5              ldi R24,80
 0020 82BB              out 0x12,R24
 0022                   .dbline 88
 0022           ;  ldelay(50);
 0022 02E3              ldi R16,50
 0024 10E0              ldi R17,0
 0026 0E940000          xcall _ldelay
 002A                   .dbline 89
 002A           ;  PORTD=0x05;
 002A 85E0              ldi R24,5
 002C 82BB              out 0x12,R24
 002E                   .dbline 90
 002E           ;  ldelay(50);
 002E 02E3              ldi R16,50
 0030 10E0              ldi R17,0
 0032 0E940000          xcall _ldelay
 0036                   .dbline 91
 0036           ;  out_string(message1);
 0036 00E0              ldi R16,<_message1
 0038 10E0              ldi R17,>_message1
 003A 0E940000          xcall _out_string
 003E                   .dbline 92
 003E           ;  cursor_line2();
 003E 0E940000          xcall _cursor_line2
 0042                   .dbline 93
 0042           ;  out_string(message2);
 0042 00E0              ldi R16,<_message2
 0044 10E0              ldi R17,>_message2
 0046 0E940000          xcall _out_string
 004A                   .dbline 94
 004A           ;  PORTD=0x55;
 004A 85E5              ldi R24,85
 004C 82BB              out 0x12,R24
 004E                   .dbline 95
 004E           ;  PORTA=0xF8;
 004E 88EF              ldi R24,248
 0050 8BBB              out 0x1b,R24
 0052                   .dbline 96
 0052           ;  PORTB=0x00;
 0052 2224              clr R2
 0054 28BA              out 0x18,R2
 0056                   .dbline 97
 0056           ;  ldelay(100);
 0056 04E6              ldi R16,100
 0058 10E0              ldi R17,0
 005A 0E940000          xcall _ldelay
 005E 58C0              xjmp L3
 0060           L2:
 0060                   .dbline 100
 0060           ; 
 0060           ;  while(1)
 0060           ;  {
 0060                   .dbline 101
 0060           ;   WDR();
 0060 A895              wdr
 0062                   .dbline 102
 0062           ;   swin=PINC&0x30;
 0062 83B3              in R24,0x13
 0064 8073              andi R24,48
 0066 80930000          sts _swin,R24
 006A                   .dbline 103
 006A           ;   swin=(swin>>4)&0x03;
 006A 8295              swap R24
 006C 8F70              andi R24,#0x0F
 006E 8370              andi R24,3
 0070 80930000          sts _swin,R24
 0074                   .dbline 104
 0074           ;   if(swin2!=swin)
 0074 282E              mov R2,R24
 0076 30900000          lds R3,_swin2
 007A 3816              cp R3,R24
 007C 09F4              brne X5
 007E 3FC0              xjmp L5
 0080           X5:
 0080           X0:
 0080                   .dbline 105
 0080           ;     {
 0080                   .dbline 106
 0080           ;        swin2=swin;
 0080 20920000          sts _swin2,R2
 0084                   .dbline 107
 0084           ;        if(swin==0x00)
 0084 8823              tst R24
 0086 69F4              brne L7
 0088           X1:
 0088                   .dbline 108
 0088           ;       {
 0088                   .dbline 109
 0088           ;         cursor_home();
 0088 0E940000          xcall _cursor_home
 008C                   .dbline 110
 008C           ;         out_string(message1);
 008C 00E0              ldi R16,<_message1
 008E 10E0              ldi R17,>_message1
 0090 0E940000          xcall _out_string
 0094                   .dbline 111
 0094           ;         cursor_line2();
 0094 0E940000          xcall _cursor_line2
 0098                   .dbline 112
 0098           ;         out_string(message2);
 0098 00E0              ldi R16,<_message2
 009A 10E0              ldi R17,>_message2
 009C 0E940000          xcall _out_string
 00A0                   .dbline 113
 00A0           ;         }
 00A0 2EC0              xjmp L8
 00A2           L7:
 00A2                   .dbline 114
 00A2           ;        else if(swin==0x01)
 00A2 80910000          lds R24,_swin
 00A6 8130              cpi R24,1
 00A8 69F4              brne L9
 00AA           X2:
 00AA                   .dbline 115
 00AA           ;       {
 00AA                   .dbline 116
 00AA           ;         cursor_home();
 00AA 0E940000          xcall _cursor_home
 00AE                   .dbline 117
 00AE           ;         out_string(message3);
 00AE 00E0              ldi R16,<_message3
 00B0 10E0              ldi R17,>_message3
 00B2 0E940000          xcall _out_string
 00B6                   .dbline 118
 00B6           ;         cursor_line2();
 00B6 0E940000          xcall _cursor_line2
 00BA                   .dbline 119
 00BA           ;         out_string(message4);
 00BA 00E0              ldi R16,<_message4
 00BC 10E0              ldi R17,>_message4
 00BE 0E940000          xcall _out_string
 00C2                   .dbline 120
 00C2           ;         }
 00C2 1DC0              xjmp L10
 00C4           L9:
 00C4                   .dbline 121
 00C4           ;      else if(swin==0x02)
 00C4 80910000          lds R24,_swin
 00C8 8230              cpi R24,2
 00CA 69F4              brne L11
 00CC           X3:
 00CC                   .dbline 122
 00CC           ;       {
 00CC                   .dbline 123
 00CC           ;         cursor_home();
 00CC 0E940000          xcall _cursor_home
 00D0                   .dbline 124
 00D0           ;         out_string(message5);
 00D0 00E0              ldi R16,<_message5
 00D2 10E0              ldi R17,>_message5
 00D4 0E940000          xcall _out_string
 00D8                   .dbline 125
 00D8           ;         cursor_line2();
 00D8 0E940000          xcall _cursor_line2
 00DC                   .dbline 126
 00DC           ;         out_string(message6);
 00DC 00E0              ldi R16,<_message6
 00DE 10E0              ldi R17,>_message6
 00E0 0E940000          xcall _out_string
 00E4                   .dbline 127
 00E4           ;         }
 00E4 0CC0              xjmp L12
 00E6           L11:
 00E6                   .dbline 129
 00E6           ;      else
 00E6           ;       {
 00E6                   .dbline 130
 00E6           ;         cursor_home();
 00E6 0E940000          xcall _cursor_home
 00EA                   .dbline 131
 00EA           ;         out_string(message7);
 00EA 00E0              ldi R16,<_message7
 00EC 10E0              ldi R17,>_message7
 00EE 0E940000          xcall _out_string
 00F2                   .dbline 132
 00F2           ;         cursor_line2();
 00F2 0E940000          xcall _cursor_line2
 00F6                   .dbline 133
 00F6           ;         out_string(message8);
 00F6 00E0              ldi R16,<_message8
 00F8 10E0              ldi R17,>_message8
 00FA 0E940000          xcall _out_string
 00FE                   .dbline 134
 00FE           ;         }             
 00FE           L12:
 00FE           L10:
 00FE           L8:
 00FE                   .dbline 135
 00FE           ;       }
 00FE           L5:
 00FE                   .dbline 136
 00FE           ;       swin=PINC;
 00FE 23B2              in R2,0x13
 0100 20920000          sts _swin,R2
 0104                   .dbline 137
 0104           ;       BinToBCD(swin);
 0104 022D              mov R16,R2
 0106 1127              clr R17
 0108 0E940000          xcall _BinToBCD
 010C                   .dbline 138
 010C           ;       dispseg();      
 010C 0E940000          xcall _dispseg
 0110                   .dbline 139
 0110           ;   }
 0110           L3:
 0110                   .dbline 99
 0110 A7CF              xjmp L2
 0112           X4:
 0112                   .dbline -2
 0112           L1:
 0112                   .dbline 0 ; func end
 0112 2A96              adiw R28,10
 0114 0895              ret
 0116                   .dbsym l a 1 I
 0116                   .dbsym l array1 0 A[10:10]c
 0116                   .dbsym l jsave 1 c
 0116                   .dbsym l j 1 c
 0116                   .dbsym l dark 1 c
 0116                   .dbsym l pfin 1 c
 0116                   .dbsym l data 1 c
 0116                   .dbsym r i 10 I
 0116                   .dbsym r darkfg 20 c
 0116                   .dbend
 0116           ; } 
 0116           ; 

⌨️ 快捷键说明

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