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 + -
显示快捷键?