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

📄 lm1602.s

📁 ds18b20+1602液晶显示 基于atmega16l单片机的编程
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module lm1602.c
	.area data(ram, con, rel)
_CGRAMtab::
	.blkb 2
	.area idata
	.byte 12,18
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 18,12
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile F:\avr最小系统板\程序代码\ex15_ds18b20_1602\lm1602.c
	.dbsym e CGRAMtab _CGRAMtab A[8:8]c
	.area text(rom, con, rel)
	.dbfile F:\avr最小系统板\程序代码\ex15_ds18b20_1602\lm1602.c
	.dbfunc e CheckBusy _CheckBusy fc
	.even
_CheckBusy::
	.dbline -1
	.dbline 14
; #include "lm1602.h"
; #include "string.h"
; #include <macros.h>
; 
; 
; /*自定义字符*/
; byte  CGRAMtab[] = {0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00} ; //度的符号
; 
; 
; void LcdInit(void);
; void DisplayTime(byte hour,byte minute,byte second);
; 
; unsigned char CheckBusy(void)
; {
	.dbline 16
;     
;     DDRB = 0x00;
	clr R2
	out 0x17,R2
	.dbline 17
; 	NOP();
	nop
	.dbline 18
; 	NOP();
	nop
	.dbline 19
; 	NOP();
	nop
	.dbline 20
; 	NOP();
	nop
	.dbline 21
; 	NOP();
	nop
	.dbline 22
; 	NOP();
	nop
	.dbline 23
; 	NOP();
	nop
	.dbline 24
; 	NOP();
	nop
	.dbline 25
; 	RS_L;
	cbi 0x1b,5
	.dbline 26
; 	RW_H;
	sbi 0x1b,6
	.dbline 27
; 	EN_H;
	sbi 0x1b,7
	.dbline 28
; 	NOP();
	nop
	.dbline 29
; 	NOP();
	nop
	.dbline 30
; 	NOP();
	nop
	.dbline 31
; 	NOP();
	nop
	.dbline 32
; 	 EN_L;
	cbi 0x1b,7
	.dbline 33
; 	if((PINB&0x80)==0x80)
	in R24,0x16
	andi R24,128
	cpi R24,128
	brne L2
	.dbline 34
; 	{
	.dbline 35
; 	   DDRB = 0xFF;
	ldi R24,255
	out 0x17,R24
	.dbline 36
; 	   return 1;
	ldi R16,1
	xjmp L1
L2:
	.dbline 39
; 	}
; 	else
; 	{
	.dbline 40
; 	   DDRB = 0xFF;
	ldi R24,255
	out 0x17,R24
	.dbline 41
; 	   return 0;
	clr R16
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              t -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 47
; 	 }
; 	
; }
; 
; void delay(void)
; {
	.dbline 49
	clr R16
	clr R17
	xjmp L8
L5:
	.dbline 49
L6:
	.dbline 49
	subi R16,255  ; offset = 1
	sbci R17,255
L8:
	.dbline 49
;   unsigned int t;
;   for(t=0;t<1000;t++);
	cpi R16,232
	ldi R30,3
	cpc R17,R30
	brlo L5
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbsym r t 16 i
	.dbend
	.dbfunc e WriteCmd _WriteCmd fV
;            cmd -> R20
	.even
_WriteCmd::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 53
; }
; 
; void WriteCmd(byte cmd)
; {
	.dbline 55
;  
; 	RS_L;
	cbi 0x1b,5
	.dbline 56
; 	RW_L; 
	cbi 0x1b,6
	.dbline 57
; 	DATAPORT = cmd;	 
	out 0x18,R20
	.dbline 58
; 	EN_H; 
	sbi 0x1b,7
	.dbline 60
; 	 //while(CheckBusy());
; 	delay();
	xcall _delay
	.dbline 61
; 	EN_L;
	cbi 0x1b,7
	.dbline -2
L9:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r cmd 20 c
	.dbend
	.dbfunc e WriteData _WriteData fV
;          datas -> R20
	.even
_WriteData::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 65
; 	}
; 
; void WriteData(byte datas)
; {
	.dbline 66
; 	RS_H;
	sbi 0x1b,5
	.dbline 67
; 	RW_L;
	cbi 0x1b,6
	.dbline 68
; 	DATAPORT = datas;
	out 0x18,R20
	.dbline 69
; 	EN_H; 
	sbi 0x1b,7
	.dbline 70
;     delay();
	xcall _delay
	.dbline 71
; 	EN_L;
	cbi 0x1b,7
	.dbline -2
L10:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r datas 20 c
	.dbend
	.dbfunc e LCD_WriteCGRAM _LCD_WriteCGRAM fV
;              i -> R20
;            len -> R22
;          cgram -> R10,R11
	.even
_LCD_WriteCGRAM::
	xcall push_gset3
	mov R22,R18
	movw R10,R16
	.dbline -1
	.dbline 75
; }
; 
; void  LCD_WriteCGRAM(byte *cgram,byte len)  //自定义字符写入CGRAM函数
; {  
	.dbline 77
;    byte i ;
;    WriteCmd(0x40) ;  //写CGRAM
	ldi R16,64
	xcall _WriteCmd
	.dbline 78
;     for (i = 0 ; i< len ; i++)       
	clr R20
	xjmp L15
L12:
	.dbline 79
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	ldd R16,z+0
	xcall _WriteData
L13:
	.dbline 78
	inc R20
L15:
	.dbline 78
	cp R20,R22
	brlo L12
	.dbline -2
L11:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r len 22 c
	.dbsym r cgram 10 pc
	.dbend
	.dbfunc e ClearLcd _ClearLcd fV
	.even
_ClearLcd::
	.dbline -1
	.dbline 84
;      WriteData(*(cgram+i)) ;        
; }
; 
; 
; void ClearLcd(void)
; {
	.dbline 85
;     WriteCmd(CLR_DIS);
	ldi R16,1
	xcall _WriteCmd
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e CurReturn _CurReturn fV
	.even
_CurReturn::
	.dbline -1
	.dbline 89
; }
; 
; void CurReturn(void)
; {
	.dbline 90
;  	 WriteCmd(CUR_RET);	
	ldi R16,3
	xcall _WriteCmd
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SetInputMode _SetInputMode fV
;        setData -> R20
;       textMove -> R22
;         curDir -> R10
	.even
_SetInputMode::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	.dbline -1
	.dbline 94
; }
; 
; void SetInputMode(byte curDir, byte textMove)
; {
	.dbline 95
;     byte setData = 0x04;
	ldi R20,4
	.dbline 96
; 	if (curDir == 1) //光标右移
	mov R24,R10
	cpi R24,1
	brne L19
	.dbline 97
; 		   setData |= 0x02;
	ori R20,2
	xjmp L20
L19:
	.dbline 99
; 	else
; 	    setData &= ~0x02;
	andi R20,253
L20:
	.dbline 101
; 		  
; 	if (textMove == 1)	//文字移动
	cpi R22,1
	brne L21
	.dbline 102
; 		   setData |= 0x01;
	ori R20,1
	xjmp L22
L21:
	.dbline 104
; 	else                 //文字不移动
; 		   setData &= ~0x01;	
	andi R20,254
L22:
	.dbline 105
; 	WriteCmd(setData);		       	   
	mov R16,R20
	xcall _WriteCmd
	.dbline -2
L18:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r setData 20 c
	.dbsym r textMove 22 c
	.dbsym r curDir 10 c
	.dbend
	.dbfunc e SetDisMode _SetDisMode fV
;        setData -> R20
;       curFlash -> y+6
;         curDis -> R22
;         allDis -> R10
	.even
_SetDisMode::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	.dbline -1
	.dbline 109
; }
; 
; void SetDisMode(byte allDis, byte curDis, byte curFlash)
; {
	.dbline 110
;  	 byte setData = 0x08;
	ldi R20,8
	.dbline 112
; 	
; 	if (allDis == 1)   //所有都显示 
	mov R24,R10
	cpi R24,1
	brne L24
	.dbline 113
; 		   setData |= 0x04;
	ori R20,4
	xjmp L25
L24:
	.dbline 115
; 	else		    	   //都不显示 
; 	    setData &= ~0x04;
	andi R20,251
L25:
	.dbline 117
; 		  
; 	if (curDis == 1)	//光标显示 
	cpi R22,1
	brne L26
	.dbline 118
; 		   setData |= 0x02;
	ori R20,2
	xjmp L27
L26:
	.dbline 120
; 	else                 //光标不显示
; 		   setData &= ~0x02;	
	andi R20,253
L27:
	.dbline 122
; 	
; 	if (curFlash == 1)	//光标闪烁
	ldd R24,y+6
	cpi R24,1
	brne L28
	.dbline 123
; 		   setData |= 0x01;
	ori R20,1
	xjmp L29
L28:
	.dbline 125
; 	else                 ///光标不闪烁
; 		   setData &= ~0x01;		   
	andi R20,254
L29:
	.dbline 126
; 	WriteCmd(setData);		  
	mov R16,R20
	xcall _WriteCmd
	.dbline -2
L23:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r setData 20 c
	.dbsym l curFlash 6 c
	.dbsym r curDis 22 c
	.dbsym r allDis 10 c
	.dbend
	.dbfunc e SetFunction _SetFunction fV
;        setData -> R20
;           fDis -> y+6
;        lineDis -> R22
;         numBus -> R10
	.even
_SetFunction::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	.dbline -1
	.dbline 146
; }
; /*
; void SetShift(byte cMove, byte cDir)
; {
;  	 byte setData = 0x10;
; 	
; 	if (cMove == 1)   //移动文字
; 		   setData |= 0x08;
; 	else		    	   //移动光标
; 	    setData &= ~0x08;
; 		  
; 	if (cDir == 1)	//右移
; 		   setData |= 0x04;
; 	else                 //左移
; 		   setData &= ~0x04;
; 	WriteCmd(setData);			
; }
; */
; void SetFunction(byte numBus, byte lineDis, byte fDis)
; {
	.dbline 147
;  	byte setData = 0x20;
	ldi R20,32
	.dbline 149
; 	
; 	if (numBus == 1)   //4位总线 
	mov R24,R10
	cpi R24,1
	brne L31
	.dbline 150
; 		   setData |= 0x10;
	ori R20,16
	xjmp L32
L31:
	.dbline 152
; 	else		    	   //8位总线 
; 	    setData &= ~0x10;
	andi R20,239
L32:
	.dbline 154
; 		  
; 	if (lineDis == 1)	//双行显示 
	cpi R22,1
	brne L33
	.dbline 155
; 		   setData |= 0x08;
	ori R20,8
	xjmp L34
L33:
	.dbline 157
; 	else                 //单行显示
; 		   setData &= ~0x08;	
	andi R20,247
L34:
	.dbline 159
; 	
; 	if (fDis == 1)	//5*10点阵
	ldd R24,y+6
	cpi R24,1
	brne L35
	.dbline 160
; 		   setData |= 0x04;
	ori R20,4
	xjmp L36
L35:
	.dbline 162
; 	else                 ///5*7点阵
; 		   setData &= ~0x04;		   
	andi R20,251
L36:
	.dbline 163
; 	WriteCmd(setData);		  
	mov R16,R20
	xcall _WriteCmd
	.dbline -2
L30:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r setData 20 c
	.dbsym l fDis 6 c
	.dbsym r lineDis 22 c
	.dbsym r numBus 10 c
	.dbend
	.dbfunc e SetDisAddr _SetDisAddr fV
;           ucol -> R20
;           urow -> R22
	.even
_SetDisAddr::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 174
; }
;  /*
; void SetCGRAMAddr(byte ramAddr)
; {
;  	byte setData = 0x40;
; 	setData |= (ramAddr &0x3f);
; 	WriteCmd(setData);		 
; }
; */
; void SetDisAddr(byte urow, byte ucol)
; {
	.dbline 175
;     if (ucol >= 20)
	cpi R20,20
	brlo L38
	.dbline 176
; 	ucol= 20;
	ldi R20,20
L38:
	.dbline 177
; 	if (urow == 0)
	tst R22
	brne L40
	.dbline 178
; 	    WriteCmd( 0x80+ucol);	
	mov R16,R20
	subi R16,128    ; addi 128
	xcall _WriteCmd
	xjmp L41
L40:
	.dbline 180
	mov R16,R20

⌨️ 快捷键说明

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