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