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

📄 lcd.s

📁 AVR单片机C语言程序设计实例精粹
💻 S
📖 第 1 页 / 共 5 页
字号:
; 				LCD_Write_Char(2,1,eChar_20);//清除光标
	ldi R24,<_eChar_20
	ldi R25,>_eChar_20
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,2
	xcall _LCD_Write_Char
	.dbline 678
; 			}
L120:
	.dbline 679
; 		}
L118:
	.dbline 680
; 		if(wLCD_Event & (1 << eLCDKeyDown))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,3
	rjmp L122
	.dbline 681
; 		{
	.dbline 682
; 			if(bIndex == 0)
	lds R2,L98
	tst R2
	brne L124
	.dbline 683
; 			{
	.dbline 684
; 				bIndex = 1;
	ldi R24,1
	sts L98,R24
	.dbline 685
; 				LCD_Write_Char(1,1,eChar_20);//清除光标
	ldi R24,<_eChar_20
	ldi R25,>_eChar_20
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,1
	xcall _LCD_Write_Char
	.dbline 686
; 				LCD_Write_Char(2,1,eChar_10);//显示光标
	ldi R24,<_eChar_10
	ldi R25,>_eChar_10
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,2
	xcall _LCD_Write_Char
	.dbline 687
; 			}
L124:
	.dbline 688
; 		}
L122:
	.dbline 689
L102:
	.dbline 636
	xjmp L101
X8:
	.dbline -2
	.dbline 690
; 	}
; }
L97:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Window2_Process _LCD_Window2_Process fV
	.even
_LCD_Window2_Process::
	.dbline -1
	.dbline 699
; 
; //******************************************************************************
; // Function    : LCD_Window2_Process
; // Input       : none
; // Output      : none
; // Description : Window Process for Test Selection
; //******************************************************************************
; void LCD_Window2_Process(void)
; {
	.dbline 700
; 	if(bWindowIndexPre != bWindowIndex)
	lds R2,_bWindowIndex
	lds R3,_bWindowIndexPre
	cp R3,R2
	brne X12
	xjmp L130
X12:
	.dbline 701
; 	{
	.dbline 702
; 		Win_Show_Screen(Frame2);
	ldi R16,<_Frame2
	ldi R17,>_Frame2
	xcall _Win_Show_Screen
	.dbline 703
; 		LCD_Show_Time();
	xcall _LCD_Show_Time
	.dbline 704
; 	}
	xjmp L130
L129:
	.dbline 706
; 	while(1)
; 	{
	.dbline 707
; 		if(OS_Task_Switch(cPrioLCD) == true)
	clr R16
	xcall _OS_Task_Switch
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	brne L132
	.dbline 708
; 		{
	.dbline 709
; 			return;
	xjmp L126
L132:
	.dbline 711
; 		}
; 		wLCD_Event = OS_Event_Pend(cPrioLCD);
	clr R16
	xcall _OS_Event_Pend
	sts _wLCD_Event+1,R17
	sts _wLCD_Event,R16
	.dbline 712
; 		if(wLCD_Event == 0)
	cpi R16,0
	cpc R16,R17
	brne L134
X10:
	.dbline 713
; 		{
	.dbline 714
; 			return;
	xjmp L126
L134:
	.dbline 716
; 		}
; 		if(wLCD_Event & (1 << eLCDTimer))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,0
	rjmp L136
	.dbline 717
; 		{
	.dbline 718
; 			bWindowIndexPre = bWindowIndex;
	lds R2,_bWindowIndex
	sts _bWindowIndexPre,R2
	.dbline 719
; 			LCD_Show_Time();
	xcall _LCD_Show_Time
	.dbline 720
; 		}
L136:
	.dbline 721
; 		if(wLCD_Event & (1 << eLCDKeyEnter))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,4
	rjmp L138
	.dbline 722
; 		{
	.dbline 723
; 			bWindowIndex = 1; //Selection Window
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 724
; 			return;
	xjmp L126
L138:
	.dbline 726
; 		}
; 		if(wLCD_Event & (1 << eLCDKeyEsc))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,1
	rjmp L140
	.dbline 727
; 		{
	.dbline 728
; 			bWindowIndex = 1; //Selection Window
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 729
; 			return;
	xjmp L126
L140:
	.dbline 731
; 		}
; 		if(wLCD_Event & (1 << eLCDKeyUp))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,2
	rjmp L142
	.dbline 732
; 		{
	.dbline 733
; 			bWindowIndex = 1; //Selection Window
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 734
; 			return;
	xjmp L126
L142:
	.dbline 736
; 		}
; 		if(wLCD_Event & (1 << eLCDKeyDown))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,3
	rjmp L144
	.dbline 737
; 		{
	.dbline 738
; 			bWindowIndex = 1; //Selection Window
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 739
; 			return;
	xjmp L126
L144:
	.dbline 741
L130:
	.dbline 705
	xjmp L129
X11:
	.dbline -2
	.dbline 742
; 		}
; 	}
; }
L126:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
L147:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
	.area text(rom, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
	.dbfunc e LCD_Window3_Process _LCD_Window3_Process fV
	.dbsym s bCount L147 c
	.even
_LCD_Window3_Process::
	.dbline -1
	.dbline 751
; 
; //******************************************************************************
; // Function    : LCD_Window3_Process
; // Input       : none
; // Output      : none
; // Description : Window Process for LED Test
; //******************************************************************************
; void LCD_Window3_Process(void)
; {
	.dbline 753
; 	static INT8U bCount = 0;
; 	if(bWindowIndexPre != bWindowIndex)
	lds R2,_bWindowIndex
	lds R3,_bWindowIndexPre
	cp R3,R2
	brne X15
	xjmp L151
X15:
	.dbline 754
; 	{
	.dbline 755
; 		Win_Show_Screen(Frame3);
	ldi R16,<_Frame3
	ldi R17,>_Frame3
	xcall _Win_Show_Screen
	.dbline 756
; 	}
	xjmp L151
L150:
	.dbline 758
; 	while(1)
; 	{
	.dbline 759
; 		if(OS_Task_Switch(cPrioLCD) == true)
	clr R16
	xcall _OS_Task_Switch
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	brne L153
	.dbline 760
; 		{
	.dbline 761
; 			return;
	xjmp L146
L153:
	.dbline 763
; 		}
; 		wLCD_Event = OS_Event_Pend(cPrioLCD);
	clr R16
	xcall _OS_Event_Pend
	sts _wLCD_Event+1,R17
	sts _wLCD_Event,R16
	.dbline 764
; 		if(wLCD_Event == 0)
	cpi R16,0
	cpc R16,R17
	brne L155
X13:
	.dbline 765
; 		{
	.dbline 766
; 			return;
	xjmp L146
L155:
	.dbline 768
; 		}
; 		if(wLCD_Event & (1 << eLCDTimer))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,0
	rjmp L157
	.dbline 769
; 		{
	.dbline 770
; 			bWindowIndexPre = bWindowIndex;
	lds R2,_bWindowIndex
	sts _bWindowIndexPre,R2
	.dbline 771
; 			if(sbGet_LED_Test() == true)
	xcall _sbGet_LED_Test
	cpi R16,1
	brne L159
	.dbline 772
; 			{
	.dbline 773
; 				if(bCount == 0)
	lds R2,L147
	tst R2
	brne L161
	.dbline 774
; 				{
	.dbline 775
; 					LED_ON_ALL();
	xcall _LED_ON_ALL
	.dbline 776
; 					bCount = 1;
	ldi R24,1
	sts L147,R24
	.dbline 777
; 				}
	xjmp L162
L161:
	.dbline 779
; 				else
; 				{
	.dbline 780
; 					LED_OFF_ALL();
	xcall _LED_OFF_ALL
	.dbline 781
; 					bCount = 0;
	clr R2
	sts L147,R2
	.dbline 782
; 				}
L162:
	.dbline 783
; 			}
L159:
	.dbline 784
; 		}
L157:
	.dbline 785
; 		if(wLCD_Event & (1 << eLCDKeyEnter))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,4
	rjmp L163
	.dbline 786
; 		{
	.dbline 787
; 			if(sbGet_LED_Test() == false)
	xcall _sbGet_LED_Test
	tst R16
	brne L165
	.dbline 788
; 			{
	.dbline 789
; 				sSet_LED_Test(true);
	ldi R16,1
	xcall _sSet_LED_Test
	.dbline 790
; 			}
L165:
	.dbline 791
; 		}
L163:
	.dbline 792
; 		if(wLCD_Event & (1 << eLCDKeyEsc))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,1
	rjmp L167
	.dbline 793
; 		{
	.dbline 794
; 			sSet_LED_Test(false);
	clr R16
	xcall _sSet_LED_Test
	.dbline 795
; 			LED_OFF_ALL();
	xcall _LED_OFF_ALL
	.dbline 796
; 			bWindowIndex = 1; //选择界面
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 797
; 			return;
	xjmp L146
L167:
	.dbline 799
L151:
	.dbline 757
	xjmp L150
X14:
	.dbline -2
	.dbline 800
; 		}
; 	}
; }
L146:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
L170:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
	.area text(rom, con, rel)
	.dbfile E:\Steaven2000\AVR\AVR_Book\PROGRA~1\SOURCE~1\Code\LCD菜单系统设计\LCD.c
	.dbfunc e LCD_Window4_Process _LCD_Window4_Process fV
	.dbsym s bCount L170 c
	.even
_LCD_Window4_Process::
	.dbline -1
	.dbline 809
; 
; //******************************************************************************
; // Function    : LCD_Window4_Process
; // Input       : none
; // Output      : none
; // Description : Window Process for Buzzer Test
; //******************************************************************************
; void LCD_Window4_Process(void)
; {
	.dbline 811
; 	static INT8U bCount = 0;
; 	if(bWindowIndexPre != bWindowIndex)
	lds R2,_bWindowIndex
	lds R3,_bWindowIndexPre
	cp R3,R2
	brne X18
	xjmp L174
X18:
	.dbline 812
; 	{
	.dbline 813
; 		Win_Show_Screen(Frame4);
	ldi R16,<_Frame4
	ldi R17,>_Frame4
	xcall _Win_Show_Screen
	.dbline 814
; 	}
	xjmp L174
L173:
	.dbline 816
; 	while(1)
; 	{
	.dbline 817
; 		if(OS_Task_Switch(cPrioLCD) == true)
	clr R16
	xcall _OS_Task_Switch
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	brne L176
	.dbline 818
; 		{
	.dbline 819
; 			return;
	xjmp L169
L176:
	.dbline 821
; 		}
; 		wLCD_Event = OS_Event_Pend(cPrioLCD);
	clr R16
	xcall _OS_Event_Pend
	sts _wLCD_Event+1,R17
	sts _wLCD_Event,R16
	.dbline 822
; 		if(wLCD_Event == 0)
	cpi R16,0
	cpc R16,R17
	brne L178
X16:
	.dbline 823
; 		{
	.dbline 824
; 			return;
	xjmp L169
L178:
	.dbline 826
; 		}
; 		if(wLCD_Event & (1 << eLCDTimer))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,0
	rjmp L180
	.dbline 827
; 		{
	.dbline 828
; 			bWindowIndexPre = bWindowIndex;
	lds R2,_bWindowIndex
	sts _bWindowIndexPre,R2
	.dbline 829
; 			if(sbGet_Buzzer_Test() == true)
	xcall _sbGet_Buzzer_Test
	cpi R16,1
	brne L182
	.dbline 830
; 			{
	.dbline 831
; 				if(bCount == 0)
	lds R2,L170
	tst R2
	brne L184
	.dbline 832
; 				{
	.dbline 833
; 					BUZZER_ON();
	xcall _BUZZER_ON
	.dbline 834
; 					bCount = 1;
	ldi R24,1
	sts L170,R24
	.dbline 835
; 				}
	xjmp L185
L184:
	.dbline 837
; 				else
; 				{
	.dbline 838
; 					BUZZER_OFF();
	xcall _BUZZER_OFF
	.dbline 839
; 					bCount = 0;
	clr R2
	sts L170,R2
	.dbline 840
; 				}
L185:
	.dbline 841
; 			}
L182:
	.dbline 842
; 		}
L180:
	.dbline 843
; 		if(wLCD_Event & (1 << eLCDKeyEnter))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,4
	rjmp L186
	.dbline 844
; 		{
	.dbline 845
; 			if(sbGet_Buzzer_Test() == false)
	xcall _sbGet_Buzzer_Test
	tst R16
	brne L188
	.dbline 846
; 			{
	.dbline 847
; 				sSet_Buzzer_Test(true);
	ldi R16,1
	xcall _sSet_Buzzer_Test
	.dbline 848
; 			}
L188:
	.dbline 849
; 		}
L186:
	.dbline 850
; 		if(wLCD_Event & (1 << eLCDKeyEsc))
	lds R2,_wLCD_Event
	lds R3,_wLCD_Event+1
	sbrs R2,1
	rjmp L190
	.dbline 851
; 		{
	.dbline 852
; 			sSet_Buzzer_Test(false);
	clr R16
	xcall _sSet_Buzzer_Test
	.dbline 853
; 			BUZZER_OFF();
	xcall _BUZZER_OFF
	.dbline 854
; 			bWindowIndex = 1; //选择界面
	ldi R24,1
	sts _bWindowIndex,R24
	.dbline 855
; 			return;
	xjmp L169
L190:
	.dbline 857
L174:
	.dbline 815
	xjmp L173
X17:
	.dbline -2
	.dbline 858
; 		}
; 	}
; }
L169:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_Show_String _LCD_Show_String fV
;      wPointerX -> R20
;        wStrPtr -> R22,R23
;      wPointerY -> R10
;          wTemp -> R12,R13
;         invert -> y+14
;         string -> R14,R15
;              Y -> R22
;              X -> R10
	.even
_LCD_Show_String::
	xcall push_gset5
	mov R22,R18
	mov R10,R16
	sbiw R28,2
	ldd R14,y+12
	ldd R15,y+13
	.dbline -1
	.dbline 868
; 
; //******************************************************************************
; // Function    : LCD_Show_String
; // Input       : x-line,0~3,y-char colum,0~15 
; //               string-pointer to string,invert-not use
; // Output      : none
; // Description : Display a string on one line
; //******************************************************************************
; void LCD_Show_String(INT8U X,INT8U Y,INT8U *string,INT8U invert)
; {
	.dbline 873
; 	INT16U wTemp;
; 	const INT8U  *wStrPtr;
; 	INT8U  wPointerX;
; 	INT8U  wPointerY;
; 	wPointerX = X;
	mov R20,R10
	.dbline 874
; 	wPointerY = Y;
	mov R10,R22
	xjmp L194
L193:
	.dbline 876
; 	while(*string != '\0')
; 	{
	.dbline 877
; 		wTemp = *string++;
	movw R30,R14
	ld R12,Z+
	movw R14,R30
	clr R13
	.dbline 878
; 		if(wTemp < 0x0080)
	movw R24,R12
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	brsh L196
	.dbline 879
; 		{
	.dbline 880
; 			wStrPtr = FindStringIndexFromCode(wTemp);
	movw R16,R24
	xcall _FindStringIndexFromCode
	movw R22,R16
	.dbline 881
; 			LCD_Write_Char(wPointerX,wPointerY,wStrPtr);

⌨️ 快捷键说明

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