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