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

📄 lcd_0108.lst

📁 ATmega64单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"LCD_0108.c"
   2               	__SREG__ = 0x3f
   3               	__SP_H__ = 0x3e
   4               	__SP_L__ = 0x3d
   5               	__tmp_reg__ = 0
   6               	__zero_reg__ = 1
   7               		.global __do_copy_data
   8               		.global __do_clear_bss
  10               		.text
  11               	.Ltext0:
  88               	.global	BusyOrNot
  90               	BusyOrNot:
   1:LCD\LCD_0108.c **** #include "LCD_0108.H"
   2:LCD\LCD_0108.c **** 
   3:LCD\LCD_0108.c **** #define DefaultRow		0xc0
   4:LCD\LCD_0108.c **** #define DefaultColumn	0x40
   5:LCD\LCD_0108.c **** #define DefaultPage		0xb8                                                            
   6:LCD\LCD_0108.c **** 
   7:LCD\LCD_0108.c **** #define uchar unsigned char
   8:LCD\LCD_0108.c **** #define uint unsigned int
   9:LCD\LCD_0108.c **** 
  10:LCD\LCD_0108.c **** uchar Dis_Buf[1024];
  11:LCD\LCD_0108.c **** 
  12:LCD\LCD_0108.c **** uchar AREA=1;
  13:LCD\LCD_0108.c **** uchar error_flag=0;
  14:LCD\LCD_0108.c **** 
  15:LCD\LCD_0108.c **** 
  16:LCD\LCD_0108.c **** 
  17:LCD\LCD_0108.c **** //////////////////底层函数////////////////////////////////////////////////////////////////
  18:LCD\LCD_0108.c **** 
  19:LCD\LCD_0108.c **** 
  20:LCD\LCD_0108.c **** /*************************************************/
  21:LCD\LCD_0108.c **** /*      LCD初始化函数                            */
  22:LCD\LCD_0108.c **** /*************************************************/
  23:LCD\LCD_0108.c **** void InitialLcd(void)
  24:LCD\LCD_0108.c **** {
  25:LCD\LCD_0108.c **** 	MCUCR |= (1<<SRE);             //使能总线
  26:LCD\LCD_0108.c **** 	//XMCRA |= (1<<SRW00)|(1<<SRW01);//加入等待
  27:LCD\LCD_0108.c **** 
  28:LCD\LCD_0108.c **** 	SET_RST_OUTPUT();			//设RST为输出
  29:LCD\LCD_0108.c **** 	SET_CSA_OUTPUT();			//设CSA为输出		
  30:LCD\LCD_0108.c **** 	SET_CSB_OUTPUT();			//设CSB为输出
  31:LCD\LCD_0108.c **** 	SET_CSA();					//设置CSA CSB为无效状态
  32:LCD\LCD_0108.c **** 	SET_CSB();
  33:LCD\LCD_0108.c **** 	CLR_RST();					//拉地RST复位
  34:LCD\LCD_0108.c **** 	LCDDelay(255);				//延时
  35:LCD\LCD_0108.c **** 	SET_RST();					//拉高
  36:LCD\LCD_0108.c **** 	LCDDelay(255);				//延时
  37:LCD\LCD_0108.c ****     ShowLcd(0x00);				//关显示
  38:LCD\LCD_0108.c **** 	ClearDisBuf(0x00);				//清屏
  39:LCD\LCD_0108.c **** 	UpdateDis();
  40:LCD\LCD_0108.c **** 	LocateLcdPageColumn(0x00,0x00);//定位显示点		
  41:LCD\LCD_0108.c **** 	ShowLcd(0x01 );				//开显示
  42:LCD\LCD_0108.c **** }
  43:LCD\LCD_0108.c **** 
  44:LCD\LCD_0108.c **** 
  45:LCD\LCD_0108.c **** /*************************************************/
  46:LCD\LCD_0108.c **** /*      判忙函数 出错由全局变量error_flag带出    */
  47:LCD\LCD_0108.c **** /*************************************************/
  48:LCD\LCD_0108.c **** void BusyOrNot()
  49:LCD\LCD_0108.c **** {
  91               	ze=0) */
  92               		ldi r25,lo8(0)
  93               	.L2:
  95               	.LM1:
  96 0000 90E0      		lds r24,8200
  50:LCD\LCD_0108.c **** 	uchar _data,i=0;
  51:LCD\LCD_0108.c **** 	while(1)
  52:LCD\LCD_0108.c **** 	{
  53:LCD\LCD_0108.c **** 		_data = CMD_READ;      //读命令状态
  98               	andi r24,lo8(-112)
  99               		breq .L6
  54:LCD\LCD_0108.c **** 		_data=0x90 & _data;
  55:LCD\LCD_0108.c **** 		if(_data==0x00) break;//比较
 101               	3:
 102               		subi r25,lo8(-(1))
 103 0006 8079      		brne .L2
 104 0008 01F0      		ldi r24,lo8(1)
  56:LCD\LCD_0108.c **** 		if(i++==255){error_flag=1;return;}//超时错误
 105               	 error_flag,r24
 106               	.L6:
 107 000a 9F5F      		ret
 108 000c 01F4      	/* epilogue: frame size=0 */
 109 000e 81E0      	/* epilogue: noreturn */
 110 0010 8093 0000 	/* epilogue end (size=0) */
 111               	/* function BusyOrNot size 13 (13) */
 117               	.Lscope1:
 120               	.global	WriteCommandToRightArea
 122               	WriteCommandToRightArea:
 124               	.LM4:
 125               	.LFBB2:
 126               	/* prologue: frame size=0 */
 127               		push r17
  57:LCD\LCD_0108.c **** 	}
  58:LCD\LCD_0108.c **** }
  59:LCD\LCD_0108.c **** 
  60:LCD\LCD_0108.c **** /*************************************************/
  61:LCD\LCD_0108.c **** /*      向右区写命令                             */
  62:LCD\LCD_0108.c **** /*************************************************/
  63:LCD\LCD_0108.c **** void WriteCommandToRightArea(uchar Command)
  64:LCD\LCD_0108.c **** {
 128               	) */
 129               		mov r17,r24
 131               	.LM5:
 132 0016 1F93      		sbi 50-0x20,5
 134 0018 182F      	.LM6:
  65:LCD\LCD_0108.c **** 	CLR_CSB();			//选中右区
 135               	usyOrNot
 137 001a 959A      	.LM7:
  66:LCD\LCD_0108.c **** 	BusyOrNot();		//判忙
 138               	s 8192,r17
 140 001c 0E94 0000 	.LM8:
  67:LCD\LCD_0108.c **** 	CMD_WRITE = Command;//写命令
 141               	i 50-0x20,5
 142               	/* epilogue: frame size=0 */
 143 0020 1093 0020 		pop r17
  68:LCD\LCD_0108.c **** 	SET_CSB();			//释放右区
 144               	t
 145               	/* epilogue end (size=2) */
 146 0024 9598      	/* function WriteCommandToRightArea size 10 (7) */
 148 0026 1F91      	.Lscope2:
 151               	.global	WriteDataToRightArea
 153               	WriteDataToRightArea:
 155               	.LM9:
 156               	.LFBB3:
 157               	/* prologue: frame size=0 */
 158               		push r17
  69:LCD\LCD_0108.c **** }
  70:LCD\LCD_0108.c **** 
  71:LCD\LCD_0108.c **** /*************************************************/
  72:LCD\LCD_0108.c **** /*      向右区写数据                             */
  73:LCD\LCD_0108.c **** /*************************************************/
  74:LCD\LCD_0108.c **** void WriteDataToRightArea(uchar _Data)
  75:LCD\LCD_0108.c **** {
 159               	 (size=1) */
 160               		mov r17,r24
 162               	.LM10:
 163 002a 1F93      		sbi 50-0x20,5
 165 002c 182F      	.LM11:
  76:LCD\LCD_0108.c **** 	CLR_CSB();			//选中右区
 166               	usyOrNot
 168 002e 959A      	.LM12:
  77:LCD\LCD_0108.c **** 	BusyOrNot();		//判忙
 169               	s 8208,r17
 171 0030 0E94 0000 	.LM13:
  78:LCD\LCD_0108.c **** 	DAT_WRITE = _Data;	//写数据
 172               	i 50-0x20,5
 173               	/* epilogue: frame size=0 */
 174 0034 1093 1020 		pop r17
  79:LCD\LCD_0108.c **** 	SET_CSB();			//释放右区
 175               	t
 176               	/* epilogue end (size=2) */
 177 0038 9598      	/* function WriteDataToRightArea size 10 (7) */
 179 003a 1F91      	.Lscope3:
 182               	.global	WriteCommandToLeftArea
 184               	WriteCommandToLeftArea:
 186               	.LM14:
 187               	.LFBB4:
 188               	/* prologue: frame size=0 */
 189               		push r17
  80:LCD\LCD_0108.c **** }
  81:LCD\LCD_0108.c **** 
  82:LCD\LCD_0108.c **** /*************************************************/
  83:LCD\LCD_0108.c **** /*      向左区写命令                             */
  84:LCD\LCD_0108.c **** /*************************************************/
  85:LCD\LCD_0108.c **** void WriteCommandToLeftArea(uchar Command)
  86:LCD\LCD_0108.c **** {
 190               	 (size=1) */
 191               		mov r17,r24
 193               	.LM15:
 194 003e 1F93      		sbi 50-0x20,6
 196 0040 182F      	.LM16:
  87:LCD\LCD_0108.c **** 	CLR_CSA();			//选中右区
 197               	usyOrNot
 199 0042 969A      	.LM17:
  88:LCD\LCD_0108.c **** 	BusyOrNot();		//判忙
 200               	s 8192,r17
 202 0044 0E94 0000 	.LM18:
  89:LCD\LCD_0108.c **** 	CMD_WRITE = Command;//写命令
 203               	i 50-0x20,6
 204               	/* epilogue: frame size=0 */
 205 0048 1093 0020 		pop r17
  90:LCD\LCD_0108.c **** 	SET_CSA();			//释放右区
 206               	t
 207               	/* epilogue end (size=2) */
 208 004c 9698      	/* function WriteCommandToLeftArea size 10 (7) */
 210 004e 1F91      	.Lscope4:
 213               	.global	WriteDataToLeftArea
 215               	WriteDataToLeftArea:
 217               	.LM19:
 218               	.LFBB5:
 219               	/* prologue: frame size=0 */
 220               		push r17
  91:LCD\LCD_0108.c **** }
  92:LCD\LCD_0108.c **** 
  93:LCD\LCD_0108.c **** /*************************************************/
  94:LCD\LCD_0108.c **** /*      向左区写数据                             */
  95:LCD\LCD_0108.c **** /*************************************************/
  96:LCD\LCD_0108.c **** void WriteDataToLeftArea(uchar _Data)
  97:LCD\LCD_0108.c **** {
 221               	 (size=1) */
 222               		mov r17,r24
 224               	.LM20:
 225 0052 1F93      		sbi 50-0x20,6
 227 0054 182F      	.LM21:
  98:LCD\LCD_0108.c **** 	CLR_CSA();			//选中右区
 228               	usyOrNot
 230 0056 969A      	.LM22:
  99:LCD\LCD_0108.c **** 	BusyOrNot();		//判忙
 231               	s 8208,r17
 233 0058 0E94 0000 	.LM23:
 100:LCD\LCD_0108.c **** 	DAT_WRITE = _Data;	//写数据
 234               	i 50-0x20,6
 235               	/* epilogue: frame size=0 */
 236 005c 1093 1020 		pop r17
 101:LCD\LCD_0108.c **** 	SET_CSA();			//释放右区
 237               	t
 238               	/* epilogue end (size=2) */
 239 0060 9698      	/* function WriteDataToLeftArea size 10 (7) */
 241 0062 1F91      	.Lscope5:
 244               	.global	ClearDisBuf
 246               	ClearDisBuf:
 248               	.LM24:
 249               	.LFBB6:
 250               	/* prologue: frame size=0 */
 251               	/* prologue end (size=0) */
 102:LCD\LCD_0108.c **** }
 103:LCD\LCD_0108.c **** 
 104:LCD\LCD_0108.c **** 
 105:LCD\LCD_0108.c **** 
 106:LCD\LCD_0108.c **** 
 107:LCD\LCD_0108.c **** /*************************************************/
 108:LCD\LCD_0108.c **** /*      清LCD屏                                  */
 109:LCD\LCD_0108.c **** /*************************************************/
 110:LCD\LCD_0108.c **** void ClearDisBuf(uchar val)
 111:LCD\LCD_0108.c **** {
 252               	s_Buf)
 253               		ldi r31,hi8(Dis_Buf)
 254               	.L18:
 256               	.LM25:
 257 0066 E0E0      		st Z+,r24
 258 0068 F0E0      		ldi r25,hi8(Dis_Buf+1024)
 259               		cpi r30,lo8(Dis_Buf+1024)
 112:LCD\LCD_0108.c **** 	uint i;
 113:LCD\LCD_0108.c **** 	for(i=0;i<1024;i++)Dis_Buf[i]=val;
 260               	,r25
 261               		brne .L18
 262 006a 8193      	/* epilogue: frame size=0 */
 263 006c 90E0      		ret
 264 006e E030      	/* epilogue end (size=1) */
 265 0070 F907      	/* function ClearDisBuf size 8 (7) */
 267               	.Lscope6:
 270               	.global	ShowLcd
 272               	ShowLcd:
 274               	.LM26:
 275               	.LFBB7:
 276               	/* prologue: frame size=0 */
 277               		push r17
 114:LCD\LCD_0108.c **** }
 115:LCD\LCD_0108.c **** 
 116:LCD\LCD_0108.c **** /*************************************************/
 117:LCD\LCD_0108.c **** /*      更新显示                                 */
 118:LCD\LCD_0108.c **** /*************************************************/
 119:LCD\LCD_0108.c **** void UpdateDis(void)
 120:LCD\LCD_0108.c **** {
 121:LCD\LCD_0108.c **** 	uchar Page,Column;
 122:LCD\LCD_0108.c **** 	uchar *p = Dis_Buf;
 123:LCD\LCD_0108.c **** 	for(Page=0,Column=0;Page<8;Page++)
 124:LCD\LCD_0108.c **** 	{
 125:LCD\LCD_0108.c **** 		LocateLcdPageColumn(Page,Column);//定位右区页和列
 126:LCD\LCD_0108.c **** 		for(Column=0;Column<64;Column++)WriteDataToRightArea(*p++);//写右区
 127:LCD\LCD_0108.c **** 		LocateLcdPageColumn(Page,Column);//定位左区页和列
 128:LCD\LCD_0108.c **** 		for(Column=64;Column<128;Column++)WriteDataToLeftArea(*p++);//写左区
 129:LCD\LCD_0108.c **** 	}
 130:LCD\LCD_0108.c **** 	LocateLcdPageColumn(0x00,0x00);//定位显示点		
 131:LCD\LCD_0108.c **** 	ShowLcd(0x01 );				//开显示
 132:LCD\LCD_0108.c **** }
 133:LCD\LCD_0108.c **** 
 134:LCD\LCD_0108.c **** 
 135:LCD\LCD_0108.c **** /*************************************************/
 136:LCD\LCD_0108.c **** /*      开关LCD显示                              */
 137:LCD\LCD_0108.c **** /*************************************************/
 138:LCD\LCD_0108.c **** void ShowLcd(uchar on)//LCD的显示开关,on=0x00,关;on=0x01,开.
 139:LCD\LCD_0108.c **** {
 278               	ize=1) */
 280               	.LM27:
 281               		mov r17,r24
 282 0076 1F93      		subi r17,lo8(-(62))
 140:LCD\LCD_0108.c **** 	uchar temp;
 141:LCD\LCD_0108.c **** 	temp=0x3E;			//00111110B
 142:LCD\LCD_0108.c **** 	temp+=on;
 284               	
 285               		mov r24,r17
 286 0078 182F      		call WriteCommandToRightArea
 143:LCD\LCD_0108.c **** 	WriteCommandToRightArea(temp);
 288               	29:
 289               		mov r24,r17
 290 007c 812F      		call WriteCommandToLeftArea
 291 007e 0E94 0000 	/* epilogue: frame size=0 */
 144:LCD\LCD_0108.c **** 	WriteCommandToLeftArea(temp);
 292               	 r17
 293               		ret
 294 0082 812F      	/* epilogue end (size=2) */
 295 0084 0E94 0000 	/* function ShowLcd size 11 (8) */
 300               	.Lscope7:
 303               	.global	LocateLcdColumn
 305               	LocateLcdColumn:
 307               	.LM30:
 308               	.LFBB8:
 309               	/* prologue: frame size=0 */
 310               	/* prologue end (size=0) */
 145:LCD\LCD_0108.c **** }
 146:LCD\LCD_0108.c **** 
 147:LCD\LCD_0108.c **** //定位列
 148:LCD\LCD_0108.c **** void LocateLcdColumn(uchar Column)
 149:LCD\LCD_0108.c **** {
 311               	M31-.LFBB8
 312               	.LM31:
 313               		mov r25,r24
 314               		subi r25,lo8(-(64))
 150:LCD\LCD_0108.c **** 	uchar temp;
 151:LCD\LCD_0108.c **** 	temp = DefaultColumn;//01000000B
 152:LCD\LCD_0108.c **** 	temp += Column;					   
 316               	:
 317               		cpi r24,lo8(64)
 318 008c 982F      		brlo .L26
 153:LCD\LCD_0108.c **** 	if(Column>63)
 320               	3:
 321               		call WriteCommandToLeftArea
 322 0090 8034      		ret
 323 0092 00F0      	.L26:
 154:LCD\LCD_0108.c **** 	{
 155:LCD\LCD_0108.c **** 		temp -= 64;		        //为数据写入指示右区
 156:LCD\LCD_0108.c **** 		WriteCommandToLeftArea(temp); //定位右区列
 324               	abn	68,0,158,.LM34-.LFBB8
 325               	.LM34:
 326 0094 0E94 0000 		mov r24,r25
 327 0098 0895      		call WriteCommandToRightArea
 328               		ret
 157:LCD\LCD_0108.c **** 	}

⌨️ 快捷键说明

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