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

📄 main.lss

📁 功能 : 1602字符型液晶显示驱动 开发环境:WinAVR 硬件环境:ATMEGA32/AVR开发板 创建日期:2008-3-27 最后修改:2008-3-27 作 者:bjj9217@1
💻 LSS
📖 第 1 页 / 共 2 页
字号:
 1d4:	1f 93       	push	r17
  unsigned char hex_h;
  unsigned char hex_l;
  hex_h=hex/16;
 1d6:	18 2f       	mov	r17, r24
 1d8:	12 95       	swap	r17
 1da:	1f 70       	andi	r17, 0x0F	; 15
  hex_l=hex%16;
 1dc:	08 2f       	mov	r16, r24
 1de:	0f 70       	andi	r16, 0x0F	; 15
  WriteData('0');
 1e0:	80 e3       	ldi	r24, 0x30	; 48
 1e2:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
  WriteData('x');
 1e6:	88 e7       	ldi	r24, 0x78	; 120
 1e8:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
  if(hex_h>=10) hex_h=hex_h-10+'A';
 1ec:	1a 30       	cpi	r17, 0x0A	; 10
 1ee:	18 f0       	brcs	.+6      	; 0x1f6 <DispHex+0x24>
 1f0:	81 2f       	mov	r24, r17
 1f2:	89 5c       	subi	r24, 0xC9	; 201
 1f4:	02 c0       	rjmp	.+4      	; 0x1fa <DispHex+0x28>
  else hex_h+=0x30;
 1f6:	81 2f       	mov	r24, r17
 1f8:	80 5d       	subi	r24, 0xD0	; 208
  WriteData(hex_h);
 1fa:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
  if(hex_l>=10) hex_l=hex_l-10+'A';
 1fe:	0a 30       	cpi	r16, 0x0A	; 10
 200:	18 f0       	brcs	.+6      	; 0x208 <DispHex+0x36>
 202:	80 2f       	mov	r24, r16
 204:	89 5c       	subi	r24, 0xC9	; 201
 206:	02 c0       	rjmp	.+4      	; 0x20c <DispHex+0x3a>
  else hex_l+=0x30;
 208:	80 2f       	mov	r24, r16
 20a:	80 5d       	subi	r24, 0xD0	; 208
  WriteData(hex_l);
 20c:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 210:	1f 91       	pop	r17
 212:	0f 91       	pop	r16
 214:	08 95       	ret

00000216 <XYHex>:
}
/************************
* 在(x,y)位置显示十六进制
* x,y: 位置
* hex: 要显示的数,为十进制数 0~255
************************/
void XYHex(unsigned char x,unsigned char y,unsigned char hex)
{
 216:	1f 93       	push	r17
 218:	14 2f       	mov	r17, r20
  Locate_xy(x,y);
 21a:	0e 94 a8 00 	call	0x150	; 0x150 <Locate_xy>
  DispHex(hex);
 21e:	81 2f       	mov	r24, r17
 220:	0e 94 e9 00 	call	0x1d2	; 0x1d2 <DispHex>
 224:	1f 91       	pop	r17
 226:	08 95       	ret

00000228 <DispInit>:
}

/************************
* 在(x,y)位置显示5位数字
* x,y: 位置
* data: 5位数字
* dot: 小数点位置
************************/
void DispInit(unsigned char x,unsigned char y,unsigned int data,unsigned char dot)
{
 228:	7f 92       	push	r7
 22a:	8f 92       	push	r8
 22c:	9f 92       	push	r9
 22e:	af 92       	push	r10
 230:	bf 92       	push	r11
 232:	cf 92       	push	r12
 234:	df 92       	push	r13
 236:	ef 92       	push	r14
 238:	ff 92       	push	r15
 23a:	0f 93       	push	r16
 23c:	1f 93       	push	r17
 23e:	cf 93       	push	r28
 240:	df 93       	push	r29
 242:	8a 01       	movw	r16, r20
 244:	b2 2e       	mov	r11, r18
  unsigned char bcd0;
  unsigned char bcd1;
  unsigned char bcd2;
  unsigned char bcd3;
  unsigned char bcd4;
  
  Locate_xy(x,y);
 246:	0e 94 a8 00 	call	0x150	; 0x150 <Locate_xy>
  bcd4=(data/10000);
 24a:	c8 01       	movw	r24, r16
 24c:	60 e1       	ldi	r22, 0x10	; 16
 24e:	77 e2       	ldi	r23, 0x27	; 39
 250:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 254:	9b 01       	movw	r18, r22
  bcd3=(data%10000)/1000;
 256:	c8 01       	movw	r24, r16
 258:	60 e1       	ldi	r22, 0x10	; 16
 25a:	77 e2       	ldi	r23, 0x27	; 39
 25c:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 260:	68 ee       	ldi	r22, 0xE8	; 232
 262:	73 e0       	ldi	r23, 0x03	; 3
 264:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 268:	eb 01       	movw	r28, r22
 26a:	76 2e       	mov	r7, r22
  bcd2=(data%1000)/100;
 26c:	c8 01       	movw	r24, r16
 26e:	68 ee       	ldi	r22, 0xE8	; 232
 270:	73 e0       	ldi	r23, 0x03	; 3
 272:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 276:	64 e6       	ldi	r22, 0x64	; 100
 278:	70 e0       	ldi	r23, 0x00	; 0
 27a:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 27e:	7b 01       	movw	r14, r22
 280:	96 2e       	mov	r9, r22
  bcd1=(data%100)/10;
 282:	c8 01       	movw	r24, r16
 284:	64 e6       	ldi	r22, 0x64	; 100
 286:	70 e0       	ldi	r23, 0x00	; 0
 288:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 28c:	6a e0       	ldi	r22, 0x0A	; 10
 28e:	70 e0       	ldi	r23, 0x00	; 0
 290:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 294:	6b 01       	movw	r12, r22
 296:	a6 2e       	mov	r10, r22
  bcd0=data%10;
 298:	c8 01       	movw	r24, r16
 29a:	6a e0       	ldi	r22, 0x0A	; 10
 29c:	70 e0       	ldi	r23, 0x00	; 0
 29e:	0e 94 13 02 	call	0x426	; 0x426 <__udivmodhi4>
 2a2:	8c 01       	movw	r16, r24
 2a4:	88 2e       	mov	r8, r24
  
  if(dot==4)
 2a6:	84 e0       	ldi	r24, 0x04	; 4
 2a8:	b8 16       	cp	r11, r24
 2aa:	39 f4       	brne	.+14     	; 0x2ba <DispInit+0x92>
  {
    DispNum(bcd4);
 2ac:	82 2f       	mov	r24, r18
 2ae:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	WriteData('.');
 2b2:	8e e2       	ldi	r24, 0x2E	; 46
 2b4:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 2b8:	42 c0       	rjmp	.+132    	; 0x33e <DispInit+0x116>
	DispNum(bcd3);
	DispNum(bcd2);
	DispNum(bcd1);
	DispNum(bcd0);
  }
  else if(dot==3)
 2ba:	83 e0       	ldi	r24, 0x03	; 3
 2bc:	b8 16       	cp	r11, r24
 2be:	61 f4       	brne	.+24     	; 0x2d8 <DispInit+0xb0>
  {
    if(bcd4!=0) DispNum(bcd4);  //为0时不显示
 2c0:	22 23       	and	r18, r18
 2c2:	19 f0       	breq	.+6      	; 0x2ca <DispInit+0xa2>
 2c4:	82 2f       	mov	r24, r18
 2c6:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd3);
 2ca:	8c 2f       	mov	r24, r28
 2cc:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	WriteData('.');
 2d0:	8e e2       	ldi	r24, 0x2E	; 46
 2d2:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
 2d6:	36 c0       	rjmp	.+108    	; 0x344 <DispInit+0x11c>
	DispNum(bcd2);
	DispNum(bcd1);
	DispNum(bcd0);
  }
  else if(dot==2)
 2d8:	82 e0       	ldi	r24, 0x02	; 2
 2da:	b8 16       	cp	r11, r24
 2dc:	a9 f4       	brne	.+42     	; 0x308 <DispInit+0xe0>
  {
    if(bcd4!=0)  DispNum(bcd4);  //为0时不显示
 2de:	22 23       	and	r18, r18
 2e0:	21 f0       	breq	.+8      	; 0x2ea <DispInit+0xc2>
 2e2:	82 2f       	mov	r24, r18
 2e4:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
 2e8:	02 c0       	rjmp	.+4      	; 0x2ee <DispInit+0xc6>
	if((bcd4!=0)||((bcd4==0)&&(bcd3!=0))) DispNum(bcd3);
 2ea:	cc 23       	and	r28, r28
 2ec:	19 f0       	breq	.+6      	; 0x2f4 <DispInit+0xcc>
 2ee:	87 2d       	mov	r24, r7
 2f0:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd2);
 2f4:	89 2d       	mov	r24, r9
 2f6:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	WriteData('.');
 2fa:	8e e2       	ldi	r24, 0x2E	; 46
 2fc:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
	DispNum(bcd1);
 300:	8a 2d       	mov	r24, r10
 302:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
 306:	16 c0       	rjmp	.+44     	; 0x334 <DispInit+0x10c>
	DispNum(bcd0);
  }
  else if(dot==1)
 308:	81 e0       	ldi	r24, 0x01	; 1
 30a:	b8 16       	cp	r11, r24
 30c:	a9 f4       	brne	.+42     	; 0x338 <DispInit+0x110>
  {
    if(bcd4!=0)  DispNum(bcd4);  //为0时不显示
 30e:	22 23       	and	r18, r18
 310:	21 f0       	breq	.+8      	; 0x31a <DispInit+0xf2>
 312:	82 2f       	mov	r24, r18
 314:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
 318:	1f c0       	rjmp	.+62     	; 0x358 <DispInit+0x130>
	if((bcd4!=0)||((bcd4==0)&&(bcd3!=0))) DispNum(bcd3);
 31a:	cc 23       	and	r28, r28
 31c:	e9 f4       	brne	.+58     	; 0x358 <DispInit+0x130>
	if((bcd4!=0)||((bcd4==0)&&(bcd3!=0))||((bcd4==0)&&(bcd3==0)&&(bcd2!=0))) DispNum(bcd2);
 31e:	ee 20       	and	r14, r14
 320:	19 f0       	breq	.+6      	; 0x328 <DispInit+0x100>
 322:	89 2d       	mov	r24, r9
 324:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd1);
 328:	8a 2d       	mov	r24, r10
 32a:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	WriteData('.');
 32e:	8e e2       	ldi	r24, 0x2E	; 46
 330:	0e 94 87 00 	call	0x10e	; 0x10e <WriteData>
	DispNum(bcd0);
 334:	88 2d       	mov	r24, r8
 336:	0d c0       	rjmp	.+26     	; 0x352 <DispInit+0x12a>
  }
  else
  {
    DispNum(bcd4);
 338:	82 2f       	mov	r24, r18
 33a:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd3);
 33e:	8c 2f       	mov	r24, r28
 340:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd2);
 344:	8e 2d       	mov	r24, r14
 346:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd1);
 34a:	8c 2d       	mov	r24, r12
 34c:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
	DispNum(bcd0);
 350:	80 2f       	mov	r24, r16
 352:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
 356:	04 c0       	rjmp	.+8      	; 0x360 <DispInit+0x138>
 358:	8c 2f       	mov	r24, r28
 35a:	0e 94 db 00 	call	0x1b6	; 0x1b6 <DispNum>
 35e:	e1 cf       	rjmp	.-62     	; 0x322 <DispInit+0xfa>
 360:	df 91       	pop	r29
 362:	cf 91       	pop	r28
 364:	1f 91       	pop	r17
 366:	0f 91       	pop	r16
 368:	ff 90       	pop	r15
 36a:	ef 90       	pop	r14
 36c:	df 90       	pop	r13
 36e:	cf 90       	pop	r12
 370:	bf 90       	pop	r11
 372:	af 90       	pop	r10
 374:	9f 90       	pop	r9
 376:	8f 90       	pop	r8
 378:	7f 90       	pop	r7
 37a:	08 95       	ret

0000037c <LCD_Init>:
  }
  
}

/************************
* 液晶初始化
************************/
void LCD_Init(void)
{
 37c:	80 e3       	ldi	r24, 0x30	; 48
 37e:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x30);
  WriteComand(0x30);
 382:	80 e3       	ldi	r24, 0x30	; 48
 384:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x30);
 388:	80 e3       	ldi	r24, 0x30	; 48
 38a:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x02);
 38e:	82 e0       	ldi	r24, 0x02	; 2
 390:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  
  WriteComand(0x28);/*4位总线....*/
 394:	88 e2       	ldi	r24, 0x28	; 40
 396:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x01);/*清屏*/
 39a:	81 e0       	ldi	r24, 0x01	; 1
 39c:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x02);/*归位*/
 3a0:	82 e0       	ldi	r24, 0x02	; 2
 3a2:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x0c);/*显示开,光标开,闪烁开*/
 3a6:	8c e0       	ldi	r24, 0x0C	; 12
 3a8:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x06);/*光标自动右移,显示文字不动*/
 3ac:	86 e0       	ldi	r24, 0x06	; 6
 3ae:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
  WriteComand(0x80);/*设置显示地址*/
 3b2:	80 e8       	ldi	r24, 0x80	; 128
 3b4:	0e 94 66 00 	call	0xcc	; 0xcc <WriteComand>
 3b8:	08 95       	ret

000003ba <main>:
#include"delay.h"
#include"LCD1602.h"

int main(void)
{
 3ba:	0e 94 be 01 	call	0x37c	; 0x37c <LCD_Init>
  LCD_Init();
  //WriteComand(0x80);
  //XYHex(0,0,255);
  //Locate_xy(0,0);
  //DispString("bjj9217@163.com");
  //XYString(0,0,"Char vol:");
  XYString(0,0,"U:");
 3be:	40 e6       	ldi	r20, 0x60	; 96
 3c0:	50 e0       	ldi	r21, 0x00	; 0
 3c2:	60 e0       	ldi	r22, 0x00	; 0
 3c4:	80 e0       	ldi	r24, 0x00	; 0
 3c6:	0e 94 c8 00 	call	0x190	; 0x190 <XYString>
  DispInit(2,0,1280,2);
 3ca:	22 e0       	ldi	r18, 0x02	; 2
 3cc:	40 e0       	ldi	r20, 0x00	; 0
 3ce:	55 e0       	ldi	r21, 0x05	; 5
 3d0:	60 e0       	ldi	r22, 0x00	; 0
 3d2:	82 e0       	ldi	r24, 0x02	; 2
 3d4:	0e 94 14 01 	call	0x228	; 0x228 <DispInit>
  XYString(7,0,"v");
 3d8:	43 e6       	ldi	r20, 0x63	; 99
 3da:	50 e0       	ldi	r21, 0x00	; 0
 3dc:	60 e0       	ldi	r22, 0x00	; 0
 3de:	87 e0       	ldi	r24, 0x07	; 7
 3e0:	0e 94 c8 00 	call	0x190	; 0x190 <XYString>
  XYString(0,1,"I:");
 3e4:	45 e6       	ldi	r20, 0x65	; 101
 3e6:	50 e0       	ldi	r21, 0x00	; 0
 3e8:	61 e0       	ldi	r22, 0x01	; 1
 3ea:	80 e0       	ldi	r24, 0x00	; 0
 3ec:	0e 94 c8 00 	call	0x190	; 0x190 <XYString>
  DispInit(2,1,900,2);
 3f0:	22 e0       	ldi	r18, 0x02	; 2
 3f2:	44 e8       	ldi	r20, 0x84	; 132
 3f4:	53 e0       	ldi	r21, 0x03	; 3
 3f6:	61 e0       	ldi	r22, 0x01	; 1
 3f8:	82 e0       	ldi	r24, 0x02	; 2
 3fa:	0e 94 14 01 	call	0x228	; 0x228 <DispInit>
  XYString(7,1,"A");
 3fe:	48 e6       	ldi	r20, 0x68	; 104
 400:	50 e0       	ldi	r21, 0x00	; 0
 402:	61 e0       	ldi	r22, 0x01	; 1
 404:	87 e0       	ldi	r24, 0x07	; 7
 406:	0e 94 c8 00 	call	0x190	; 0x190 <XYString>
 40a:	ff cf       	rjmp	.-2      	; 0x40a <main+0x50>

0000040c <delay_us>:
#include<avr/delay.h>
#define FREQ 4            /*4MHZ*/

void delay_us(unsigned int us)
{
 40c:	9c 01       	movw	r18, r24
 40e:	e1 e0       	ldi	r30, 0x01	; 1
 410:	f0 e0       	ldi	r31, 0x00	; 0
 412:	05 c0       	rjmp	.+10     	; 0x41e <delay_us+0x12>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
 414:	cf 01       	movw	r24, r30
 416:	01 97       	sbiw	r24, 0x01	; 1
 418:	f1 f7       	brne	.-4      	; 0x416 <delay_us+0xa>
#define FREQ 4            /*4MHZ*/

void delay_us(unsigned int us)
{
  for(;us>0;us--)
 41a:	21 50       	subi	r18, 0x01	; 1
 41c:	30 40       	sbci	r19, 0x00	; 0
 41e:	21 15       	cp	r18, r1
 420:	31 05       	cpc	r19, r1
 422:	c1 f7       	brne	.-16     	; 0x414 <delay_us+0x8>
 424:	08 95       	ret

00000426 <__udivmodhi4>:
 426:	aa 1b       	sub	r26, r26
 428:	bb 1b       	sub	r27, r27
 42a:	51 e1       	ldi	r21, 0x11	; 17
 42c:	07 c0       	rjmp	.+14     	; 0x43c <__udivmodhi4_ep>

0000042e <__udivmodhi4_loop>:
 42e:	aa 1f       	adc	r26, r26
 430:	bb 1f       	adc	r27, r27
 432:	a6 17       	cp	r26, r22
 434:	b7 07       	cpc	r27, r23
 436:	10 f0       	brcs	.+4      	; 0x43c <__udivmodhi4_ep>
 438:	a6 1b       	sub	r26, r22
 43a:	b7 0b       	sbc	r27, r23

0000043c <__udivmodhi4_ep>:
 43c:	88 1f       	adc	r24, r24
 43e:	99 1f       	adc	r25, r25
 440:	5a 95       	dec	r21
 442:	a9 f7       	brne	.-22     	; 0x42e <__udivmodhi4_loop>
 444:	80 95       	com	r24
 446:	90 95       	com	r25
 448:	bc 01       	movw	r22, r24
 44a:	cd 01       	movw	r24, r26
 44c:	08 95       	ret

0000044e <_exit>:
 44e:	ff cf       	rjmp	.-2      	; 0x44e <_exit>

⌨️ 快捷键说明

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