📄 yxktv.lst
字号:
996 {
997 1 TR=0;/*切换到发送状态*/
998 1 //DelayMs(2);
999 1
1000 1 SerHeadN=C_HEADN ;
1001 1 SerN=0;
1002 1 SBUF=0x55;
1003 1 bSendOk=0;
1004 1 }
1005
1006 /*串口发送中断调用的 串口数据发送*/
1007 void SendData() using BANK_SERI
1008 {
1009 1 if (bSendOk) return;
1010 1 if (bSendAck)
1011 1 { SendAck();
1012 2 return;
1013 2 }
1014 1
1015 1 if (SerHeadN>0) /*发送引导数据*/
1016 1 { if (SerHeadN==1) SBUF=0x66 ;
1017 2 else
1018 2 if (SerHeadN==2) SBUF=0xFF ;
1019 2 else SBUF=0x55;
1020 2 SerHeadN--;
1021 2 return;
1022 2 }
1023 1
1024 1 SBUF=SerData[SerN];
1025 1 SerN++;
1026 1 //if (SerN>=SerBufN)//Bug!漏最后一个字节
1027 1 if (SerN>SerBufN)
1028 1 {
1029 2 TR=1; /*切换到接收状态*/
1030 2 bSendOk=1;
1031 2 SerN=0;
1032 2 SerBufN=0;
1033 2 }
1034 1 }
1035
1036 void serials(void) interrupt 4 using BANK_SERI
1037 {
1038 1 if(RI==1)
1039 1 {
1040 2 RI=0;
1041 2 if (TR==1)
1042 2 { RecvData();/*有发送状态产生接受中断的情况*/
C51 COMPILER V7.00 YXKTV 05/08/2006 17:58:08 PAGE 18
1043 3 //不是TR=0影响开机接收不到数据;
1044 3 return;
1045 3 }
1046 2 }
1047 1 if(TI==1)
1048 1 {
1049 2 TI=0;
1050 2 SendData();
1051 2 }
1052 1 }
1053
1054
1055 void KeyScan()
1056 { uchar code KEYTAB[] =
1057 1 //{ 0,0x0e,0x0f,0x0c,0x0d,1,4,7,0x0a,2,5,8,0,3,6,9,0x0b,0x10};
1058 1 { 0,1,2,3,KOK,4,5,6,KESC,7,8,9,KFUNC1,KDEL,0,KDOT,KFUNC2};
1059 1
1060 1 register uchar i,KeyTemp;
1061 1
1062 1 bKeyScan=0;
1063 1
1064 1 bKeyOk=0;
1065 1 for (i=0;i<4;i++)
1066 1 {
1067 2 if (i==0) K0=0;
1068 2 if (i==1) K1=0;
1069 2 if (i==2) K2=0;
1070 2 if (i==3) K3=0;
1071 2 KeyTemp = i*4;
1072 2 if (K4==0) {KeyTemp=KeyTemp+1;break;}
1073 2 if (K5==0) {KeyTemp=KeyTemp+2;break;}
1074 2 if (K6==0) {KeyTemp=KeyTemp+3;break;}
1075 2 if (K7==0) {KeyTemp=KeyTemp+4;break;}
1076 2 KeyTemp=0;
1077 2 P1=0xff;
1078 2 };
1079 1 P1=0xff;
1080 1 if (KeyTemp==0)
1081 1 { KeyNo=0xff;
1082 2 KonT=0;
1083 2 return;
1084 2
1085 2 }
1086 1
1087 1 KeyTemp=KEYTAB[KeyTemp];
1088 1 if (KeyTemp==KESC)//V1.1
1089 1 { KonT++; /*长按2s关机*/
1090 2 if (KonT>120) PwrOff();
1091 2 }else
1092 1 { KonT=0;
1093 2 }
1094 1
1095 1 if (KeyTemp==KeyNo ) return;
1096 1 KeyNo=KeyTemp;
1097 1 bKeyOk=1;
1098 1 LCDLED=0;
1099 1 LedTimer=30;
1100 1
1101 1 }
1102
1103
1104 /*---24c02--*/
C51 COMPILER V7.00 YXKTV 05/08/2006 17:58:08 PAGE 19
1105 void Start24()
1106 { SDA=1;
1107 1 NOP
1108 1 SCL=1;//When CLK=1,SDA 1->0 =START!
1109 1 NOP
1110 1 SDA=0;
1111 1 NOP
1112 1 SCL=0;
1113 1 NOP
1114 1
1115 1 }
1116
1117 void Stop24()
1118 {
1119 1 SDA=0;
1120 1 NOP
1121 1 SCL=1;
1122 1 NOP
1123 1 SDA=1;
1124 1 NOP
1125 1 }
1126
1127 unsigned char Rd24(void)
1128 { register unsigned char i;
1129 1 SDA=1;
1130 1 /* SCL=1;a7=SDA;SCL=0;
1131 1 SCL=1;a6=SDA;SCL=0;
1132 1 SCL=1;a5=SDA;SCL=0;
1133 1 SCL=1;a4=SDA;SCL=0;
1134 1 SCL=1;a3=SDA;SCL=0;
1135 1 SCL=1;a2=SDA;SCL=0;
1136 1 SCL=1;a1=SDA;SCL=0;
1137 1 SCL=1;a0=SDA;SCL=0;*/
1138 1 ICData=0;
1139 1 SCL=0;
1140 1 for (i=0;i<8;i++)
1141 1 { SCL=1; NOP /*实测5V下不延时也可*/
1142 2 ICDataB0=SDA; NOP
1143 2 SCL=0; NOP
1144 2 if (i!=7) ICData=ICData<<1;
1145 2 }
1146 1 SDA=bAck;
1147 1 SCL=1;NOP
1148 1 SCL=0;NOP /*写应答位*/
1149 1 return(ICData);
1150 1 }
1151
1152 bit Wr24(unsigned char dd)
1153 { register unsigned char i;
1154 1 /* ACC=dd;
1155 1 SDA=a7;SCL=1;SCL=0;
1156 1 SDA=a6;SCL=1;SCL=0;
1157 1 SDA=a5;SCL=1;SCL=0;
1158 1 SDA=a4;SCL=1;SCL=0;
1159 1 SDA=a3;SCL=1;SCL=0;
1160 1 SDA=a2;SCL=1;SCL=0;
1161 1 SDA=a1;SCL=1;SCL=0;
1162 1 SDA=a0;SCL=1;SCL=0; */
1163 1 ICData=dd;
1164 1 for (i=0;i<8;i++)
1165 1 {
1166 2 SDA=ICDataB7; NOP /*实测5V下不延时也可*/
C51 COMPILER V7.00 YXKTV 05/08/2006 17:58:08 PAGE 20
1167 2 SCL=1; NOP
1168 2 SCL=0; NOP
1169 2 ICData=ICData<<1;
1170 2 }
1171 1
1172 1 SDA=1;SCL=1; /*等待应答0*/
1173 1 for (i=0;i<100;i++)
1174 1 { if (SDA==0) break;
1175 2 }
1176 1 bAck=SDA;
1177 1 SCL=0;
1178 1 return bAck;
1179 1 }
1180
1181 bit RdBytes24(unsigned int iAddr,uchar iLen)
1182 { unsigned char ddd,i;
1183 1
1184 1 ddd=((iAddr&0x7ff)/256)<<1;
1185 1 Start24();
1186 1 if (Wr24(0xa0|ddd)==1)
1187 1 {bAck=0;goto RDSTOP;}//err
1188 1 Wr24(iAddr);
1189 1 NOP
1190 1 Start24();Wr24(0xa1|ddd);
1191 1
1192 1 for (i=0;i<iLen;i++)
1193 1 {
1194 2 bAck=0;if (i==(iLen-1)) bAck=1;
1195 2 IcBuf[i]=Rd24();
1196 2 };
1197 1 Stop24();
1198 1 return bAck;
1199 1
1200 1 RDSTOP:
1201 1 Stop24();
1202 1 return bAck;
1203 1 }
1204
1205 bit WrBytes24(unsigned int iAddr,uchar iLen)
1206 {
1207 1 unsigned char ddd,i;
1208 1
1209 1 ddd=((iAddr&0x7ff)/256)<<1;
1210 1 Start24();
1211 1 if (Wr24(0xa0|ddd)==1)
1212 1 {bAck=0;goto WRSTOP;}//err
1213 1 Wr24(iAddr);
1214 1
1215 1 for (i=0;i<iLen;i++)
1216 1 {
1217 2 if (Wr24(IcBuf[i])==1)
1218 2 {bAck=0;goto WRSTOP;}//err
1219 2 };
1220 1 bAck=1;//OK
1221 1 Stop24();
1222 1 //DelayMs(10); //wait 10ms...
1223 1
1224 1 return bAck;
1225 1 WRSTOP:
1226 1 Stop24();
1227 1 return bAck;
1228 1 }
C51 COMPILER V7.00 YXKTV 05/08/2006 17:58:08 PAGE 21
1229
1230 void WrBytes(uchar iAddr,uchar data *Datas,uchar iLen)
1231 { uchar i,j;
1232 1 for (i=0;i<iLen;i=i+8)
1233 1 { for (j=0;j<8;j++) IcBuf[j]=Datas[i+j];
1234 2 if ((i+8)<=iLen) j=8;else j=iLen-i;
1235 2 WrBytes24(iAddr,j);
1236 2 iAddr=iAddr+8;
1237 2 DelayMs(10);
1238 2 }
1239 1 }
1240
1241 void Tst24()
1242 { Stop24();NOP
1243 1 RdBytes24(0,6);
1244 1 // WrBytes24(0,6);
1245 1 }
1246
1247 void DelayMs(uchar Ms)
1248 { uchar i;
1249 1 do
1250 1 { WDTRST=0x1E; /*Reset WDT*/
1251 2 WDTRST=0xE1;
1252 2 for (i=0;i<100;i++) ; /*12us*100?*/
1253 2
1254 2 Ms--;
1255 2 } while (Ms!=0);
1256 1 }
1257
1258 void Beep()
1259 {
1260 1 return;
1261 1 }
1262
1263
1264 void LcdWrCmd(uchar uData)
1265 { uchar i;
1266 1
1267 1 LCDRS=0; //cmd
1268 1 LCDRW=1;//read status
1269 1 LCDE=1;
1270 1 P0=0xff;
1271 1 i=0xff;
1272 1 do
1273 1 { //判断是否Busy
1274 2 if (i--==0) break;
1275 2 } while (P07==1);
1276 1 LCDE=0;
1277 1
1278 1 LCDRW=0; //write
1279 1 P0=uData;
1280 1 LCDE=1;
1281 1 LCDE=0;
1282 1 P0=0xff;
1283 1 }
1284
1285 void LcdWrData(uchar uData)
1286 { uchar i;
1287 1
1288 1 LCDRS=0; //cmd
1289 1 LCDRW=1;//read status
1290 1 LCDE=1;
C51 COMPILER V7.00 YXKTV 05/08/2006 17:58:08 PAGE 22
1291 1 P0=0xff;
1292 1 i=0xff;
1293 1 do
1294 1 { if (i--==0) break;
1295 2 } while (P07==1);
1296 1 LCDE=0;
1297 1
1298 1 LCDRS=1;//data
1299 1 LCDRW=0;//write
1300 1 P0=uData;
1301 1 LCDE=1;
1302 1 LCDE=0;
1303 1 P0=0xff;
1304 1 }
1305
1306 void LcdHome()
1307 { LcdWrCmd(3);
1308 1 LcdX=0;LcdY=0;
1309 1 }
1310
1311 uchar LcdRdData()
1312 { uchar uData;
1313 1 LCDRS=1;//data
1314 1 LCDRW=1;//read
1315 1 LCDE=1;
1316 1 uData=P0;
1317 1 LCDE=0;
1318 1 return uData;
1319 1 }
1320
1321 void LcdReverse(uchar uLine)
1322 {//Line=0--3,并且有显示数据的才反相显示
1323 1 LcdWrCmd(0x34);//extern instrution
1324 1 //LcdWrCmd(0x36);
1325 1 LcdWrCmd((4+uLine)&0x07);
1326 1 LcdWrCmd(0x30);//basic instrution
1327 1 }
1328
1329 void LcdXY()
1330 { uchar iAddr;
1331 1
1332 1 iAddr=DDRAMTAB[LcdY-1]+LcdX-1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -