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

📄 lcm1602.lst

📁 WINAVR编写的PS2键盘驱动
💻 LST
📖 第 1 页 / 共 5 页
字号:
 117:lcm1602.c     **** 	E_CLR;
 766               	.LM68:
 767 0394 9FE7      		ldi r25,lo8(127)
 768 0396 8091 3200 		lds r24,50
 769 039a 8923      		and r24,r25
 770 039c 8093 3200 		sts 50,r24
 771               	/* epilogue: frame size=2 */
 772 03a0 2296      		adiw r28,2
 773 03a2 0FB6      		in __tmp_reg__,__SREG__
 774 03a4 F894      		cli
 775 03a6 DEBF      		out __SP_H__,r29
 776 03a8 0FBE      		out __SREG__,__tmp_reg__
 777 03aa CDBF      		out __SP_L__,r28
 778 03ac DF91      		pop r29
 779 03ae CF91      		pop r28
 780 03b0 0895      		ret
 781               	/* epilogue end (size=9) */
 782               	/* function LCM1602WriteCommand size 50 (31) */
 784               	.Lscope2:
 787               	.global	LCM1602WriteData
 789               	LCM1602WriteData:
 118:lcm1602.c     **** }
 119:lcm1602.c     **** 
 120:lcm1602.c     **** //向1602写入数据
 121:lcm1602.c     **** void LCM1602WriteData(uchar dat)
 122:lcm1602.c     **** {
 791               	.LM69:
 792               	/* prologue: frame size=1 */
 793 03b2 CF93      		push r28
 794 03b4 DF93      		push r29
 795 03b6 CDB7      		in r28,__SP_L__
 796 03b8 DEB7      		in r29,__SP_H__
 797 03ba 2197      		sbiw r28,1
 798 03bc 0FB6      		in __tmp_reg__,__SREG__
 799 03be F894      		cli
 800 03c0 DEBF      		out __SP_H__,r29
 801 03c2 0FBE      		out __SREG__,__tmp_reg__
 802 03c4 CDBF      		out __SP_L__,r28
 803               	/* prologue end (size=10) */
 804 03c6 8983      		std Y+1,r24
 123:lcm1602.c     **** 	LCM1602BusyWait();
 806               	.LM70:
 807 03c8 0E94 0000 		call LCM1602BusyWait
 124:lcm1602.c     **** 	RS_SET;   
 809               	.LM71:
 810 03cc 8091 3200 		lds r24,50
 811 03d0 8061      		ori r24,lo8(16)
 812 03d2 8093 3200 		sts 50,r24
 125:lcm1602.c     **** 	RW_CLR;                             //当RS为高电平RW为低电平时可以写入数据
 814               	.LM72:
 815 03d6 8091 3200 		lds r24,50
 816 03da 8F7D      		andi r24,lo8(-33)
 817 03dc 8093 3200 		sts 50,r24
 126:lcm1602.c     **** 	DB_PORT=dat;
 819               	.LM73:
 820 03e0 8981      		ldd r24,Y+1
 821 03e2 8093 3800 		sts 56,r24
 127:lcm1602.c     **** 	E_SET;
 823               	.LM74:
 824 03e6 8091 3200 		lds r24,50
 825 03ea 8068      		ori r24,lo8(-128)
 826 03ec 8093 3200 		sts 50,r24
 128:lcm1602.c     **** 	E_CLR;
 828               	.LM75:
 829 03f0 9FE7      		ldi r25,lo8(127)
 830 03f2 8091 3200 		lds r24,50
 831 03f6 8923      		and r24,r25
 832 03f8 8093 3200 		sts 50,r24
 833               	/* epilogue: frame size=1 */
 834 03fc 2196      		adiw r28,1
 835 03fe 0FB6      		in __tmp_reg__,__SREG__
 836 0400 F894      		cli
 837 0402 DEBF      		out __SP_H__,r29
 838 0404 0FBE      		out __SREG__,__tmp_reg__
 839 0406 CDBF      		out __SP_L__,r28
 840 0408 DF91      		pop r29
 841 040a CF91      		pop r28
 842 040c 0895      		ret
 843               	/* epilogue end (size=9) */
 844               	/* function LCM1602WriteData size 46 (27) */
 846               	.Lscope3:
 850               	.global	LCD_set_xy
 852               	LCD_set_xy:
 129:lcm1602.c     **** }
 130:lcm1602.c     **** 
 131:lcm1602.c     **** 
 132:lcm1602.c     **** /*-----------------------------------------------------------------------
 133:lcm1602.c     **** LCD_set_xy        : 设置LCD显示的起始位置
 134:lcm1602.c     **** 输入参数x、y      : 显示字符串的位置,X:0-15,Y:0-1
 135:lcm1602.c     ****                     LCD第一行显示寄存器地址:0X80-0X8F
 136:lcm1602.c     ****                     LCD第一行显示寄存器地址:0XC0-0XCF
 137:lcm1602.c     **** -----------------------------------------------------------------------*/
 138:lcm1602.c     **** void LCD_set_xy(uchar x,uchar y ) 
 139:lcm1602.c     **** {
 854               	.LM76:
 855               	/* prologue: frame size=3 */
 856 040e CF93      		push r28
 857 0410 DF93      		push r29
 858 0412 CDB7      		in r28,__SP_L__
 859 0414 DEB7      		in r29,__SP_H__
 860 0416 2397      		sbiw r28,3
 861 0418 0FB6      		in __tmp_reg__,__SREG__
 862 041a F894      		cli
 863 041c DEBF      		out __SP_H__,r29
 864 041e 0FBE      		out __SREG__,__tmp_reg__
 865 0420 CDBF      		out __SP_L__,r28
 866               	/* prologue end (size=10) */
 867 0422 8983      		std Y+1,r24
 868 0424 6A83      		std Y+2,r22
 140:lcm1602.c     ****     uchar address;
 141:lcm1602.c     ****     if (y == 0) address = 0x80 + x;  //第一行
 870               	.LM77:
 871 0426 8A81      		ldd r24,Y+2
 872 0428 8823      		tst r24
 873 042a 29F4      		brne .L41
 875               	.LM78:
 876 042c 80E8      		ldi r24,lo8(-128)
 877 042e 9981      		ldd r25,Y+1
 878 0430 890F      		add r24,r25
 879 0432 8B83      		std Y+3,r24
 880 0434 04C0      		rjmp .L42
 881               	.L41:
 142:lcm1602.c     ****     else   address = 0xc0 + x;       //第二行
 883               	.LM79:
 884 0436 80EC      		ldi r24,lo8(-64)
 885 0438 9981      		ldd r25,Y+1
 886 043a 890F      		add r24,r25
 887 043c 8B83      		std Y+3,r24
 888               	.L42:
 143:lcm1602.c     ****     LCM1602WriteCommand(address,1);
 890               	.LM80:
 891 043e 61E0      		ldi r22,lo8(1)
 892 0440 8B81      		ldd r24,Y+3
 893 0442 0E94 0000 		call LCM1602WriteCommand
 894               	/* epilogue: frame size=3 */
 895 0446 2396      		adiw r28,3
 896 0448 0FB6      		in __tmp_reg__,__SREG__
 897 044a F894      		cli
 898 044c DEBF      		out __SP_H__,r29
 899 044e 0FBE      		out __SREG__,__tmp_reg__
 900 0450 CDBF      		out __SP_L__,r28
 901 0452 DF91      		pop r29
 902 0454 CF91      		pop r28
 903 0456 0895      		ret
 904               	/* epilogue end (size=9) */
 905               	/* function LCD_set_xy size 37 (18) */
 910               	.Lscope4:
 915               	.global	LCM1602Write_String
 917               	LCM1602Write_String:
 144:lcm1602.c     **** }
 145:lcm1602.c     **** 
 146:lcm1602.c     **** 
 147:lcm1602.c     **** //英文字符串显示函数
 148:lcm1602.c     **** void LCM1602Write_String(uchar x,uchar y,uchar *string)
 149:lcm1602.c     **** {
 919               	.LM81:
 920               	/* prologue: frame size=4 */
 921 0458 CF93      		push r28
 922 045a DF93      		push r29
 923 045c CDB7      		in r28,__SP_L__
 924 045e DEB7      		in r29,__SP_H__
 925 0460 2497      		sbiw r28,4
 926 0462 0FB6      		in __tmp_reg__,__SREG__
 927 0464 F894      		cli
 928 0466 DEBF      		out __SP_H__,r29
 929 0468 0FBE      		out __SREG__,__tmp_reg__
 930 046a CDBF      		out __SP_L__,r28
 931               	/* prologue end (size=10) */
 932 046c 8983      		std Y+1,r24
 933 046e 6A83      		std Y+2,r22
 934 0470 5C83      		std Y+4,r21
 935 0472 4B83      		std Y+3,r20
 150:lcm1602.c     **** 	if(x>=XSIZE||y>=YSIZE||string==NULL)return;
 937               	.LM82:
 938 0474 8981      		ldd r24,Y+1
 939 0476 8031      		cpi r24,lo8(16)
 940 0478 18F5      		brsh .L43
 942               	.LM83:
 943 047a 8A81      		ldd r24,Y+2
 944 047c 8230      		cpi r24,lo8(2)
 945 047e 00F5      		brsh .L43
 946 0480 8B81      		ldd r24,Y+3
 947 0482 9C81      		ldd r25,Y+4
 948 0484 0097      		sbiw r24,0
 949 0486 09F4      		brne .L44
 950 0488 1BC0      		rjmp .L43
 951               	.L44:
 151:lcm1602.c     **** 	LCD_set_xy(x, y);
 953               	.LM84:
 954 048a 6A81      		ldd r22,Y+2
 955 048c 8981      		ldd r24,Y+1
 956 048e 0E94 0000 		call LCD_set_xy
 957               	.L46:
 152:lcm1602.c     **** 	while(x<XSIZE&&*string>=0x20)
 959               	.LM85:
 960 0492 8981      		ldd r24,Y+1
 961 0494 8031      		cpi r24,lo8(16)
 962 0496 A0F4      		brsh .L43
 963 0498 EB81      		ldd r30,Y+3
 964 049a FC81      		ldd r31,Y+4
 965 049c 8081      		ld r24,Z
 966 049e 8032      		cpi r24,lo8(32)
 967 04a0 78F0      		brlo .L43
 153:lcm1602.c     **** 	{
 154:lcm1602.c     **** 	LCM1602WriteData(*string++);
 969               	.LM86:
 970 04a2 DE01      		movw r26,r28
 971 04a4 1396      		adiw r26,3
 972 04a6 ED91      		ld r30,X+
 973 04a8 FC91      		ld r31,X
 974 04aa 1197      		sbiw r26,1
 975 04ac 8081      		ld r24,Z
 976 04ae 3196      		adiw r30,1
 977 04b0 ED93      		st X+,r30
 978 04b2 FC93      		st X,r31
 979 04b4 0E94 0000 		call LCM1602WriteData
 155:lcm1602.c     **** 	x++;
 981               	.LM87:
 982 04b8 8981      		ldd r24,Y+1
 983 04ba 8F5F      		subi r24,lo8(-(1))
 984 04bc 8983      		std Y+1,r24
 985 04be E9CF      		rjmp .L46
 986               	.L43:
 987               	/* epilogue: frame size=4 */
 988 04c0 2496      		adiw r28,4
 989 04c2 0FB6      		in __tmp_reg__,__SREG__
 990 04c4 F894      		cli
 991 04c6 DEBF      		out __SP_H__,r29
 992 04c8 0FBE      		out __SREG__,__tmp_reg__
 993 04ca CDBF      		out __SP_L__,r28
 994 04cc DF91      		pop r29
 995 04ce CF91      		pop r28
 996 04d0 0895      		ret
 997               	/* epilogue end (size=9) */
 998               	/* function LCM1602Write_String size 61 (42) */
 1000               	.Lscope5:
 1003               	.global	LCM1602Write_number
 1005               	LCM1602Write_number:
 156:lcm1602.c     ****   }
 157:lcm1602.c     **** }
 158:lcm1602.c     **** 
 159:lcm1602.c     **** 
 160:lcm1602.c     **** //两位数字显示函数
 161:lcm1602.c     **** void LCM1602Write_number(uchar number)
 162:lcm1602.c     **** {
 1007               	.LM88:
 1008               	/* prologue: frame size=3 */
 1009 04d2 CF93      		push r28
 1010 04d4 DF93      		push r29
 1011 04d6 CDB7      		in r28,__SP_L__
 1012 04d8 DEB7      		in r29,__SP_H__
 1013 04da 2397      		sbiw r28,3
 1014 04dc 0FB6      		in __tmp_reg__,__SREG__
 1015 04de F894      		cli
 1016 04e0 DEBF      		out __SP_H__,r29
 1017 04e2 0FBE      		out __SREG__,__tmp_reg__
 1018 04e4 CDBF      		out __SP_L__,r28
 1019               	/* prologue end (size=10) */
 1020 04e6 8983      		std Y+1,r24
 163:lcm1602.c     **** 	uchar x,y;
 164:lcm1602.c     **** 	x=number/10;
 1022               	.LM89:
 1023 04e8 8981      		ldd r24,Y+1
 1024 04ea 9AE0      		ldi r25,lo8(10)
 1025 04ec 692F      		mov r22,r25
 1026 04ee 0E94 0000 		call __udivmodqi4
 1027 04f2 8A83      		std Y+2,r24
 165:lcm1602.c     **** 	y=number-10*x;
 1029               	.LM90:
 1030 04f4 9A81      		ldd r25,Y+2
 1031 04f6 8AE0      		ldi r24,lo8(10)
 1032 04f8 989F      		mul r25,r24
 1033 04fa C001      		movw r24,r0
 1034 04fc 1124      		clr r1
 1035 04fe 2981      		ldd r18,Y+1
 1036 0500 281B      		sub r18,r24
 1037 0502 822F      		mov r24,r18
 1038 0504 8B83      		std Y+3,r24
 166:lcm1602.c     **** 	LCM1602WriteData(x+0x30);
 1040               	.LM91:
 1041 0506 8A81      		ldd r24,Y+2
 1042 0508 805D      		subi r24,lo8(-(48))
 1043 050a 0E94 0000 		call LCM1602WriteData
 167:lcm1602.c     **** 	LCM1602WriteData(y+0x30);
 1045               	.LM92:
 1046 050e 8B81      		ldd r24,Y+3
 1047 0510 805D      		subi r24,lo8(-(48))
 1048 0512 0E94 0000 		call LCM1602WriteData
 1049               	/* epilogue: frame size=3 */
 1050 0516 2396      		adiw r28,3
 1051 0518 0FB6      		in __tmp_reg__,__SREG__
 1052 051a F894      		cli
 1053 051c DEBF      		out __SP_H__,r29

⌨️ 快捷键说明

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