?? erpfg.lst
字號:
__start:
__text_start:
86 EFCF LDI R28,0xFF
87 E2D1 LDI R29,0x21
88 BFCD OUT 0x3D,R28
89 BFDE OUT 0x3E,R29
8A 51CE SUBI R28,0x1E
8B 40D0 SBCI R29,0
8C EA0A LDI R16,0xAA
8D 8308 STD Y+0,R16
8E 2400 CLR R0
8F E0E0 LDI R30,0
90 E0F2 LDI R31,2
91 E012 LDI R17,2
92 30E0 CPI R30,0
93 07F1 CPC R31,R17
94 F011 BEQ 0x0097
95 9201 ST R0,Z+
96 CFFB RJMP 0x0092
97 8300 STD Z+0,R16
98 E0EC LDI R30,0xC
99 E0F1 LDI R31,1
9A E0A0 LDI R26,0
9B E0B2 LDI R27,2
9C E011 LDI R17,1
9D E000 LDI R16,0
9E BF0B OUT 0x3B,R16
9F 30EC CPI R30,0xC
A0 07F1 CPC R31,R17
A1 F021 BEQ 0x00A6
A2 95C8 LPM
A3 9631 ADIW R30,1
A4 920D ST R0,X+
A5 CFF9 RJMP 0x009F
A6 940E 00CA CALL _main
_exit:
A8 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\新建文件夾\main.c
(0001) #include "config.h"
(0002) /*******************************************************************************/
(0003) void DELAY(unsigned int num)
(0004) {
(0005) WDR();
_DELAY:
num --> R16
A9 95A8 WDR
(0006) while(num--);
AA 0118 MOVW R2,R16
AB 5001 SUBI R16,1
AC 4010 SBCI R17,0
AD 2022 TST R2
AE F7D9 BNE 0x00AA
AF 2033 TST R3
B0 F7C9 BNE 0x00AA
(0007) WDR();
B1 95A8 WDR
B2 9508 RET
_Delay1ms:
j --> R20
a --> R22
t --> R16
B3 940E 0258 CALL push_xgsetF000
(0008) }
(0009) /*******************************************************************************/
(0010) /*******************************************************************************/
(0011) void Delay1ms(unsigned int t)//延時子程序,延時 1MS*t S
(0012) {
(0013) unsigned int a,j;
(0014) for(j=0;j<t;j++)
B5 2744 CLR R20
B6 2755 CLR R21
B7 C00C RJMP 0x00C4
(0015) {
(0016) WDR();
B8 95A8 WDR
(0017) for(a = 0; a < 125; a++)
B9 2766 CLR R22
BA 2777 CLR R23
BB C002 RJMP 0x00BE
BC 5F6F SUBI R22,0xFF
BD 4F7F SBCI R23,0xFF
BE 376D CPI R22,0x7D
BF E0E0 LDI R30,0
C0 077E CPC R23,R30
C1 F3D0 BCS 0x00BC
C2 5F4F SUBI R20,0xFF
C3 4F5F SBCI R21,0xFF
C4 1740 CP R20,R16
C5 0751 CPC R21,R17
C6 F388 BCS 0x00B8
(0018) {;}
(0019) }
(0020) WDR();
C7 95A8 WDR
C8 940C 025D JMP pop_xgsetF000
_main:
logS --> Y,+0
CA 972B SBIW R28,0xB
(0021) }
(0022) void main(void)
(0023) {
(0024)
(0025) uint8 logS[]={" 歡迎使用 "};
CB EE84 LDI R24,0xE4
CC E090 LDI R25,0
CD 01FE MOVW R30,R28
CE E00B LDI R16,0xB
CF E010 LDI R17,0
D0 93FA ST R31,-Y
D1 93EA ST R30,-Y
D2 939A ST R25,-Y
D3 938A ST R24,-Y
D4 940E 0262 CALL asgncblk
D6 C005 RJMP 0x00DC
(0026) while(1)
(0027) {
(0028) DISPLAY_LCD(0X85,logS);
D7 019E MOVW R18,R28
D8 E805 LDI R16,0x85
D9 E010 LDI R17,0
DA 940E 0140 CALL _DISPLAY_LCD
DC CFFA RJMP 0x00D7
DD 962B ADIW R28,0xB
DE 9508 RET
FILE: C:\DOCUME~1\Administrator\桌面\新建文件夾\lcd.c
(0001) #include "config.h"
(0002)
(0003) void LCD_WIRTE_DELAY(unsigned int lcd_time)
(0004) {
(0005) WDR();
_LCD_WIRTE_DELAY:
lcd_time --> R16
DF 95A8 WDR
(0006) while(--lcd_time)
E0 01C8 MOVW R24,R16
E1 9701 SBIW R24,1
E2 018C MOVW R16,R24
E3 3000 CPI R16,0
E4 0701 CPC R16,R17
E5 F7D1 BNE 0x00E0
(0007) {;}
(0008) WDR();
E6 95A8 WDR
E7 9508 RET
_LCD_WRI_ORDER:
DATA --> Y,+1
ORDER --> R10
E8 92AA ST R10,-Y
E9 2EA0 MOV R10,R16
(0009) }
(0010)
(0011) /*--------------------------向LCD寫命令---------*/
(0012) ///////////////////////////////////////////////////////////////////////////////////////////////////
(0013) void LCD_WRI_ORDER(unsigned char ORDER)
(0014) {
(0015) unsigned char DATA;
(0016) WDR();
EA 95A8 WDR
(0017) // PORTD=PORTD&0X1F;//PD7,6,5置0
(0018) PORTA=PORTA&0XF8;
EB B38B IN R24,0x1B
EC 7F88 ANDI R24,0xF8
ED BB8B OUT 0x1B,R24
(0019) /*
(0020) PORTD=PORTD|0X40;
(0021) DDRB=0X00;
(0022) DATA=PINB;
(0023) while(DATA&&0x80)
(0024) {DATA=PINB;WDR();}
(0025) PORTD=PORTD&0X1F;
(0026) DDRB=0Xff;
(0027) */
(0028) LCD_WIRTE_DELAY(200);
EE EC08 LDI R16,0xC8
EF E010 LDI R17,0
F0 DFEE RCALL _LCD_WIRTE_DELAY
(0029) //PORTD=PORTD&0X1F;//PD7,6,5置0
(0030) PORTA=PORTA&0XF8;
F1 B38B IN R24,0x1B
F2 7F88 ANDI R24,0xF8
F3 BB8B OUT 0x1B,R24
(0031) PORTB=ORDER; //
F4 BAA8 OUT 0x18,R10
(0032) //PORTD=PORTD|0X80;//PD7置1
(0033) PORTA=PORTA |0X04;
F5 9ADA SBI 0x1B,2
(0034) LCD_WIRTE_DELAY(200);
F6 EC08 LDI R16,0xC8
F7 E010 LDI R17,0
F8 DFE6 RCALL _LCD_WIRTE_DELAY
(0035) //PORTD=PORTD&0X1F;//PD7,6,5置0
(0036) PORTA=PORTA&0XF8;
F9 B38B IN R24,0x1B
FA 7F88 ANDI R24,0xF8
FB BB8B OUT 0x1B,R24
FC 90A9 LD R10,Y+
FD 9508 RET
_LCD_WRI_DATA:
ords --> Y,+1
DATA --> R10
FE 92AA ST R10,-Y
FF 2EA0 MOV R10,R16
(0037) }
(0038)
(0039)
(0040) /*-----------寫到lcd中顯示數據---------*/
(0041) ////////////////////////////////////////////////////////////////////////////////////
(0042) void LCD_WRI_DATA(unsigned char DATA)
(0043) {
(0044)
(0045) unsigned char ords;
(0046) WDR();
100 95A8 WDR
(0047)
(0048) /*
(0049) PORTD=PORTD&0X1F;
(0050) PORTD=PORTD|0X40;
(0051) DDRB=0X00;
(0052) ords=PINB;
(0053) while(ords&&0x80)
(0054) {ords=PINB;WDR();}
(0055) DDRB=0Xff;
(0056) */
(0057) //PORTD=PORTD&0X7F;//PD7置0
(0058) PORTA=PORTA&0XFB;
101 B38B IN R24,0x1B
102 7F8B ANDI R24,0xFB
103 BB8B OUT 0x1B,R24
(0059) LCD_WIRTE_DELAY(200);
104 EC08 LDI R16,0xC8
105 E010 LDI R17,0
106 DFD8 RCALL _LCD_WIRTE_DELAY
(0060) //PORTD=PORTD|0X20; //PD5置1
(0061) PORTA=PORTA|0X01;
107 9AD8 SBI 0x1B,0
(0062) PORTB=DATA;
108 BAA8 OUT 0x18,R10
(0063) //PORTD=PORTD|0X80;//PD7置1
(0064) PORTA=PORTA |0X04;
109 9ADA SBI 0x1B,2
(0065) LCD_WIRTE_DELAY(200);
10A EC08 LDI R16,0xC8
10B E010 LDI R17,0
10C DFD2 RCALL _LCD_WIRTE_DELAY
(0066) //PORTD=PORTD&0X1F;//PD7,6,5置0
(0067) PORTA=PORTA & 0XF8;
10D B38B IN R24,0x1B
10E 7F88 ANDI R24,0xF8
10F BB8B OUT 0x1B,R24
110 90A9 LD R10,Y+
111 9508 RET
(0068) }
(0069)
(0070)
(0071)
(0072)
(0073) /*-------------延時46us----------*/
(0074) void LCD_DELAY()
(0075) {
(0076) unsigned int time=500;
_LCD_DELAY:
time --> R16
112 EF04 LDI R16,0xF4
113 E011 LDI R17,1
(0077) WDR();
114 95A8 WDR
(0078) while(--time);
115 01C8 MOVW R24,R16
116 9701 SBIW R24,1
117 018C MOVW R16,R24
118 3000 CPI R16,0
119 0701 CPC R16,R17
11A F7D1 BNE 0x0115
(0079) WDR();
11B 95A8 WDR
11C 9508 RET
(0080) }
(0081)
(0082)
(0083) void LCD_CLEAR()
(0084) {
(0085) LCD_WRI_ORDER(0X01);
_LCD_CLEAR:
11D E001 LDI R16,1
11E DFC9 RCALL _LCD_WRI_ORDER
(0086) LCD_DELAY();
11F DFF2 RCALL _LCD_DELAY
120 9508 RET
(0087) }
(0088)
(0089)
(0090) //#define EN (DDRD|=BIT(PD7))
(0091) //#define RW (DDRD|=BIT(PD6))
(0092) //#define CR (DDRD|=BIT(PD5))
(0093) //////////////////////////////////////////////////////////////
(0094) #define EN (DDRA|=BIT(PA2))
(0095) #define RW (DDRA|=BIT(PA1))
(0096) #define CR (DDRA|=BIT(PA0))
(0097) /////////////////////////////////////////////////////////////
(0098)
(0099)
(0100) void LCD_WORD_INI(void)
(0101) {
(0102) WDR();
_LCD_WORD_INI:
121 95A8 WDR
(0103) EN;RW;CR;
122 9AD2 SBI 0x1A,2
123 9AD1 SBI 0x1A,1
124 9AD0 SBI 0x1A,0
(0104) LCD_WRI_ORDER(0X30); /*----------------清顯示--------------------*/
125 E300 LDI R16,0x30
126 DFC1 RCALL _LCD_WRI_ORDER
(0105) LCD_DELAY();
127 DFEA RCALL _LCD_DELAY
(0106) LCD_WRI_ORDER(0X30); /*----------------清顯示--------------------*/
128 E300 LDI R16,0x30
129 DFBE RCALL _LCD_WRI_ORDER
(0107) LCD_DELAY();
12A DFE7 RCALL _LCD_DELAY
(0108) LCD_DELAY();
12B DFE6 RCALL _LCD_DELAY
(0109) LCD_WRI_ORDER(0X0C); /*------------ 顯示右移光標右移 --------------*/
12C E00C LDI R16,0xC
12D DFBA RCALL _LCD_WRI_ORDER
(0110) LCD_DELAY();
12E DFE3 RCALL _LCD_DELAY
(0111) LCD_WRI_ORDER(0X01); /*------------ 顯示右移光標右移 --------------*/
12F E001 LDI R16,1
130 DFB7 RCALL _LCD_WRI_ORDER
(0112) Delay1ms(1);
131 E001 LDI R16,1
132 E010 LDI R17,0
133 940E 00B3 CALL _Delay1ms
(0113) LCD_WRI_ORDER(0X06); /*-------功能定為基本指令集動作8位------------*/
135 E006 LDI R16,6
136 DFB1 RCALL _LCD_WRI_ORDER
(0114) LCD_DELAY();
137 DFDA RCALL _LCD_DELAY
138 9508 RET
_LCD_ADD:
ADD --> R10
139 92AA ST R10,-Y
13A 2EA0 MOV R10,R16
(0115) }
(0116) /*
(0117) void LCD_PIC_INI()
(0118) {
(0119) WDR();
(0120) LCD_WORD_INI();
(0121) LCD_WRI_ORDER(0X32); /*-------功能設定為基本指令集8位顯示圖形-----------*/
(0122) /* LCD_DELAY();
(0123) LCD_WRI_ORDER(0X36); /*-------功能設定為擴充指令集8位顯示圖形-----------*/
(0124) // LCD_DELAY();
(0125) //}*/
(0126) void LCD_ADD(unsigned char ADD)//寫入地址
(0127) {
(0128) LCD_WRI_ORDER(ADD);
13B 2D0A MOV R16,R10
13C DFAB RCALL _LCD_WRI_ORDER
(0129) LCD_DELAY();
13D DFD4 RCALL _LCD_DELAY
13E 90A9 LD R10,Y+
13F 9508 RET
_DISPLAY_LCD:
Y --> R10
DISP --> R20
ADD --> R10
140 940E 024E CALL push_xgset300C
142 01A9 MOVW R20,R18
143 2EA0 MOV R10,R16
(0130) }
(0131)
(0132) void DISPLAY_LCD(unsigned char ADD,unsigned char *DISP)//顯示字符串
(0133) {
(0134) unsigned char Y;
(0135) WDR();
144 95A8 WDR
(0136) LCD_WRI_ORDER(ADD);
145 2D0A MOV R16,R10
146 DFA1 RCALL _LCD_WRI_ORDER
(0137) LCD_DELAY();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -