📄 80_8bit.lst
字号:
__start:
__text_start:
248A E5CF LDI R28,0x5F
248B E0D8 LDI R29,0x8
248C BFCD OUT 0x3D,R28
248D BFDE OUT 0x3E,R29
248E 52C0 SUBI R28,0x20
248F 40D0 SBCI R29,0
2490 EA0A LDI R16,0xAA
2491 8308 STD Y+0,R16
2492 2400 CLR R0
2493 E6E0 LDI R30,0x60
2494 E0F0 LDI R31,0
2495 E010 LDI R17,0
2496 36E0 CPI R30,0x60
2497 07F1 CPC R31,R17
2498 F011 BEQ 0x249B
2499 9201 ST R0,Z+
249A CFFB RJMP 0x2496
249B 8300 STD Z+0,R16
249C E1E4 LDI R30,0x14
249D E4F9 LDI R31,0x49
249E E6A0 LDI R26,0x60
249F E0B0 LDI R27,0
24A0 E419 LDI R17,0x49
24A1 31E4 CPI R30,0x14
24A2 07F1 CPC R31,R17
24A3 F021 BEQ 0x24A8
24A4 95C8 LPM
24A5 9631 ADIW R30,1
24A6 920D ST R0,X+
24A7 CFF9 RJMP 0x24A1
24A8 940E25DF CALL _main
_exit:
24AA CFFF RJMP _exit
FILE: D:\taobao\src\n8bit.c
(0001) //ICC-AVR application builder : 2008-11-2 11:21:49
(0002) // Target : M32
(0003) // Crystal: 8.0000Mhz
(0004) /******************************************************************************
(0005) Copyright 2008 海景电子
(0006) All rights reserved.
(0007)
(0008) 1.6寸彩屏AVR DEMO
(0009)
(0010) 版本:1.0.0
(0011) Auther:康锦海
(0012) 完成日期:2008.12.14
(0013) 主频:8.000M
(0014) 液晶型号: 128X128 26万色 驱动芯片:三星S6D0117
(0015) 淘宝长期供货:http://shop36350482.taobao.com/
(0016)
(0017) 技术支持:
(0018) 康锦海 手机: 13316518267(接听免费)
(0019) QQ: 546829846
(0020) email:luckroll@yahoo.com.cn
(0021)
(0022) ******************************************************************************/
(0023) #include <iom32v.h>
(0024) #include <macros.h>
(0025)
(0026) //Signal bit definitions
(0027)
(0028)
(0029)
(0030)
(0031) #define lcd_data PORTD
(0032) #define lcd_cs 0
(0033) #define lcd_rst 1
(0034) #define lcd_rs 2
(0035) #define lcd_rd 3
(0036) #define lcd_led 4
(0037) #define lcd_wr 5
(0038) #define SetLcdRS PORTA|=(1<<lcd_rs);
(0039) #define ClrLcdRS PORTA&=~(1<<lcd_rs);
(0040) #define SetLcdWR PORTA |=(1<<lcd_wr);
(0041) #define ClrLcdWR PORTA &=~(1<<lcd_wr);
(0042) #define Setled PORTA|=(1<<lcd_led);
(0043) #define Clrled PORTA&=~(1<<lcd_led);
(0044) #define SetLcdRST PORTA|=(1<<lcd_rst);
(0045) #define ClrLcdRST PORTA&=~(1<<lcd_rst);
(0046) #define SetLcdCS PORTA|=(1<<lcd_cs);
(0047) #define ClrLcdCS PORTA&=~(1<<lcd_cs);
(0048) const unsigned char AVR_LOGO[18624];
(0049) void port_init(void)
(0050) {
(0051) PORTA = 0x2F;
_port_init:
24AB E28F LDI R24,0x2F
24AC BB8B OUT 0x1B,R24
(0052) DDRA = 0xFF;
24AD EF8F LDI R24,0xFF
24AE BB8A OUT 0x1A,R24
(0053) PORTB = 0x00;
24AF 2422 CLR R2
24B0 BA28 OUT 0x18,R2
(0054) DDRB = 0x00;
24B1 BA27 OUT 0x17,R2
(0055) PORTC = 0x00;
24B2 BA25 OUT 0x15,R2
(0056) DDRC = 0x00;
24B3 BA24 OUT 0x14,R2
(0057) PORTD = 0xff;
24B4 BB82 OUT 0x12,R24
(0058) DDRD = 0xff;
24B5 BB81 OUT 0x11,R24
24B6 9508 RET
(0059) }
(0060)
(0061) //call this routine to initialize all peripherals
(0062) void init_devices(void)
(0063) {
(0064) CLI(); //disable all interrupts
_init_devices:
24B7 94F8 BCLR 7
(0065) port_init();
24B8 DFF2 RCALL _port_init
(0066)
(0067) MCUCR = 0x00;
24B9 2422 CLR R2
24BA BE25 OUT 0x35,R2
(0068) GICR = 0x00;
24BB BE2B OUT 0x3B,R2
(0069) TIMSK = 0x00; //timer interrupt sources
24BC BE29 OUT 0x39,R2
(0070) SEI(); //re-enable interrupts
24BD 9478 BSET 7
24BE 9508 RET
(0071) //all peripherals are now initialized
(0072) }
(0073) void Delay_1us(void)//1us延时函数
(0074) {
(0075) asm("nop");
_Delay_1us:
24BF 0000 NOP
24C0 9508 RET
_Delay_nus:
i --> R20
n --> R22
24C1 940E2637 CALL push_gset2
24C3 01B8 MOVW R22,R16
(0076) }
(0077) void Delay_nus(unsigned int n)//N us延时函数
(0078) {
(0079) unsigned int i=0;
24C4 2744 CLR R20
24C5 2755 CLR R21
(0080) for (i=0;i<n;i++)
24C6 C003 RJMP 0x24CA
(0081) Delay_1us();
24C7 DFF7 RCALL _Delay_1us
24C8 5F4F SUBI R20,0xFF
24C9 4F5F SBCI R21,0xFF
24CA 1746 CP R20,R22
24CB 0757 CPC R21,R23
24CC F3D0 BCS 0x24C7
24CD 940E262E CALL pop_gset2
24CF 9508 RET
(0082) }
(0083) void Delay_1ms(void)//1ms延时函数
(0084) {
(0085) unsigned int i;
(0086) for (i=0;i<1140;i++);
_Delay_1ms:
i --> R16
24D0 2700 CLR R16
24D1 2711 CLR R17
24D2 C002 RJMP 0x24D5
24D3 5F0F SUBI R16,0xFF
24D4 4F1F SBCI R17,0xFF
24D5 3704 CPI R16,0x74
24D6 E0E4 LDI R30,4
24D7 071E CPC R17,R30
24D8 F3D0 BCS 0x24D3
24D9 9508 RET
_Delay_nms:
i --> R20
n --> R22
24DA 940E2637 CALL push_gset2
24DC 01B8 MOVW R22,R16
(0087) }
(0088) void Delay_nms(unsigned int n)//N ms延时函数
(0089) {
(0090) unsigned int i=0;
24DD 2744 CLR R20
24DE 2755 CLR R21
(0091) for (i=0;i<n;i++)
24DF C003 RJMP 0x24E3
(0092) Delay_1ms();
24E0 DFEF RCALL _Delay_1ms
24E1 5F4F SUBI R20,0xFF
24E2 4F5F SBCI R21,0xFF
24E3 1746 CP R20,R22
24E4 0757 CPC R21,R23
24E5 F3D0 BCS 0x24E0
24E6 940E262E CALL pop_gset2
24E8 9508 RET
(0093) }
(0094)
(0095) void write_data(unsigned char data)
(0096) {
(0097)
(0098)
(0099) SetLcdRS;
_write_data:
data --> R16
24E9 9ADA SBI 0x1B,2
(0100) ClrLcdCS;
24EA 98D8 CBI 0x1B,0
(0101)
(0102) lcd_data=data;
24EB BB02 OUT 0x12,R16
(0103) ClrLcdWR;
24EC 98DD CBI 0x1B,5
(0104) // asm("nop");
(0105) SetLcdWR;
24ED 9ADD SBI 0x1B,5
(0106)
(0107)
(0108)
(0109)
(0110) SetLcdCS;
24EE 9AD8 SBI 0x1B,0
24EF 9508 RET
(0111)
(0112) }
(0113) void write_data16(unsigned char dataH,unsigned char dataL)
(0114) {
(0115)
(0116)
(0117) SetLcdRS;
_write_data16:
dataL --> R18
dataH --> R16
24F0 9ADA SBI 0x1B,2
(0118) ClrLcdCS;
24F1 98D8 CBI 0x1B,0
(0119) lcd_data=dataH;
24F2 BB02 OUT 0x12,R16
(0120) ClrLcdWR;
24F3 98DD CBI 0x1B,5
(0121) // asm("nop");
(0122) SetLcdWR;
24F4 9ADD SBI 0x1B,5
(0123) lcd_data=dataL;
24F5 BB22 OUT 0x12,R18
(0124) ClrLcdWR;
24F6 98DD CBI 0x1B,5
(0125) // asm("nop");
(0126) SetLcdWR;
24F7 9ADD SBI 0x1B,5
(0127)
(0128) SetLcdCS;
24F8 9AD8 SBI 0x1B,0
24F9 9508 RET
(0129) }
(0130) void write_cmd(unsigned char data)
(0131) {
(0132) ClrLcdRS;
_write_cmd:
data --> R16
24FA 98DA CBI 0x1B,2
(0133) ClrLcdCS;
24FB 98D8 CBI 0x1B,0
(0134)
(0135) lcd_data=0;
24FC 2422 CLR R2
24FD BA22 OUT 0x12,R2
(0136) ClrLcdWR;
24FE 98DD CBI 0x1B,5
(0137) // asm("nop");
(0138) SetLcdWR;
24FF 9ADD SBI 0x1B,5
(0139)
(0140) lcd_data=data;
2500 BB02 OUT 0x12,R16
(0141) ClrLcdWR;
2501 98DD CBI 0x1B,5
(0142) // asm("nop");
(0143) SetLcdWR;
2502 9ADD SBI 0x1B,5
(0144)
(0145) SetLcdCS;
2503 9AD8 SBI 0x1B,0
2504 9508 RET
_LCD_WR_REG:
dataL --> R20
dataH --> R22
data16 --> R18
reg --> R16
2505 940E2637 CALL push_gset2
(0146)
(0147) }
(0148) void LCD_WR_REG(unsigned char reg,unsigned int data16)
(0149) {
(0150) unsigned char dataH,dataL;
(0151) dataH=data16/256;
2507 01B9 MOVW R22,R18
2508 2F67 MOV R22,R23
2509 2777 CLR R23
(0152) dataL=data16&0xff;
250A 2F42 MOV R20,R18
250B 7050 ANDI R21,0
(0153) ClrLcdRS;
250C 98DA CBI 0x1B,2
(0154) ClrLcdCS;
250D 98D8 CBI 0x1B,0
(0155)
(0156)
(0157) lcd_data=0;
250E 2422 CLR R2
250F BA22 OUT 0x12,R2
(0158) ClrLcdWR;
2510 98DD CBI 0x1B,5
(0159) //asm("nop");
(0160) SetLcdWR;
2511 9ADD SBI 0x1B,5
(0161)
(0162) lcd_data=reg;
2512 BB02 OUT 0x12,R16
(0163) ClrLcdWR;
2513 98DD CBI 0x1B,5
(0164) // asm("nop");
(0165) SetLcdWR;
2514 9ADD SBI 0x1B,5
(0166) SetLcdRS;
2515 9ADA SBI 0x1B,2
(0167) lcd_data=dataH;
2516 BB62 OUT 0x12,R22
(0168) ClrLcdWR;
2517 98DD CBI 0x1B,5
(0169) // asm("nop");
(0170) SetLcdWR;
2518 9ADD SBI 0x1B,5
(0171) lcd_data=dataL;
2519 BB42 OUT 0x12,R20
(0172) ClrLcdWR;
251A 98DD CBI 0x1B,5
(0173) // asm("nop");
(0174) SetLcdWR;
251B 9ADD SBI 0x1B,5
(0175)
(0176)
(0177)
(0178) SetLcdCS;
251C 9AD8 SBI 0x1B,0
251D 940E262E CALL pop_gset2
251F 9508 RET
(0179)
(0180) }
(0181)
(0182)
(0183) void LCD_Init()
(0184) {
(0185)
(0186) LCD_WR_REG(0x00,0x0001);
_LCD_Init:
2520 E021 LDI R18,1
2521 E030 LDI R19,0
2522 2700 CLR R16
2523 DFE1 RCALL _LCD_WR_REG
(0187) LCD_WR_REG(0x12,0x0109);
2524 E029 LDI R18,0x9
2525 E031 LDI R19,1
2526 E102 LDI R16,0x12
2527 DFDD RCALL _LCD_WR_REG
(0188) LCD_WR_REG(0x13,0x0e1d);
2528 E12D LDI R18,0x1D
2529 E03E LDI R19,0xE
252A E103 LDI R16,0x13
252B DFD9 RCALL _LCD_WR_REG
(0189) LCD_WR_REG(0x14,0x6224);
252C E224 LDI R18,0x24
252D E632 LDI R19,0x62
252E E104 LDI R16,0x14
252F DFD5 RCALL _LCD_WR_REG
(0190) LCD_WR_REG(0x10,0x2004);
2530 E024 LDI R18,4
2531 E230 LDI R19,0x20
2532 E100 LDI R16,0x10
2533 DFD1 RCALL _LCD_WR_REG
(0191) Delay_nms(50);
2534 E302 LDI R16,0x32
2535 E010 LDI R17,0
2536 DFA3 RCALL _Delay_nms
(0192) LCD_WR_REG(0x13,0x0e5d);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -