⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yxktv.lst

📁 C51环境下的KTV用的娱乐投票器
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -