📄 lcd.lst
字号:
__start:
__text_start:
0019 E5CF LDI R28,0x5F
001A E0D2 LDI R29,2
001B BFCD OUT 0x3D,R28
001C BFDE OUT 0x3E,R29
001D 51C0 SUBI R28,0x10
001E 40D0 SBCI R29,0
001F EA0A LDI R16,0xAA
0020 8308 STD Y+0,R16
0021 2400 CLR R0
0022 E6E0 LDI R30,0x60
0023 E0F0 LDI R31,0
0024 E010 LDI R17,0
0025 36E4 CPI R30,0x64
0026 07F1 CPC R31,R17
0027 F011 BEQ 0x002A
0028 9201 ST R0,Z+
0029 CFFB RJMP 0x0025
002A 8300 STD Z+0,R16
002B E3E2 LDI R30,0x32
002C E0F0 LDI R31,0
002D E6A0 LDI R26,0x60
002E E0B0 LDI R27,0
002F E010 LDI R17,0
0030 33E2 CPI R30,0x32
0031 07F1 CPC R31,R17
0032 F021 BEQ 0x0037
0033 95C8 LPM
0034 9631 ADIW R30,1
0035 920D ST R0,X+
0036 CFF9 RJMP 0x0030
0037 D001 RCALL _main
_exit:
0038 CFFF RJMP _exit
FILE: F:\应用\拷贝应用\icc-avr-lcd\main01.c
(0001) #include<io8515.h>
(0002) //**************************************
(0003) void Cacu_Display(unsigned char temp);
(0004) void Display(unsigned char DisNum);
(0005) void main()
(0006) { DDRB=0b11111111;
_main:
0039 EF8F LDI R24,0xFF
003A BB87 OUT 0x17,R24
(0007) //DDRA=0b11111111;
(0008) // DDRC=0b11111111;
(0009) //DDRD=0b11111111;
(0010)
(0011) //Cacu_Display(0255);
(0012) //PORTA=0b01010101;
(0013) //PORTB=0b01010101;
(0014) //PORTC=0b01010101;
(0015) //PORTD=0b01010101;
(0016) Display(1);
003B E001 LDI R16,1
003C D008 RCALL _Display
(0017) Display(2);
003D E002 LDI R16,2
003E D006 RCALL _Display
(0018) Display(3);
003F E003 LDI R16,3
0040 D004 RCALL _Display
(0019) Display(4);
0041 E004 LDI R16,4
0042 D002 RCALL _Display
(0020) while(1)
0043 CFFF RJMP 0x0043
0044 9508 RET
_Display:
Disi --> R20
DisTem --> R22
DisNum --> R10
0045 D05B RCALL push_gset3
0046 2EA0 MOV R10,R16
FILE: F:\应用\拷贝应用\icc-avr-lcd\Display.c
(0001) #include<io8515.h>
(0002) //***************************************************
(0003) //显示子程序,用于显示一个数字,小数点在最高位。
(0004) //传递一个0-9的数字
(0005) //DisPort——显示的端口。DisPortD——端口方向。
(0006) //DisTab[10]——显示码(const unsigned char)
(0007) //74ls4093三个输入口 str,dada,clock
(0008) //and3=str+data+clock.
(0009) //**************************************************
(0010) //P0 data
(0011) //P1 clock
(0012) //P2 TRO
(0013) //STR-PB0 CLOCK-PB1 DATA-PB2
(0014) #define DisPort PORTB
(0015) #define DisDdr DDRB
(0016) #define str 0b00000100
(0017) #define data 0b00000001
(0018) #define clock 0b00000010
(0019) #define and3 0b00000111
(0020)
(0021) //===============================================================
(0022) unsigned char num[4];
(0023) //最后三条为"E""-""全灭"
(0024) const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
(0025) 0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
(0026)
(0027) //===============================================================
(0028) void Display(unsigned char DisNum)
(0029) { unsigned char DisTem;
(0030) unsigned char Disi=8;
0047 E048 LDI R20,0x8
(0031) DisTem= DisNum;
0048 2D6A MOV R22,R10
(0032) DisTem=DisTem&0b01111111;
0049 776F ANDI R22,0x7F
(0033) DisTem=DisTab[DisTem];
004A E282 LDI R24,0x22
004B E090 LDI R25,0
004C 2FE6 MOV R30,R22
004D 27FF CLR R31
004E 0FE8 ADD R30,R24
004F 1FF9 ADC R31,R25
0050 9164 LPM R22,0(Z)
(0034) DisNum=DisNum&0b10000000;
0051 2D8A MOV R24,R10
0052 7880 ANDI R24,0x80
0053 2EA8 MOV R10,R24
(0035) DisNum=DisNum|DisTem;
0054 2AA6 OR R10,R22
(0036) DisNum=~DisNum;
0055 94A0 COM R10
(0037) DisDdr=and3;
0056 E087 LDI R24,7
0057 BB87 OUT 0x17,R24
(0038) DisPort=DisPort|str;//set str=1
0058 9AC2 SBI 0x18,2
0059 C010 RJMP 0x006A
(0039) while(Disi)
(0040) {DisTem=DisNum;
005A 2D6A MOV R22,R10
(0041) DisPort=DisPort&~clock;//clock=0
005B 98C1 CBI 0x18,1
(0042) DisTem=DisTem>>(Disi-1);
005C 2F14 MOV R17,R20
005D 5011 SUBI R17,1
005E 2F06 MOV R16,R22
005F D05C RCALL lsr8
0060 2F60 MOV R22,R16
(0043) DisTem=DisTem&0b00000001;
0061 7061 ANDI R22,1
(0044) if(DisTem==1)
0062 3061 CPI R22,1
0063 F419 BNE 0x0067
(0045) {DisPort=DisPort|data;
0064 9AC0 SBI 0x18,0
(0046) DisPort=DisPort|clock;}
0065 9AC1 SBI 0x18,1
0066 C002 RJMP 0x0069
(0047) else
(0048) {DisPort=DisPort&~data;
0067 98C0 CBI 0x18,0
(0049) DisPort=DisPort|clock;}
0068 9AC1 SBI 0x18,1
(0050) Disi--;
0069 954A DEC R20
006A 2344 TST R20
006B F771 BNE 0x005A
006C D02E RCALL pop_gset3
006D 9508 RET
_Cacu_Display:
num --> Y+0
temp --> R20
006E D036 RCALL push_gset1
006F 2F40 MOV R20,R16
0070 9723 SBIW R28,3
(0051) }
(0052) }
(0053) //=============================================================
(0054) //***************************************************************
(0055) //计算显示一个不带小数点的四位数
(0056) void Cacu_Display(unsigned char temp)
(0057) { unsigned char num[3]={0,0,0};
0071 E28F LDI R24,0x2F
0072 E090 LDI R25,0
0073 01FE MOVW R30,R28
0074 E003 LDI R16,3
0075 E010 LDI R17,0
0076 93FA ST R31,-Y
0077 93EA ST R30,-Y
0078 939A ST R25,-Y
0079 938A ST R24,-Y
007A D047 RCALL asgncblk
007B C004 RJMP 0x0080
(0058)
(0059) while(temp>=1000)
(0060) {
(0061) temp=temp-1000;
007C 5E48 SUBI R20,0xE8
(0062) num[2]=num[2]+1;
007D 818A LDD R24,Y+2
007E 5F8F SUBI R24,0xFF
007F 838A STD Y+2,R24
0080 3E48 CPI R20,0xE8
0081 F7D4 BGE 0x007C
0082 C004 RJMP 0x0087
(0063) }
(0064) while(temp>=100)
(0065) {
(0066) temp=temp-100;
0083 5644 SUBI R20,0x64
(0067) num[1]=num[1]+1;
0084 8189 LDD R24,Y+1
0085 5F8F SUBI R24,0xFF
0086 8389 STD Y+1,R24
0087 3644 CPI R20,0x64
0088 F7D0 BCC 0x0083
0089 C004 RJMP 0x008E
(0068) }
(0069) while(temp>=10)
(0070) {
(0071) temp=temp-10;
008A 504A SUBI R20,0xA
(0072) num[0]=num[0]+1;
008B 8188 LDD R24,Y+0
008C 5F8F SUBI R24,0xFF
008D 8388 STD Y+0,R24
008E 304A CPI R20,0xA
008F F7D0 BCC 0x008A
(0073) }
(0074) Display(temp);
0090 2F04 MOV R16,R20
0091 DFB3 RCALL _Display
(0075) Display(num[0]);
0092 8108 LDD R16,Y+0
0093 DFB1 RCALL _Display
(0076) Display(num[1]);
0094 8109 LDD R16,Y+1
0095 DFAF RCALL _Display
(0077) Display(num[2]);
FILE: <library>
0096 810A LDD R16,Y+2
0097 DFAD RCALL _Display
0098 9623 ADIW R28,3
0099 D00E RCALL pop_gset1
009A 9508 RET
pop_gset3:
009B E0E4 LDI R30,4
009C C00C RJMP pop
push_gset5:
009D 92FA ST R15,-Y
009E 92EA ST R14,-Y
push_gset4:
009F 92DA ST R13,-Y
00A0 92CA ST R12,-Y
push_gset3:
00A1 92BA ST R11,-Y
00A2 92AA ST R10,-Y
push_gset2:
00A3 937A ST R23,-Y
00A4 936A ST R22,-Y
push_gset1:
00A5 935A ST R21,-Y
00A6 934A ST R20,-Y
00A7 9508 RET
pop_gset1:
00A8 E0E1 LDI R30,1
pop:
00A9 9149 LD R20,Y+
00AA 9159 LD R21,Y+
00AB FDE0 SBRC R30,0
00AC 9508 RET
00AD 9169 LD R22,Y+
00AE 9179 LD R23,Y+
00AF FDE1 SBRC R30,1
00B0 9508 RET
00B1 90A9 LD R10,Y+
00B2 90B9 LD R11,Y+
00B3 FDE2 SBRC R30,2
00B4 9508 RET
00B5 90C9 LD R12,Y+
00B6 90D9 LD R13,Y+
00B7 FDE3 SBRC R30,3
00B8 9508 RET
00B9 90E9 LD R14,Y+
00BA 90F9 LD R15,Y+
00BB 9508 RET
lsr8:
00BC 2311 TST R17
00BD F019 BEQ 0x00C1
00BE 9506 LSR R16
00BF 951A DEC R17
00C0 CFFB RJMP lsr8
00C1 9508 RET
asgncblk:
00C2 93AA ST R26,-Y
00C3 93BA ST R27,-Y
00C4 93EA ST R30,-Y
00C5 93FA ST R31,-Y
00C6 920A ST R0,-Y
00C7 81AF LDD R26,Y+7
00C8 85B8 LDD R27,Y+8
00C9 81ED LDD R30,Y+5
00CA 81FE LDD R31,Y+6
00CB 3000 CPI R16,0
00CC 0701 CPC R16,R17
00CD F031 BEQ 0x00D4
00CE 95C8 LPM
00CF 920D ST R0,X+
00D0 9631 ADIW R30,1
00D1 5001 SUBI R16,1
00D2 4010 SBCI R17,0
00D3 CFF7 RJMP 0x00CB
00D4 9009 LD R0,Y+
00D5 91F9 LD R31,Y+
00D6 91E9 LD R30,Y+
00D7 91B9 LD R27,Y+
00D8 91A9 LD R26,Y+
00D9 9624 ADIW R28,4
00DA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -