📄 lcd.s
字号:
; 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 + -