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

📄 ps2_lcm1602.lss

📁 WINAVR编写的PS2键盘驱动
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     650:	89 83       	std	Y+1, r24	; 0x01
     652:	9a 83       	std	Y+2, r25	; 0x02
     654:	ab 83       	std	Y+3, r26	; 0x03
     656:	bc 83       	std	Y+4, r27	; 0x04
	if (__tmp < 1.0)
     658:	20 e0       	ldi	r18, 0x00	; 0
     65a:	30 e0       	ldi	r19, 0x00	; 0
     65c:	40 e8       	ldi	r20, 0x80	; 128
     65e:	5f e3       	ldi	r21, 0x3F	; 63
     660:	69 81       	ldd	r22, Y+1	; 0x01
     662:	7a 81       	ldd	r23, Y+2	; 0x02
     664:	8b 81       	ldd	r24, Y+3	; 0x03
     666:	9c 81       	ldd	r25, Y+4	; 0x04
     668:	0e 94 f9 07 	call	0xff2 <__eqsf2>
     66c:	88 23       	and	r24, r24
     66e:	0c f0       	brlt	.+2      	; 0x672 <LCM1602Init+0x12a>
     670:	05 c0       	rjmp	.+10     	; 0x67c <LCM1602Init+0x134>
		__ticks = 1;
     672:	81 e0       	ldi	r24, 0x01	; 1
     674:	90 e0       	ldi	r25, 0x00	; 0
     676:	9c 87       	std	Y+12, r25	; 0x0c
     678:	8b 87       	std	Y+11, r24	; 0x0b
     67a:	1a c0       	rjmp	.+52     	; 0x6b0 <LCM1602Init+0x168>
	else if (__tmp > 65535)
     67c:	20 e0       	ldi	r18, 0x00	; 0
     67e:	3f ef       	ldi	r19, 0xFF	; 255
     680:	4f e7       	ldi	r20, 0x7F	; 127
     682:	57 e4       	ldi	r21, 0x47	; 71
     684:	69 81       	ldd	r22, Y+1	; 0x01
     686:	7a 81       	ldd	r23, Y+2	; 0x02
     688:	8b 81       	ldd	r24, Y+3	; 0x03
     68a:	9c 81       	ldd	r25, Y+4	; 0x04
     68c:	0e 94 fc 07 	call	0xff8 <__gesf2>
     690:	18 16       	cp	r1, r24
     692:	0c f0       	brlt	.+2      	; 0x696 <LCM1602Init+0x14e>
     694:	03 c0       	rjmp	.+6      	; 0x69c <LCM1602Init+0x154>
		__ticks = 0;	/* i.e. 65536 */
     696:	1c 86       	std	Y+12, r1	; 0x0c
     698:	1b 86       	std	Y+11, r1	; 0x0b
     69a:	0a c0       	rjmp	.+20     	; 0x6b0 <LCM1602Init+0x168>
	else
		__ticks = (uint16_t)__tmp;
     69c:	69 81       	ldd	r22, Y+1	; 0x01
     69e:	7a 81       	ldd	r23, Y+2	; 0x02
     6a0:	8b 81       	ldd	r24, Y+3	; 0x03
     6a2:	9c 81       	ldd	r25, Y+4	; 0x04
     6a4:	0e 94 de 07 	call	0xfbc <__fixsfsi>
     6a8:	dc 01       	movw	r26, r24
     6aa:	cb 01       	movw	r24, r22
     6ac:	9c 87       	std	Y+12, r25	; 0x0c
     6ae:	8b 87       	std	Y+11, r24	; 0x0b
     6b0:	8b 85       	ldd	r24, Y+11	; 0x0b
     6b2:	9c 85       	ldd	r25, Y+12	; 0x0c
     6b4:	9e 83       	std	Y+6, r25	; 0x06
     6b6:	8d 83       	std	Y+5, r24	; 0x05
     6b8:	8d 81       	ldd	r24, Y+5	; 0x05
     6ba:	9e 81       	ldd	r25, Y+6	; 0x06
     6bc:	01 97       	sbiw	r24, 0x01	; 1
     6be:	f1 f7       	brne	.-4      	; 0x6bc <LCM1602Init+0x174>
     6c0:	9e 83       	std	Y+6, r25	; 0x06
     6c2:	8d 83       	std	Y+5, r24	; 0x05
	_delay_ms(5);
	LCM1602WriteCommand(0x38,0);
     6c4:	60 e0       	ldi	r22, 0x00	; 0
     6c6:	88 e3       	ldi	r24, 0x38	; 56
     6c8:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
     6cc:	80 e0       	ldi	r24, 0x00	; 0
     6ce:	90 e0       	ldi	r25, 0x00	; 0
     6d0:	a0 ea       	ldi	r26, 0xA0	; 160
     6d2:	b0 e4       	ldi	r27, 0x40	; 64
     6d4:	8f 83       	std	Y+7, r24	; 0x07
     6d6:	98 87       	std	Y+8, r25	; 0x08
     6d8:	a9 87       	std	Y+9, r26	; 0x09
     6da:	ba 87       	std	Y+10, r27	; 0x0a
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
     6dc:	26 e6       	ldi	r18, 0x66	; 102
     6de:	36 e6       	ldi	r19, 0x66	; 102
     6e0:	46 ee       	ldi	r20, 0xE6	; 230
     6e2:	54 e4       	ldi	r21, 0x44	; 68
     6e4:	6f 81       	ldd	r22, Y+7	; 0x07
     6e6:	78 85       	ldd	r23, Y+8	; 0x08
     6e8:	89 85       	ldd	r24, Y+9	; 0x09
     6ea:	9a 85       	ldd	r25, Y+10	; 0x0a
     6ec:	0e 94 49 08 	call	0x1092 <__mulsf3>
     6f0:	dc 01       	movw	r26, r24
     6f2:	cb 01       	movw	r24, r22
     6f4:	89 83       	std	Y+1, r24	; 0x01
     6f6:	9a 83       	std	Y+2, r25	; 0x02
     6f8:	ab 83       	std	Y+3, r26	; 0x03
     6fa:	bc 83       	std	Y+4, r27	; 0x04
	if (__tmp < 1.0)
     6fc:	20 e0       	ldi	r18, 0x00	; 0
     6fe:	30 e0       	ldi	r19, 0x00	; 0
     700:	40 e8       	ldi	r20, 0x80	; 128
     702:	5f e3       	ldi	r21, 0x3F	; 63
     704:	69 81       	ldd	r22, Y+1	; 0x01
     706:	7a 81       	ldd	r23, Y+2	; 0x02
     708:	8b 81       	ldd	r24, Y+3	; 0x03
     70a:	9c 81       	ldd	r25, Y+4	; 0x04
     70c:	0e 94 f9 07 	call	0xff2 <__eqsf2>
     710:	88 23       	and	r24, r24
     712:	0c f0       	brlt	.+2      	; 0x716 <LCM1602Init+0x1ce>
     714:	05 c0       	rjmp	.+10     	; 0x720 <LCM1602Init+0x1d8>
		__ticks = 1;
     716:	81 e0       	ldi	r24, 0x01	; 1
     718:	90 e0       	ldi	r25, 0x00	; 0
     71a:	9c 87       	std	Y+12, r25	; 0x0c
     71c:	8b 87       	std	Y+11, r24	; 0x0b
     71e:	1a c0       	rjmp	.+52     	; 0x754 <LCM1602Init+0x20c>
	else if (__tmp > 65535)
     720:	20 e0       	ldi	r18, 0x00	; 0
     722:	3f ef       	ldi	r19, 0xFF	; 255
     724:	4f e7       	ldi	r20, 0x7F	; 127
     726:	57 e4       	ldi	r21, 0x47	; 71
     728:	69 81       	ldd	r22, Y+1	; 0x01
     72a:	7a 81       	ldd	r23, Y+2	; 0x02
     72c:	8b 81       	ldd	r24, Y+3	; 0x03
     72e:	9c 81       	ldd	r25, Y+4	; 0x04
     730:	0e 94 fc 07 	call	0xff8 <__gesf2>
     734:	18 16       	cp	r1, r24
     736:	0c f0       	brlt	.+2      	; 0x73a <LCM1602Init+0x1f2>
     738:	03 c0       	rjmp	.+6      	; 0x740 <LCM1602Init+0x1f8>
		__ticks = 0;	/* i.e. 65536 */
     73a:	1c 86       	std	Y+12, r1	; 0x0c
     73c:	1b 86       	std	Y+11, r1	; 0x0b
     73e:	0a c0       	rjmp	.+20     	; 0x754 <LCM1602Init+0x20c>
	else
		__ticks = (uint16_t)__tmp;
     740:	69 81       	ldd	r22, Y+1	; 0x01
     742:	7a 81       	ldd	r23, Y+2	; 0x02
     744:	8b 81       	ldd	r24, Y+3	; 0x03
     746:	9c 81       	ldd	r25, Y+4	; 0x04
     748:	0e 94 de 07 	call	0xfbc <__fixsfsi>
     74c:	dc 01       	movw	r26, r24
     74e:	cb 01       	movw	r24, r22
     750:	9c 87       	std	Y+12, r25	; 0x0c
     752:	8b 87       	std	Y+11, r24	; 0x0b
     754:	8b 85       	ldd	r24, Y+11	; 0x0b
     756:	9c 85       	ldd	r25, Y+12	; 0x0c
     758:	9e 83       	std	Y+6, r25	; 0x06
     75a:	8d 83       	std	Y+5, r24	; 0x05
     75c:	8d 81       	ldd	r24, Y+5	; 0x05
     75e:	9e 81       	ldd	r25, Y+6	; 0x06
     760:	01 97       	sbiw	r24, 0x01	; 1
     762:	f1 f7       	brne	.-4      	; 0x760 <LCM1602Init+0x218>
     764:	9e 83       	std	Y+6, r25	; 0x06
     766:	8d 83       	std	Y+5, r24	; 0x05
	_delay_ms(5);
	LCM1602WriteCommand(0x38,0);
     768:	60 e0       	ldi	r22, 0x00	; 0
     76a:	88 e3       	ldi	r24, 0x38	; 56
     76c:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
     770:	80 e0       	ldi	r24, 0x00	; 0
     772:	90 e0       	ldi	r25, 0x00	; 0
     774:	a0 ea       	ldi	r26, 0xA0	; 160
     776:	b0 e4       	ldi	r27, 0x40	; 64
     778:	8f 83       	std	Y+7, r24	; 0x07
     77a:	98 87       	std	Y+8, r25	; 0x08
     77c:	a9 87       	std	Y+9, r26	; 0x09
     77e:	ba 87       	std	Y+10, r27	; 0x0a
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
     780:	26 e6       	ldi	r18, 0x66	; 102
     782:	36 e6       	ldi	r19, 0x66	; 102
     784:	46 ee       	ldi	r20, 0xE6	; 230
     786:	54 e4       	ldi	r21, 0x44	; 68
     788:	6f 81       	ldd	r22, Y+7	; 0x07
     78a:	78 85       	ldd	r23, Y+8	; 0x08
     78c:	89 85       	ldd	r24, Y+9	; 0x09
     78e:	9a 85       	ldd	r25, Y+10	; 0x0a
     790:	0e 94 49 08 	call	0x1092 <__mulsf3>
     794:	dc 01       	movw	r26, r24
     796:	cb 01       	movw	r24, r22
     798:	89 83       	std	Y+1, r24	; 0x01
     79a:	9a 83       	std	Y+2, r25	; 0x02
     79c:	ab 83       	std	Y+3, r26	; 0x03
     79e:	bc 83       	std	Y+4, r27	; 0x04
	if (__tmp < 1.0)
     7a0:	20 e0       	ldi	r18, 0x00	; 0
     7a2:	30 e0       	ldi	r19, 0x00	; 0
     7a4:	40 e8       	ldi	r20, 0x80	; 128
     7a6:	5f e3       	ldi	r21, 0x3F	; 63
     7a8:	69 81       	ldd	r22, Y+1	; 0x01
     7aa:	7a 81       	ldd	r23, Y+2	; 0x02
     7ac:	8b 81       	ldd	r24, Y+3	; 0x03
     7ae:	9c 81       	ldd	r25, Y+4	; 0x04
     7b0:	0e 94 f9 07 	call	0xff2 <__eqsf2>
     7b4:	88 23       	and	r24, r24
     7b6:	0c f0       	brlt	.+2      	; 0x7ba <LCM1602Init+0x272>
     7b8:	05 c0       	rjmp	.+10     	; 0x7c4 <LCM1602Init+0x27c>
		__ticks = 1;
     7ba:	81 e0       	ldi	r24, 0x01	; 1
     7bc:	90 e0       	ldi	r25, 0x00	; 0
     7be:	9c 87       	std	Y+12, r25	; 0x0c
     7c0:	8b 87       	std	Y+11, r24	; 0x0b
     7c2:	1a c0       	rjmp	.+52     	; 0x7f8 <LCM1602Init+0x2b0>
	else if (__tmp > 65535)
     7c4:	20 e0       	ldi	r18, 0x00	; 0
     7c6:	3f ef       	ldi	r19, 0xFF	; 255
     7c8:	4f e7       	ldi	r20, 0x7F	; 127
     7ca:	57 e4       	ldi	r21, 0x47	; 71
     7cc:	69 81       	ldd	r22, Y+1	; 0x01
     7ce:	7a 81       	ldd	r23, Y+2	; 0x02
     7d0:	8b 81       	ldd	r24, Y+3	; 0x03
     7d2:	9c 81       	ldd	r25, Y+4	; 0x04
     7d4:	0e 94 fc 07 	call	0xff8 <__gesf2>
     7d8:	18 16       	cp	r1, r24
     7da:	0c f0       	brlt	.+2      	; 0x7de <LCM1602Init+0x296>
     7dc:	03 c0       	rjmp	.+6      	; 0x7e4 <LCM1602Init+0x29c>
		__ticks = 0;	/* i.e. 65536 */
     7de:	1c 86       	std	Y+12, r1	; 0x0c
     7e0:	1b 86       	std	Y+11, r1	; 0x0b
     7e2:	0a c0       	rjmp	.+20     	; 0x7f8 <LCM1602Init+0x2b0>
	else
		__ticks = (uint16_t)__tmp;
     7e4:	69 81       	ldd	r22, Y+1	; 0x01
     7e6:	7a 81       	ldd	r23, Y+2	; 0x02
     7e8:	8b 81       	ldd	r24, Y+3	; 0x03
     7ea:	9c 81       	ldd	r25, Y+4	; 0x04
     7ec:	0e 94 de 07 	call	0xfbc <__fixsfsi>
     7f0:	dc 01       	movw	r26, r24
     7f2:	cb 01       	movw	r24, r22
     7f4:	9c 87       	std	Y+12, r25	; 0x0c
     7f6:	8b 87       	std	Y+11, r24	; 0x0b
     7f8:	8b 85       	ldd	r24, Y+11	; 0x0b
     7fa:	9c 85       	ldd	r25, Y+12	; 0x0c
     7fc:	9e 83       	std	Y+6, r25	; 0x06
     7fe:	8d 83       	std	Y+5, r24	; 0x05
     800:	8d 81       	ldd	r24, Y+5	; 0x05
     802:	9e 81       	ldd	r25, Y+6	; 0x06
     804:	01 97       	sbiw	r24, 0x01	; 1
     806:	f1 f7       	brne	.-4      	; 0x804 <LCM1602Init+0x2bc>
     808:	9e 83       	std	Y+6, r25	; 0x06
     80a:	8d 83       	std	Y+5, r24	; 0x05
	_delay_ms(5);
	LCM1602WriteCommand(0x38,1);         //以后的显示都要检查忙
     80c:	61 e0       	ldi	r22, 0x01	; 1
     80e:	88 e3       	ldi	r24, 0x38	; 56
     810:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
	LCM1602WriteCommand(0x08,1);         //关闭显示
     814:	61 e0       	ldi	r22, 0x01	; 1
     816:	88 e0       	ldi	r24, 0x08	; 8
     818:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
	LCM1602WriteCommand(0x01,1);         //显示清屏
     81c:	61 e0       	ldi	r22, 0x01	; 1
     81e:	81 e0       	ldi	r24, 0x01	; 1
     820:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
	LCM1602WriteCommand(0x06,1);         //写指令06H,文字不动,光标自动右移
     824:	61 e0       	ldi	r22, 0x01	; 1
     826:	86 e0       	ldi	r24, 0x06	; 6
     828:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
	LCM1602WriteCommand(0x0d,1);         //写指令0CH,显示ON,光标OFF,闪烁ON
     82c:	61 e0       	ldi	r22, 0x01	; 1
     82e:	8d e0       	ldi	r24, 0x0D	; 13
     830:	0e 94 4b 04 	call	0x896 <LCM1602WriteCommand>
     834:	2c 96       	adiw	r28, 0x0c	; 12
     836:	0f b6       	in	r0, 0x3f	; 63
     838:	f8 94       	cli
     83a:	de bf       	out	0x3e, r29	; 62
     83c:	0f be       	out	0x3f, r0	; 63
     83e:	cd bf       	out	0x3d, r28	; 61
     840:	df 91       	pop	r29
     842:	cf 91       	pop	r28
     844:	08 95       	ret

00000846 <LCM1602BusyWait>:
}


//1602总线忙等待
void LCM1602BusyWait(void)
{
     846:	cf 93       	push	r28
     848:	df 93       	push	r29
     84a:	cd b7       	in	r28, 0x3d	; 61
     84c:	de b7       	in	r29, 0x3e	; 62
	DB_IN;                              //PB定义为输入,读引脚信号
     84e:	10 92 37 00 	sts	0x0037, r1
	RS_CLR;
     852:	80 91 32 00 	lds	r24, 0x0032
     856:	8f 7e       	andi	r24, 0xEF	; 239
     858:	80 93 32 00 	sts	0x0032, r24
	RW_SET;                             //当RS为低电平RW为高电平时可以读忙信号
     85c:	80 91 32 00 	lds	r24, 0x0032
     860:	80 62       	ori	r24, 0x20	; 32
     862:	80 93 32 00 	sts	0x0032, r24
	E_SET;
     866:	80 91 32 00 	lds	r24, 0x0032
     86a:	80 68       	ori	r24, 0x80	; 128
     86c:	80 93 32 00 	sts	0x0032, r24
	asm("nop\n nop");                  //延时两个nop时间
     870:	00 00       	nop
     872:	00 00       	nop
	while(DB_READ&0x80);              //直到忙信号结束,1602可再次写入信号
     874:	80 91 36 00 	lds	r24, 0x0036
     878:	88 23       	and	r24, r24
     87a:	0c f4       	brge	.+2      	; 0x87e <LCM1602BusyWait+0x38>
     87c:	fb cf       	rjmp	.-10     	; 0x874 <LCM1602BusyWait+0x2e>
	DB_OUT;
     87e:	8f ef       	ldi	r24, 0xFF	; 255
     880:	80 93 37 00 	sts	0x0037, r24
	E_CLR;
     884:	9f e7       	ldi	r25, 0x7F	; 127
     886:	80 91 32 00 	lds	r24, 0x0032
     88a:	89 23       	and	r24, r25
     88c:	80 93 32 00 	sts	0x0032, r24
     890:	df 91       	pop	r29
     892:	cf 91       	pop	r28
     894:	08 95       	ret

00000896 <LCM1602WriteCommand>:
}


//向1602写入命令
void LCM1602WriteCommand(uchar com,uchar Busy)//Busy为0时忽略忙检测,为1时检查
{
     896:	cf 93       	push	r28
     898:	df 93       	push	r29
     89a:	cd b7       	in	r28, 0x3d	; 61
     89c:	de b7       	in	r29, 0x3e	; 62
     89e:	22 97       	sbiw	r28, 0x02	; 2
     8a0:	0f b6       	in	r0, 0x3f	; 63

⌨️ 快捷键说明

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