⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcm12832k.lst

📁 AVR单片机mega8上的lcm_12832液晶驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    001A E5CF      LDI	R28,0x5F
    001B E0D4      LDI	R29,4
    001C BFCD      OUT	0x3D,R28
    001D BFDE      OUT	0x3E,R29
    001E 51C0      SUBI	R28,0x10
    001F 40D0      SBCI	R29,0
    0020 EA0A      LDI	R16,0xAA
    0021 8308      STD	Y+0,R16
    0022 2400      CLR	R0
    0023 E6EE      LDI	R30,0x6E
    0024 E0F0      LDI	R31,0
    0025 E010      LDI	R17,0
    0026 36EE      CPI	R30,0x6E
    0027 07F1      CPC	R31,R17
    0028 F011      BEQ	0x002B
    0029 9201      ST	R0,Z+
    002A CFFB      RJMP	0x0026
    002B 8300      STD	Z+0,R16
    002C E2E6      LDI	R30,0x26
    002D E0F0      LDI	R31,0
    002E E6A0      LDI	R26,0x60
    002F E0B0      LDI	R27,0
    0030 E010      LDI	R17,0
    0031 33E4      CPI	R30,0x34
    0032 07F1      CPC	R31,R17
    0033 F021      BEQ	0x0038
    0034 95C8      LPM
    0035 9631      ADIW	R30,1
    0036 920D      ST	R0,X+
    0037 CFF9      RJMP	0x0031
    0038 D0E7      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
FILE: E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
(0001) /**********************************************************************
(0002) //ICC-AVR application builder : 2006-6-27 15:04:57
(0003) // Target : M8
(0004) // Crystal: 3.6864Mhz
(0005) //
(0006) 
(0007) ***********************************************************************/
(0008) 
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) 
(0012) #define uchar unsigned char
(0013) #define uint unsigned int
(0014) 
(0015) #define	setbit(x,y) (x|=(1<<y))      //set bit y in byte x
(0016) #define	clrbit(x,y) (x&=(~(1<<y)))   //clear bit y in byte x
(0017) 
(0018) uchar exampl[]="北京";
(0019) uchar exampl2[]="abcdefg!";
(0020) 
(0021) void ledon(void)
(0022) {
(0023)    DDRB = (1<<PB2);
_ledon:
    003A E084      LDI	R24,4
    003B BB87      OUT	0x17,R24
(0024)    PORTB = (0<<PB2);
    003C 2422      CLR	R2
    003D BA28      OUT	0x18,R2
(0025) }
    003E 9508      RET
(0026) 
(0027) void ledoff(void)
(0028) {
(0029)    DDRB = (1<<PB2);
_ledoff:
    003F E084      LDI	R24,4
    0040 BB87      OUT	0x17,R24
(0030)    PORTB = (1<<PB2);
    0041 BB88      OUT	0x18,R24
(0031) }
    0042 9508      RET
_delay:
  i                    --> R20
  n                    --> R16
    0043 D12D      RCALL	push_gset1
(0032) 
(0033) //延时
(0034) // Delay  n*(5ms)
(0035) void delay(uint n)           
(0036) {  
    0044 C009      RJMP	0x004E
(0037)      while(n--)
(0038)     {
(0039) 	    uint i = 5236;     //Delay 5ms
    0045 E744      LDI	R20,0x74
    0046 E154      LDI	R21,0x14
(0040) 	    while(i--);
    0047 011A      MOVW	R2,R20
    0048 5041      SUBI	R20,1
    0049 4050      SBCI	R21,0
    004A 2022      TST	R2
    004B F7D9      BNE	0x0047
    004C 2033      TST	R3
    004D F7C9      BNE	0x0047
    004E 0118      MOVW	R2,R16
    004F 5001      SUBI	R16,1
    0050 4010      SBCI	R17,0
    0051 2022      TST	R2
    0052 F791      BNE	0x0045
    0053 2033      TST	R3
    0054 F781      BNE	0x0045
(0041) 	};	
(0042) }
    0055 D11E      RCALL	pop_gset1
    0056 9508      RET
_delayms:
  j                    --> R20
  i                    --> R16
    0057 D119      RCALL	push_gset1
(0043) 
(0044) 
(0045) void delayms(uint i)
(0046) {
    0058 C006      RJMP	0x005F
(0047) 	while(i--)
(0048) 	{
(0049) 		uchar j = 125;//125;//250;
    0059 E74D      LDI	R20,0x7D
(0050) 		while(j--);
    005A 2E24      MOV	R2,R20
    005B 2433      CLR	R3
    005C 5041      SUBI	R20,1
    005D 2022      TST	R2
    005E F7D9      BNE	0x005A
    005F 0118      MOVW	R2,R16
    0060 5001      SUBI	R16,1
    0061 4010      SBCI	R17,0
    0062 2022      TST	R2
    0063 F7A9      BNE	0x0059
    0064 2033      TST	R3
    0065 F799      BNE	0x0059
(0051) 	}
(0052) }
    0066 D10D      RCALL	pop_gset1
    0067 9508      RET
(0053) 
(0054) void delayus(uchar i)
(0055) {	
(0056) 	while(i--);
_delayus:
  i                    --> R16
    0068 2E20      MOV	R2,R16
    0069 2433      CLR	R3
    006A 5001      SUBI	R16,1
    006B 2022      TST	R2
    006C F7D9      BNE	0x0068
(0057) }
    006D 9508      RET
(0058) 
(0059) 
(0060) void wait(void)
(0061) {
(0062) 	DDRB = ((1<<PB0)|(1<<PB1));
_wait:
    006E E083      LDI	R24,3
    006F BB87      OUT	0x17,R24
(0063) 	DDRC = 1<<PC1;
    0070 E082      LDI	R24,2
    0071 BB84      OUT	0x14,R24
(0064) 	DDRD = 0;
    0072 2422      CLR	R2
    0073 BA21      OUT	0x11,R2
(0065) 	//PORTD = 0xff;
(0066) 	PORTB = ((1<<PB0)|(0<<PB1));			//RW = 1 WRITE	RS =0 INSTRUCTION	
    0074 E081      LDI	R24,1
    0075 BB88      OUT	0x18,R24
(0067) 	PORTC = (1<<PC1);			//E = 1
    0076 E082      LDI	R24,2
    0077 BB85      OUT	0x15,R24
(0068) 	DDRD = 0;
    0078 BA21      OUT	0x11,R2
(0069) 	while(PIND&0x80);
    0079 9987      SBIC	0x10,7
    007A CFFE      RJMP	0x0079
(0070) 	PORTB = ((0<<PB0)|(0<<PB1));			//RW = 0 WRITE	RS =0 INSTRUCTION
    007B 2422      CLR	R2
    007C BA28      OUT	0x18,R2
(0071) }
    007D 9508      RET
_send_i:
  i                    --> R20
    007E D0F2      RCALL	push_gset1
    007F 2F40      MOV	R20,R16
(0072) 
(0073) void send_i(uchar i)
(0074) {	
(0075) 	DDRB = ((1<<PB0)|(1<<PB1));
    0080 E083      LDI	R24,3
    0081 BB87      OUT	0x17,R24
(0076) 	DDRC = 1<<PC1;
    0082 E082      LDI	R24,2
    0083 BB84      OUT	0x14,R24
(0077) 	
(0078) 	wait();
    0084 DFE9      RCALL	_wait
(0079)     PORTB = ((0<<PB0)|(0<<PB1));			//RW = 0 WRITE	RS =0 INSTRUCTION
    0085 2422      CLR	R2
    0086 BA28      OUT	0x18,R2
(0080)     DDRD = 0xff;
    0087 EF8F      LDI	R24,0xFF
    0088 BB81      OUT	0x11,R24
(0081) 	PORTD = i;
    0089 BB42      OUT	0x12,R20
(0082) 	//setbit(PORTC,PC1);
(0083) 	//NOP();
(0084) 	//clrbit(PORTC,PC1);
(0085) 	PORTC = (1<<PC1);			//E = 1
    008A E082      LDI	R24,2
    008B BB85      OUT	0x15,R24
(0086) 	NOP();
    008C 0000      NOP
(0087) 	PORTC = (0<<PC1);			//E = 0	
    008D BA25      OUT	0x15,R2
(0088) }
    008E D0E5      RCALL	pop_gset1
    008F 9508      RET
_send_d:
  d                    --> R20
    0090 D0E0      RCALL	push_gset1
    0091 2F40      MOV	R20,R16
(0089) 
(0090) void send_d(uchar d)
(0091) {
(0092)  	DDRB = ((1<<PB0)|(1<<PB1));
    0092 E083      LDI	R24,3
    0093 BB87      OUT	0x17,R24
(0093) 	DDRC = 1<<PC1;
    0094 E082      LDI	R24,2
    0095 BB84      OUT	0x14,R24
(0094) 	
(0095) 	wait();
    0096 DFD7      RCALL	_wait
(0096)     PORTB = ((0<<PB0)|(1<<PB1));			//RW = 0 WRITE	RS =1 DATA
    0097 E082      LDI	R24,2
    0098 BB88      OUT	0x18,R24
(0097)     DDRD = 0xff;
    0099 EF8F      LDI	R24,0xFF
    009A BB81      OUT	0x11,R24
(0098) 	PORTD = d;
    009B BB42      OUT	0x12,R20
(0099) 	PORTC = (1<<PC1);			//E = 1
    009C E082      LDI	R24,2
    009D BB85      OUT	0x15,R24
(0100) 	NOP();
    009E 0000      NOP
(0101) 	PORTC = (0<<PC1);			//E = 0	
    009F 2422      CLR	R2
    00A0 BA25      OUT	0x15,R2
(0102) 	//setbit(PORTC,PC1);
(0103) 	//NOP();
(0104) 	//clrbit(PORTC,PC1);
(0105) }
    00A1 D0D2      RCALL	pop_gset1
    00A2 9508      RET
_lw:
  d                    --> Y+4
  y                    --> R22
  x                    --> R20
    00A3 D0E4      RCALL	push_gset2
    00A4 2F62      MOV	R22,R18
    00A5 2F40      MOV	R20,R16
(0106) 
(0107) void lw(uchar x,uchar y,uchar d)
(0108) {
(0109) 	send_i(0xB8|y);
    00A6 2F06      MOV	R16,R22
    00A7 6B08      ORI	R16,0xB8
    00A8 DFD5      RCALL	_send_i
(0110) 	send_i(0x40|x);
    00A9 2F04      MOV	R16,R20
    00AA 6400      ORI	R16,0x40
    00AB DFD2      RCALL	_send_i
(0111) 	send_d(d);
    00AC 810C      LDD	R16,Y+4
    00AD DFE2      RCALL	_send_d
(0112) 	//PORTD = 0xff;
(0113) }
    00AE D0BE      RCALL	pop_gset2
    00AF 9508      RET
(0114) 
(0115) void lcd_init(void)
(0116) {
(0117)  	uchar x,y;
(0118) 	delay(100);		//>40ms  800
_lcd_init:
  y                    --> Y+1
  x                    --> Y+1
    00B0 E604      LDI	R16,0x64
    00B1 E010      LDI	R17,0
    00B2 DF90      RCALL	_delay
(0119) 	
(0120) 	send_i(0x30);		//select basic instruction
    00B3 E300      LDI	R16,0x30
    00B4 DFC9      RCALL	_send_i
(0121) 	delay(10);		//>100us
    00B5 E00A      LDI	R16,0xA
    00B6 E010      LDI	R17,0
    00B7 DF8B      RCALL	_delay
(0122) 	send_i(0x30);		//set basic mode
    00B8 E300      LDI	R16,0x30
    00B9 DFC4      RCALL	_send_i
(0123) 	delay(10);		//>37us
    00BA E00A      LDI	R16,0xA
    00BB E010      LDI	R17,0
    00BC DF86      RCALL	_delay
(0124) 	send_i(0x0c);		//turn on lcd  0c
    00BD E00C      LDI	R16,0xC
    00BE DFBF      RCALL	_send_i
(0125) 	delay(10);		//>100us
    00BF E00A      LDI	R16,0xA
    00C0 E010      LDI	R17,0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -