📄 windows.lst
字号:
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE WINDOWS
OBJECT MODULE PLACED IN Windows.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Windows.c LARGE OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 /*
2 * Copyright (c) 2004,成都港顺科技发展有限公司
3 * All rights reserved.
4 *
5 * 编 译 器:Keil:C Compiler:7.20;Assembler:7.10
6 * 工程名称:POS-Test.UV2
7 * 文件名称:Windows.C
8 * 摘 要:窗体显示
9 *
10 * 单 片 机:uPSD3254
11 * 当前版本:0.4
12 * 作 者:李凯
13 * 完成日期:2004-12-7 14:45
14 */
15
16 #include "Main.h"
17
18 void WindowsSet(uchar x)
19 {
20 1 uchar i;
21 1
22 1 memset(WinDat,0,sizeof(WinDat));
23 1 memset(WinHint,0,sizeof(WinHint));
24 1 for(i=0;i<x;i++)WinHint[i][0]=1;
25 1 }
26
27 void VfdDisplayInt(uchar *str,uchar MaxNum,uchar Pwd)
28 {// Pwd = 1 显示密码 Pwd = 0显示整数
29 1 uint Cursor = 0xffff,DigitDot;
30 1 uchar i,position,IntLen=7,Dot,AllLen;
31 1 uchar VFDdisbuff[13];
32 1
33 1 for(i=0;i<10;i++) VFDdisbuff[i]=0x13;
34 1 if(MaxNum<7) Cursor =~(Cursor << MaxNum+6); //显示下划线_____
35 1 else Cursor = 0x1fff; //如果超出7位,则只显7位
36 1
37 1 IntLen = AllLen = 0;
38 1 for(i=0;i<7;i++)
39 1 {
40 2 if(str[i]==0) break;
41 2 if(str[i]!='.')IntLen++;
42 2 AllLen++;
43 2 }
44 1 position = 10 - IntLen;
45 1 if((position<3) || position>10 ) return; //显示超出范围
46 1 for(i=0;i<AllLen;i++)
47 1 {
48 2 if(str[i]=='.') continue;
49 2 if(Pwd == 1)
50 2 VFDdisbuff[position++] = 0x10; //'-'
51 2 else
52 2 VFDdisbuff[position++] = str[i]-'0';
53 2 }
54 1 Dot = i = 0;
55 1 while(IntLen!=0)
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 2
56 1 { i++;
57 2 if(str[IntLen]=='.') { Dot = i; break; }
58 2 IntLen--;
59 2 }
60 1 DigitDot = 0x0020;
61 1 DigitDot <<= Dot;
62 1 VfdDisplay(VFDdisbuff,Cursor,DigitDot); //显示
63 1 }
64
65 void ScrollBar(uchar CurrentRow, uchar FullRow)
66 {//CurrentRow 当前行位置 FullRow 总行数
67 1 uchar const BarArr[]={
68 1 0xFF,0x41,0x51,0x59,0x5D,0x59,0x51,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
69 1 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
70 1 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
71 1 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x82,0x8A,0x9A,0xBA,0x9A,0x8A,0xFF
72 1 };
73 1 uchar val,Step,BarLen;
74 1
75 1 CurrentRow-=1;
76 1 val = FullRow/4;
77 1 if((FullRow%4)!=0) val += 1;
78 1 FullRow-=1;
79 1 BarLen = (63-16)/val; //滚动条
80 1 val = 48-BarLen; //48=64-16,可显示的总长度
81 1 Step = val/FullRow; //每行移动的点数
82 1 ShowPicture(0,184,64,192,BarArr);
83 1 if(CurrentRow<FullRow)
84 1 DisplayRectangle(8+Step*CurrentRow,186,8+(Step*CurrentRow)+BarLen,189,1);
85 1 else
86 1 DisplayRectangle(55-BarLen,186,55,189,1); //最后一行64-8=55
87 1 }
88
89 void Dis4HintMode(uchar StartLn,uchar CurLn,uchar *InputLocation)
90 {
91 1 uchar i,j,k,DisMode,adr=0,InputStr[25],val;
92 1 gyt4 *xp;
93 1 ulong num;
94 1
95 1 StartLn -= 1;
96 1 CurLn -= 1;
97 1 k=StartLn+4;
98 1 for(i=StartLn;i<k;i++)
99 1 {
100 2 if(WinHint[i][0]==0)return;
101 2 if(i==CurLn) DisMode = 0x11; //清除本行并显示反白效果
102 2 else DisMode = 0x01;
103 2 memset(InputStr,0,sizeof(InputStr));
104 2 switch(WinDat[i][0])
105 2 {
106 3 case 1: //为1、7表示显示整数
107 3 case 7: xp = &WinDat[i][2];
*** WARNING C182 IN LINE 107 OF WINDOWS.C: pointer to different objects
108 3 num=xp->dat;
109 3 NumToStr(num,InputStr,SwitchInt);
110 3 break;
111 3
112 3 case 2: //为2、8表示显示小数
113 3 case 8: xp = &WinDat[i][2];
*** WARNING C182 IN LINE 113 OF WINDOWS.C: pointer to different objects
114 3 num=xp->dat;
115 3 NumToStr(num,InputStr,SwitchFloat);
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 3
116 3 break;
117 3
118 3 case 3: strcpy(InputStr,&WinDat[i][2]); //显示汉字
119 3 break;
120 3
121 3 case 4: xp = &WinDat[i][2];
*** WARNING C182 IN LINE 121 OF WINDOWS.C: pointer to different objects
122 3 num=xp->dat;
123 3 NumToStr(num,InputStr,SwitchInt); //显示密码
124 3 val = strlen(InputStr);
125 3 for(j=0;j<val;j++) InputStr[j] = '*';
126 3 InputStr[j] = 0;
127 3 break;
128 3
129 3 case 5: //为5、6表示显示BCD码数组
130 3 case 6: j=WinDat[i][1]/2;
131 3 if(WinDat[i][1]%2)j+=1;
132 3 BcdToStr(j,&WinDat[i][2],InputStr,0);
133 3 break;
134 3
135 3 default:break;//其它方式未定义,不处理
136 3 }
137 2 LcdDisplay(adr,0,&WinHint[i][1],DisMode);
138 2 if(InputStr[0]!=0)
139 2 LcdDisplay(adr,InputLocation[i],InputStr,0);
140 2 adr +=16;
141 2 }
142 1 }
143
144 void Dis4Hint(uchar StartLn,uchar CurLn)
145 {
146 1 uchar i,DisMode,adr=0;
147 1
148 1 StartLn -= 1;
149 1 CurLn -= 1;
150 1 for(i=StartLn;i<StartLn+4;i++)
151 1 {
152 2 if(i==CurLn) DisMode = 0x11; //清除本行并显示反白效果
153 2 else DisMode = 0x01;
154 2 if(WinHint[i][0]==0) return;
155 2 LcdDisplay(adr,0,WinHint[i]+1,DisMode);
156 2 adr +=16;
157 2 }
158 1 }
159
160 uchar DisMenu(uchar no,uchar MenuLen,uchar *key)
161 {
162 1 uchar i,val,k;
163 1 uchar StartLn, CurLn;
164 1
165 1 if(no==0) no = 1;
166 1 CurLn = no;
167 1 if(no<=4)StartLn = 1;
168 1 else StartLn = no-3;
169 1
170 1 k=strlen(key);
171 1 while(1)
172 1 {
173 2 Dis4Hint(StartLn, CurLn);
174 2 ScrollBar(CurLn,MenuLen);
175 2 val = ScanNumber(0,0,0,0);
176 2 if((val<10) && (val>0) && (val<=MenuLen)) //是数字键1-9
C51 COMPILER V8.01 WINDOWS 03/28/2006 09:48:48 PAGE 4
177 2 {
178 3 key[0] = 0;
179 3 return val;
180 3 }
181 2 // val&=0x7F;
182 2 switch(val)
183 2 {
184 3 case K_UP: if(CurLn>StartLn)
185 3 CurLn--;
186 3 else
187 3 {
188 4 CurLn--; StartLn--;
189 4 if((CurLn<1) || (StartLn<1))
190 4 {
191 5 CurLn = MenuLen;
192 5 if(MenuLen>3)
193 5 {
194 6 StartLn = MenuLen - 3;
195 6 }
196 5 else
197 5 {
198 6 StartLn = 1;
199 6 }
200 5 }
201 4 }
202 3 break;
203 3
204 3 case K_DOWN:if(CurLn<(StartLn+3))
205 3 {
206 4 CurLn++;
207 4 if(CurLn>MenuLen)
208 4 {
209 5 CurLn = 1;
210 5 StartLn = 1;
211 5 }
212 4 }
213 3 else
214 3 {
215 4 CurLn++; StartLn++;
216 4 if((CurLn>MenuLen) || (StartLn>MenuLen))
217 4 {
218 5 CurLn = 1;
219 5 StartLn = 1;
220 5 }
221 4 }
222 3 break;
223 3
224 3 case K_LEFT:if(StartLn>4) //不在第一页
225 3 {
226 4 StartLn-=4;
227 4 CurLn-=4;
228 4 }
229 3 else
230 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -