📄 yxkeyv1.0.lst
字号:
C51 COMPILER V7.00 YXKEYV1_0 09/04/2004 15:45:57 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE YXKEYV1_0
OBJECT MODULE PLACED IN C:\WAVE\PEI\YXKEY\YXKEYV1.0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\WAVE\PEI\YXKEY\YXKEYV1.0.C DB SB OE
stmt level source
1 /******************************************************************************
2 * 模块名:YxKey.c
3 * 功 能:系统主程序部分
4 * 时 间:2004.4.30
5 *
6 ******************************************************************************/
7
8 /*
9 */
10 #include <reg51.h>
11 #include <intrins.h> /*nop等指令*/
12
13
14 #define uint unsigned int
15 #define uchar unsigned char
16
17
18 #define NOP _nop_();_nop_();_nop_();_nop_();
19
20 sbit a0=ACC^0; /*定义ACC的位,利用ACC操作速度最快*/
21 sbit a1=ACC^1;
22 sbit a2=ACC^2;
23 sbit a3=ACC^3;
24 sbit a4=ACC^4;
25 sbit a5=ACC^5;
26 sbit a6=ACC^6;
27 sbit a7=ACC^7;
28
29 /*变量定义*/
30 sbit K0 =P1^0;
31 sbit K1 =P1^1;
32 sbit K2 =P1^2;
33 sbit K3 =P1^3;
34 sbit K4 =P1^4;
35 sbit K5 =P1^5;
36 sbit K6 =P1^6;
37 sbit K7 =P1^7;
38
39 sbit TR =P3^3;
40 sbit SCL =P3^4;
41 sbit SDA =P3^5;
42 sbit LED =P3^7;
43 //sbit LED2 =P1^7;
44
45
46 /*常数定义*/
47 #define C_T0H 0xB8 /*20ms=(65536-x)*12/11.0592 */
48 #define C_T0L 0x00
49
50 #define BANK_SERI 1
51
52 #define C_SERMAXN 16 /*串口缓冲区大小*/
53
54 /*收发转换需要2ms*/
55 #define C_HEADN 0 /*无线发送引导头长度 发送0x55的数目*/
C51 COMPILER V7.00 YXKEYV1_0 09/04/2004 15:45:57 PAGE 2
56 /*不加延时,使用PC机接收 HeadN=60,加2ms延时,并使用无单片机的收发板时,可使用50*/
57 /*使用10时可以提高无线基站的扫描间隔到50ms,使用20时扫描间隔60ms效果好,但使用50时也60ms,why?*/
58
59 #define C_TIMERN 25
60
61 #define KK7 7
62 #define KDOT 10
63 #define KSPC 11
64 #define KPRE 12
65 #define KNEXT 13
66 #define KOK 14
67 #define KESC 15
68 #define KFUNC 16
69
70 /*内部数据*/
71 uchar bdata ICData; /*串行读写数据使用,可位寻址*/
72 sbit ICDataB0=ICData^0;
73 sbit ICDataB1=ICData^1;
74 sbit ICDataB2=ICData^2;
75 sbit ICDataB3=ICData^3;
76 sbit ICDataB4=ICData^4;
77 sbit ICDataB5=ICData^5;
78 sbit ICDataB6=ICData^6;
79 sbit ICDataB7=ICData^7;
80
81 uchar bdata P1Led;
82 sbit LED2=P1Led^7;
83
84 uchar bdata ICONS;/*液晶图标*/
85 sbit IconZT=ICONS^7; /*公司标徽*/
86 sbit IconTX=ICONS^4;
87 sbit IconRX=ICONS^6;
88 sbit IconSETUP=ICONS^0; /*设置*/
89 sbit IconCOL =ICONS^1;
90 sbit IconBATT =ICONS^2; /*弱电*/
91
92 uchar bdata Config1,Config2,Config3;
93 sbit bOneKey =Config1^0;/*功能限定:单按键输入*/
94
95 uchar data SerData[C_SERMAXN] ;/*串口数据区*/
96 uchar data SerN,SerHeadN,SerBufN;
97 bit bRcvOk,bSendOk;
98
99 bit bTimer,bKeyOk,bDot,bEnter,bKeyScan,bSetup,bFlash;
100 uchar data TimerN,PwrT,TimerTR,KonT;
101 uchar data AddL,AddH,SysMode;
102 uchar data KeyNo,InputN,IniPos;
103 uchar data InitOkNum,InitOkNum2;
104
105 unsigned int data TimerA,PwrTimer;
106 /*最后按键计时,延时关机计时,上电初始化标志*/
107
108 uchar data LcdBuf[6];/*液晶显示*/
109 uchar data KeyBuf[3];/*按键序列*/
110 uchar data IcBuf[6];/*EEPROM数据区*/
111 bit bAck; /*EEPROM中的应答标志*/
112
113
114 void SystemIni();
115 void ReadCmd();
116 void TstSend();
117 void TimerFunc();
C51 COMPILER V7.00 YXKEYV1_0 09/04/2004 15:45:57 PAGE 3
118 void KeyScan();
119 void FuncInput();
120 void FuncSetup();
121 void PushSendBuf(uchar);
122 void StartSendBuf();
123 void Stop24();
124 bit WrBytes24(unsigned int,unsigned char);
125 bit RdBytes24(unsigned int,unsigned char);
126 void DelayMs(uchar);
127 void SendMoreKey();
128 void InputClr();
129
130 /*主程序开始*/
131 main()
132 {
133 1
134 1 SystemIni(); /*系统初始化*/
135 1 //while(1) {LED=0;LED2=0;}; //Test Current
136 1
137 1 while(1)
138 1 {
139 2 if (bRcvOk) ReadCmd();
140 2 if (bTimer) TimerFunc();
141 2 if (bKeyScan) KeyScan();
142 2
143 2 switch (SysMode)
144 2 { case 0:
145 3 FuncInput();
146 3 break;
147 3 default:
148 3 SysMode=0;
149 3 break;
150 3 }
151 2 PCON=PCON|0x01;//IDLE模式,减少耗电
152 2
153 2 }
154 1 }
155
156 uchar LeftShift4(uchar *Source,uchar inData)/*左移4位入*/
157 { uchar i;
158 1 i=*Source>>4;
159 1 *Source=(*Source<<4)|(inData & 0x0f);
160 1 return i;
161 1 }
162
163 void KeyInBuf(uchar Key)
164 { uchar iCode;
165 1 iCode=LeftShift4(&KeyBuf[2],Key);
166 1 iCode=LeftShift4(&KeyBuf[1],iCode);
167 1 iCode=LeftShift4(&KeyBuf[0],iCode);
168 1 }
169
170 /*正常键盘输入*/
171 void FuncInput()
172 { register uchar i;
173 1 if (!bKeyOk) return;
174 1 bKeyOk=0;
175 1 //LED=~LED;
176 1 TimerA=0;/*重新计时*/
177 1
178 1 KeyInBuf(KeyNo);//to按键序列
179 1
C51 COMPILER V7.00 YXKEYV1_0 09/04/2004 15:45:57 PAGE 4
180 1 switch (KeyNo)
181 1 {
182 2 case KDOT: //dot
183 2 if (bDot) return;
184 2 bDot=1;
185 2 if (InputN==0)
186 2 { LcdBuf[5]=0; InputN++; }
187 2 LcdBuf[5]=LcdBuf[5]|0x80;
188 2 break;
189 2 //case 11: //space
190 2 // break;
191 2 case KPRE:
192 2 case KNEXT:
193 2 if (bEnter==1) return;
194 2 if (LcdBuf[5]>0x7f) bDot=0;
195 2 for (i=0;i<5;i++) LcdBuf[5-i]=LcdBuf[4-i];
196 2 LcdBuf[0]=0x0f;
197 2 if (InputN>0) InputN--;
198 2 break;
199 2 case KOK: //OK
200 2 if (InputN>0)
201 2 { bEnter=1;
202 3 InputN=0;//后继重新输入
203 3 }
204 2 return;
205 2 case KESC: //ESC
206 2 case KFUNC: //FUNC
207 2 InputClr();
208 2 break;
209 2 default: /*数字键*/
210 2 if (InputN>5) InputN=0;//后继重新输入
211 2
212 2 for (i=0;i<5;i++) LcdBuf[i]=LcdBuf[i+1];
213 2 LcdBuf[5]=KeyNo;
214 2 InputN++;
215 2 }
216 1
217 1 if (InputN==1)/*开机缺省显示消除*/
218 1 { for (i=0;i<5;i++) LcdBuf[i]=0x0f;
219 2 }
220 1
221 1 }
222
223
224 void WriteIni()
225 { IcBuf[0]=0xAA;IcBuf[1]=0x55;
226 1 WrBytes24(0,2);
227 1
228 1 IcBuf[0]=AddH;IcBuf[1]=AddL;
229 1 IcBuf[2]=PwrT;IcBuf[3]=Config1;
230 1 IcBuf[4]=Config2;IcBuf[5]=Config3;
231 1 WrBytes24( 2,6);
232 1
233 1 }
234
235 void ReadIni()
236 { uchar i;
237 1
238 1 Stop24();
239 1 for (i=0;i<6;i++)
240 1 {
241 2 RdBytes24(0,2);
C51 COMPILER V7.00 YXKEYV1_0 09/04/2004 15:45:57 PAGE 5
242 2 if ((IcBuf[0]==0xAA) && (IcBuf[1]==0x55)) i=7;
243 2 DelayMs(10);
244 2 }
245 1
246 1 if ((IcBuf[0]!=0xAA) | (IcBuf[1]!=0x55))
247 1 {
248 2 AddH=99;AddL=99;//9999
249 2 //AddH=0;AddL=1;//1
250 2
251 2 PwrT=2;
252 2 Config1=0;Config2=0;Config3=0;
253 2 //WriteIni();//不改写
254 2 }
255 1 else
256 1 { RdBytes24(2,6);
257 2 AddH=IcBuf[0];AddL=IcBuf[1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -