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

📄 lcd-m8.lst

📁 AVR ICC基于AVR MEGA8单片机的LCD程序!
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    00E6 EFCF      LDI	R28,0xFF
    00E7 E0D2      LDI	R29,2
    00E8 BFCD      OUT	0x3D,R28
    00E9 BFDE      OUT	0x3E,R29
    00EA 51C0      SUBI	R28,0x10
    00EB 40D0      SBCI	R29,0
    00EC EA0A      LDI	R16,0xAA
    00ED 8308      STD	Y+0,R16
    00EE 2400      CLR	R0
    00EF E1E6      LDI	R30,0x16
    00F0 E0F1      LDI	R31,1
    00F1 E011      LDI	R17,1
    00F2 31E8      CPI	R30,0x18
    00F3 07F1      CPC	R31,R17
    00F4 F011      BEQ	0x00F7
    00F5 9201      ST	R0,Z+
    00F6 CFFB      RJMP	0x00F2
    00F7 8300      STD	Z+0,R16
    00F8 EBE6      LDI	R30,0xB6
    00F9 E0F1      LDI	R31,1
    00FA E0A0      LDI	R26,0
    00FB E0B1      LDI	R27,1
    00FC E011      LDI	R17,1
    00FD 3CEC      CPI	R30,0xCC
    00FE 07F1      CPC	R31,R17
    00FF F021      BEQ	0x0104
    0100 95C8      LPM
    0101 9631      ADIW	R30,1
    0102 920D      ST	R0,X+
    0103 CFF9      RJMP	0x00FD
    0104 D388      RCALL	_main
_exit:
    0105 CFFF      RJMP	_exit
FILE: D:\ele\AVR\ICC\LCD\lcd-M8\head.h
(0001) #define uchar unsigned char
(0002) #define unit unsigned int
(0003) #define ulong unsigned long
(0004) #define xtal 24 
(0005) 
(0006) #define fosc 18432000 //晶振8MHZ
(0007) #define baud 9600	 //波特率
(0008) 
(0009) uchar flash A_Z[]={
(0010) 	0xF8,0x24,0x22,0x24,0xF8,	//A
(0011) 	0x82,0xFE,0x92,0x92,0x6C,	//B
(0012) 	0x7C,0x82,0x82,0x82,0x44,	//C
(0013) 	0x82,0xFE,0x82,0x82,0x7C,	//D
(0014) 	0x82,0xFE,0x92,0x92,0xC6,	//E
(0015) 	0x82,0xFE,0x92,0x3A,0x06,	//F
(0016) 	0x38,0x44,0x82,0xA2,0x66,	//G
(0017) 	0xFE,0x10,0x10,0xFE,0x00,	//H
(0018) 	0x82,0xFE,0x82,0x00,0x00,	//I
(0019) 	0x40,0x82,0x82,0x7E,0x02,	//J
(0020) 	0xFE,0x10,0x2C,0xC2,0x00,	//K
(0021) 	0xFE,0x80,0x80,0x80,0x00,	//L
(0022) 	0xFE,0x0E,0xF0,0x0E,0xFE,	//M
(0023) 	0xFE,0x18,0x60,0xFE,0x00,	//N
(0024) 	0x7C,0x82,0x82,0x82,0x7C,	//O
(0025) 	0x82,0xFE,0x92,0x12,0x0C,	//P
(0026) 	0x7C,0xA2,0xA2,0xC2,0x7C,	//Q
(0027) 	0xFE,0x12,0x72,0x92,0x8C,	//R
(0028) 	0xCC,0x92,0x92,0x92,0x66,	//S
(0029) 	0x06,0x82,0xFE,0x82,0x06,	//T
(0030) 	0x7E,0x80,0x80,0x7E,0x00,	//U
(0031) 	0x0E,0x70,0xC0,0x70,0x0E,	//V
(0032) 	0x0E,0xF0,0x1E,0xF0,0x0E,	//W
(0033) 	0x82,0xCE,0x30,0xCE,0x82,	//X
(0034) 	0x02,0x8E,0xF0,0x8E,0x02,	//Y
(0035) 	0x82,0xE2,0x92,0x8E,0x82	//Z
(0036) };
(0037) 
(0038) 
(0039) 
(0040) 
(0041) uchar flash  a_z[]={
(0042) 	0x40,0xA8,0xA8,0xF0,0x00,	//a
(0043) 	0xFE,0x90,0x90,0x60,0x00,	//b
(0044) 	0x70,0x88,0x88,0x88,0x00,	//c
(0045) 	0x60,0x90,0x90,0xFE,0x00,	//d
(0046) 	0x70,0xA8,0xA8,0x30,0x00,	//e
(0047) 	0x90,0xFC,0x92,0x12,0x00,	//f
(0048) 	0x74,0xAA,0xAA,0xA6,0x42,	//g
(0049) 	0xFE,0x10,0x10,0xE0,0x00,	//h
(0050) 	0x10,0x7A,0x80,0x40,0x00,	//i
(0051) 	0x40,0x88,0x7A,0x00,0x00,	//j
(0052) 	0xFE,0x20,0xF0,0x88,0x00,	//k
(0053) 	0xFE,0x80,0x40,0x00,0x00,	//l
(0054) 	0xF8,0x08,0xF8,0x08,0xF0,	//m
(0055) 	0x08,0xF0,0x08,0x08,0xF0,	//n
(0056) 	0x70,0x88,0x88,0x70,0x00,	//o
(0057) 	0xFC,0x24,0x24,0x18,0x00,	//p
(0058) 	0x18,0x24,0x24,0xFC,0x00,	//q
(0059) 	0x88,0xF8,0x90,0x08,0x08,	//r
(0060) 	0x98,0xA8,0xA8,0xC8,0x00,	//s
(0061) 	0x08,0x7E,0x88,0x40,0x00,	//t
(0062) 	0x78,0x80,0x80,0x78,0x80,	//u
(0063) 	0x08,0x38,0xC0,0x38,0x08,	//v
(0064) 	0x18,0xE0,0x38,0xE0,0x18,	//w
(0065) 	0x88,0xD8,0x20,0xD8,0x88,	//x
(0066) 	0x9C,0xA0,0x7C,0x00,0x00,	//y
(0067) 	0xC8,0xA8,0x98,0x88,0x00	//z
(0068) };
(0069) 
(0070) uchar flash num0_9[]={
(0071) 	0x3e,0x51,0x49,0x45,0x3e,	//0
(0072) 	0x42,0x7f,0x40,0x00,0x00,	//1
(0073) 	0x42,0x61,0x51,0x49,0x46,	//2
(0074) 	0x21,0x41,0x45,0x4b,0x31,	//3
(0075) 	0x18,0x14,0x12,0x7f,0x10,	//4
(0076) 	0x27,0x45,0x45,0x45,0x39,	//5
(0077) 	0x3c,0x4a,0x49,0x49,0x30,	//6
(0078) 	0x01,0x01,0x79,0x05,0x03,	//7
(0079) 	0x36,0x49,0x49,0x49,0x36,	//8
(0080) 	0x06,0x49,0x49,0x29,0x1e,	//9
(0081) 	0x00,0x00,0x00,0x00,0x00,	//空格
(0082) };
(0083) 
(0084) 
(0085) 
(0086) //空格
(0087) uchar flash space[]={0x00,0x00,0x00,0x00,0x00};
(0088) //:  /
(0089) uchar flash x_xg[]={0x00,0xE0,0x3C,0x06,0x00};
(0090) //下画线
(0091) uchar flash x_ds[]={0x80,0x80,0x80,0x00,0x00};
(0092) //冒号
(0093) uchar flash x_mh[]={0x00,0xc6,0xc6,0x00,0x00};
(0094) //小数点
(0095) uchar flash x_p[]={0x00,0xc0,0x00,0x00,0x00};
(0096) //下箭头
(0097) uchar flash x_xia[]={0x06,0x1E,0x7E,0x1E,0x06};
(0098) //上箭头
(0099) uchar flash x_shang[]={0x60,0x78,0x7E,0x78,0x60};
(0100) 
(0101) uchar flash x_up[]   ={0x00,0x02,0x06,0x0E,0x1E,0x3E,0x7E,0x3E,0x1E,0x0E,0x06,0x02,0x00};
(0102) uchar flash x_down[]={0x00,0x40,0x60,0x70,0x78,0x7C,0x7E,0x7C,0x78,0x70,0x60,0x40,0x00};
(0103) 
(0104) 
(0105) /*		微秒级延时程序	*/	
(0106) void del(int time)
(0107) 	 {     
(0108)   	  do
(0109) 	  	{
(0110) 		 time--;
_del:
  time                 --> R16
    0106 5001      SUBI	R16,1
    0107 4010      SBCI	R17,0
(0111) 		}	
(0112)   	  while (time>1);
    0108 E081      LDI	R24,1
    0109 E090      LDI	R25,0
    010A 1780      CP	R24,R16
    010B 0791      CPC	R25,R17
    010C F3CC      BLT	0x0106
    010D 9508      RET
(0113) 	 }
(0114) 	 
(0115) /*	   毫秒级延时程序   	*/	 
(0116) void delay_1ms(void)
(0117) { unsigned int i1;
(0118)  for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
_delay_1ms:
  i1                   --> R16
    010E E001      LDI	R16,1
    010F E010      LDI	R17,0
    0110 C002      RJMP	0x0113
    0111 5F0F      SUBI	R16,0xFF
    0112 4F1F      SBCI	R17,0xFF
    0113 3606      CPI	R16,0x66
    0114 E0ED      LDI	R30,0xD
    0115 071E      CPC	R17,R30
    0116 F3D0      BCS	0x0111
    0117 9508      RET
_delay:
  i2                   --> R20
  n                    --> R22
    0118 D3E5      RCALL	push_gset2
    0119 01B8      MOVW	R22,R16
(0119) ;
(0120) }
(0121) 
(0122) void delay(unsigned int n)
(0123) {
(0124)  unsigned int i2=0;
    011A 2744      CLR	R20
    011B 2755      CLR	R21
    011C C004      RJMP	0x0121
(0125)    while(i2<n)
(0126)    {delay_1ms();
    011D DFF0      RCALL	_delay_1ms
(0127)     i2++; WDR();
    011E 5F4F      SUBI	R20,0xFF
    011F 4F5F      SBCI	R21,0xFF
    0120 95A8      WDR
    0121 1746      CP	R20,R22
    0122 0757      CPC	R21,R23
    0123 F3C8      BCS	0x011D
    0124 D3CB      RCALL	pop_gset2
    0125 9508      RET
_writelcd:
  dat                  --> R20
    0126 D3D9      RCALL	push_gset1
    0127 2F40      MOV	R20,R16
FILE: D:\ele\AVR\ICC\LCD\lcd-M8\lcd.h
(0001) 
(0002) #define uchar unsigned char
(0003) #define unit unsigned int
(0004) #define ulong unsigned long
(0005) 
(0006) #define IN_DBUS()  {DDRB=0x00;PORTB=0xff;}
(0007) #define OUT_DBUS() DDRB=0xff
(0008) #define LCDDAT   PORTB
(0009) #define LCDDATIN PINB
(0010) #define DI1  PORTD|=0x04
(0011) #define DI0  PORTD&=~0x04
(0012) #define RW1  PORTD|=0x08
(0013) #define RW0  PORTD&=~0x08
(0014) #define E1   PORTD|=0x10
(0015) #define E0   PORTD&=~0x10
(0016) #define CS1_1 PORTD|=0x20
(0017) #define CS1_0 PORTD&=~0x20
(0018) #define CS2_1 PORTD|=0x40
(0019) #define CS2_0 PORTD&=~0x40
(0020) #define REST1 PORTD|=0x80
(0021) #define REST0 PORTD&=~0x80
(0022) 
(0023) 
(0024) 
(0025) uchar LCD_X,LCD_Y;
(0026) 
(0027) 
(0028) 
(0029) uchar LCD_X,LCD_Y;
(0030) 
(0031) 
(0032) 
(0033) /*************LCD***************/
(0034) 
(0035) 
(0036) void writelcd(uchar dat)
(0037) {
(0038) E0;         del(1);
    0128 985C      CBI	0x0B,4
    0129 E001      LDI	R16,1
    012A E010      LDI	R17,0
    012B DFDA      RCALL	_del
(0039) RW0;        del(1);
    012C 985B      CBI	0x0B,3
    012D E001      LDI	R16,1
    012E E010      LDI	R17,0
    012F DFD6      RCALL	_del
(0040) E1;         del(1);
    0130 9A5C      SBI	0x0B,4
    0131 E001      LDI	R16,1
    0132 E010      LDI	R17,0
    0133 DFD2      RCALL	_del
(0041) OUT_DBUS(); del(3);
    0134 EF8F      LDI	R24,0xFF
    0135 B984      OUT	0x04,R24
    0136 E003      LDI	R16,3
    0137 E010      LDI	R17,0
    0138 DFCD      RCALL	_del
(0042) LCDDAT=dat; del(3);//PORTD&=~0xc0; PORTD|=(0xc0&dat); 
    0139 B945      OUT	0x05,R20
    013A E003      LDI	R16,3
    013B E010      LDI	R17,0
    013C DFC9      RCALL	_del
(0043) E0;         del(3);
    013D 985C      CBI	0x0B,4
    013E E003      LDI	R16,3
    013F E010      LDI	R17,0
    0140 DFC5      RCALL	_del
(0044) RW1;  E1;
    0141 9A5B      SBI	0x0B,3
    0142 9A5C      SBI	0x0B,4
(0045) WDR();
    0143 95A8      WDR
    0144 D3BE      RCALL	pop_gset1
    0145 9508      RET
_writelcdcon:
  dat                  --> R20
    0146 D3B9      RCALL	push_gset1
    0147 2F40      MOV	R20,R16
(0046) }
(0047) 
(0048) void writelcdcon(uchar dat)
(0049) {
(0050) DI0;
    0148 985A      CBI	0x0B,2
(0051) CS1_1;CS2_1;
    0149 9A5D      SBI	0x0B,5
    014A 9A5E      SBI	0x0B,6
(0052) writelcd(dat);
    014B 2F04      MOV	R16,R20
    014C DFD9      RCALL	_writelcd
    014D D3B5      RCALL	pop_gset1
    014E 9508      RET
_writelcddat:
  dat                  --> R20
    014F D3B0      RCALL	push_gset1
    0150 2F40      MOV	R20,R16
(0053) }
(0054) 
(0055) void writelcddat(uchar dat)
(0056) {
(0057) DI1;
    0151 9A5A      SBI	0x0B,2
(0058) writelcd(dat);
    0152 2F04      MOV	R16,R20
    0153 DFD2      RCALL	_writelcd
    0154 D3AE      RCALL	pop_gset1
    0155 9508      RET
(0059) }
(0060) 
(0061) void restlcd(void)
(0062) {
(0063) REST1;
_restlcd:
    0156 9A5F      SBI	0x0B,7
(0064) delay(1);
    0157 E001      LDI	R16,1
    0158 E010      LDI	R17,0
    0159 DFBE      RCALL	_delay
(0065) REST0;
    015A 985F      CBI	0x0B,7
(0066) delay(1);
    015B E001      LDI	R16,1
    015C E010      LDI	R17,0
    015D DFBA      RCALL	_delay
(0067) REST1;
    015E 9A5F      SBI	0x0B,7
    015F 9508      RET
(0068) }
(0069) 
(0070) void lcdon(void)
(0071) {
(0072) DI0;
_lcdon:
    0160 985A      CBI	0x0B,2
(0073) CS1_1;CS2_1;
    0161 9A5D      SBI	0x0B,5
    0162 9A5E      SBI	0x0B,6
(0074) writelcd(0x3f);
    0163 E30F      LDI	R16,0x3F
    0164 DFC1      RCALL	_writelcd
    0165 9508      RET
(0075) }
(0076) 
(0077) void lcdoff(void)
(0078) {
(0079) DI0;
_lcdoff:
    0166 985A      CBI	0x0B,2
(0080) CS1_1;CS2_1;
    0167 9A5D      SBI	0x0B,5
    0168 9A5E      SBI	0x0B,6
(0081) writelcd(0x3E);
    0169 E30E      LDI	R16,0x3E
    016A DFBB      RCALL	_writelcd
    016B 9508      RET
_fromx:
  dat                  --> R20
    016C D393      RCALL	push_gset1
    016D 2F40      MOV	R20,R16
(0082) }
(0083) 
(0084) void fromx(uchar dat)
(0085) {
(0086) DI0;
    016E 985A      CBI	0x0B,2
(0087) CS1_1;CS2_1;
    016F 9A5D      SBI	0x0B,5
    0170 9A5E      SBI	0x0B,6
(0088) writelcd(dat|0xC0);
    0171 2F04      MOV	R16,R20
    0172 6C00      ORI	R16,0xC0
    0173 DFB2      RCALL	_writelcd
    0174 D38E      RCALL	pop_gset1
    0175 9508      RET
_sety:
  dat                  --> R20
    0176 D389      RCALL	push_gset1
    0177 2F40      MOV	R20,R16
(0089) }
(0090) 
(0091) void sety(uchar dat)
(0092) {
(0093) DI0;
    0178 985A      CBI	0x0B,2
(0094) writelcd(0xB8|dat);
    0179 2F04      MOV	R16,R20
    017A 6B08      ORI	R16,0xB8
    017B DFAA      RCALL	_writelcd
    017C D386      RCALL	pop_gset1
    017D 9508      RET
_setx:
  dat                  --> R20
    017E D381      RCALL	push_gset1
    017F 2F40      MOV	R20,R16
(0095) }
(0096) 
(0097) void setx(uchar dat)
(0098) {
(0099) if(dat<64)
    0180 3440      CPI	R20,0x40
    0181 F418      BCC	0x0185
(0100)  {CS1_1;CS2_0;}
    0182 9A5D      SBI	0x0B,5
    0183 985E      CBI	0x0B,6
    0184 C003      RJMP	0x0188
(0101) else 
(0102)  {CS1_0;CS2_1;dat-=64;}
    0185 985D      CBI	0x0B,5
    0186 9A5E      SBI	0x0B,6
    0187 5440      SUBI	R20,0x40
(0103) DI0;
    0188 985A      CBI	0x0B,2
(0104) writelcd(0x40|dat);
    0189 2F04      MOV	R16,R20
    018A 6400      ORI	R16,0x40
    018B DF9A      RCALL	_writelcd
    018C D376      RCALL	pop_gset1
    018D 9508      RET
_w8:
  dat                  --> Y+4
  y                    --> R20
  x                    --> R22
    018E D36F      RCALL	push_gset2
    018F 2F42      MOV	R20,R18
    0190 2F60      MOV	R22,R16
(0105) }
(0106) 
(0107) void w8(uchar x,uchar y,uchar dat)
(0108) {
(0109) setx(x);
    0191 2F06      MOV	R16,R22
    0192 DFEB      RCALL	_setx
(0110) sety(y); 
    0193 2F04      MOV	R16,R20
    0194 DFE1      RCALL	_sety
(0111) writelcddat(dat);
    0195 810C      LDD	R16,Y+4
    0196 DFB8      RCALL	_writelcddat
(0112) WDR();
    0197 95A8      WDR
    0198 D357      RCALL	pop_gset2
    0199 9508      RET
_clrlcd:
  j                    --> R20
  i                    --> R22
    019A D363      RCALL	push_gset2

⌨️ 快捷键说明

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