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

📄 yxktv.lst

📁 C51环境下的KTV用的娱乐投票器
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE YXKTV
OBJECT MODULE PLACED IN C:\WAVE\PEI\YXKTV\YXKTV.OBJ
COMPILER INVOKED BY: c:\keil\c51\BIN\C51.EXE C:\WAVE\PEI\YXKTV\YXKTV.C DB SB OE

stmt level    source

   1          /******************************************************************************
   2          *       模块名:YxKtv.c
   3          *       功  能:系统主程序部分
   4          *       时  间:2004.8.2
   5          *
   6          ******************************************************************************/
   7          
   8          /*学会使用预编译指令控制不同硬件版本
   9           #if (条件) ,还有#ifdef  #ifndef
  10            C语言指令,不用{}包括
  11           #else
  12           #endif
  13          */
  14          
  15          //串口命令数据使用idata类型,编译使用rs(256),可使用80H后的数据区
  16          //注意:函数预定义的变量说明要和实现体保持一致,否则参数传递错误
  17          //void Prints(char,char,char data *,char);第3个参数char data *就必须有data
  18          
  19          //为什么SendAck()中如果指定Using 1,内部变量Crc却使用RAM0的07
  20          //如果串口中断Using 0,串口中断中并没有保护R0-R7的代码,引起错误,例如液晶显示乱
  21          
  22          #include <reg52.h>
  23          #include <intrins.h>   /*nop等指令*/
  24          
  25          /*AT89LS52专用的*/
  26          sfr AUXR=0x8E ;/*WDT等控制*/
  27          /*b0=1不输出ALE信号 b3=0 WDT复位是RST脚输出高电平 b4=1 IDLE模式下WDT停止 */
  28          sfr WDTRST=0xA6 ;/*轮流写1E和E1可复位WDT(16384个机器周期内,约32ms?),第一次是启动*/
  29          
  30          #define   uint unsigned int
  31          #define   uchar unsigned char
  32          
  33          
  34          #define NOP _nop_();_nop_();_nop_();_nop_();
  35          
  36          sbit a0=ACC^0;  /*定义ACC的位,利用ACC操作速度最快*/
  37          sbit a1=ACC^1;
  38          sbit a2=ACC^2;
  39          sbit a3=ACC^3;
  40          sbit a4=ACC^4;
  41          sbit a5=ACC^5;
  42          sbit a6=ACC^6;
  43          sbit a7=ACC^7;
  44          
  45          /*变量定义*/
  46          sbit K0     =P1^0;
  47          sbit K1     =P1^1;
  48          sbit K2     =P1^2;
  49          sbit K3     =P1^3;
  50          sbit K4     =P1^4;
  51          sbit K5     =P1^5;
  52          sbit K6     =P1^6;
  53          sbit K7     =P1^7;
  54          
  55          sbit P07    =P0^7;
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 2   

  56          
  57          sbit LCDRS  =P2^0;
  58          sbit LCDRW  =P2^1;
  59          sbit LCDE   =P2^2;
  60          sbit LCDPSB =P2^3;
  61          sbit LCDRST =P2^4;
  62          sbit LCDLED =P2^5;
  63          sbit SCL    =P2^6;
  64          sbit SDA    =P2^7;
  65          
  66          sbit TR     =P3^4;
  67          sbit LED    =P3^7;
  68          
  69          /*常数定义*/
  70          
  71          #define C_T0H 0xB8  /*20ms=(65536-x)*12/11.0592 */
  72          #define C_T0L 0x00
  73          
  74          #define BANK_SERI 1
  75          
  76          #define C_SERMAXN 16  /*串口缓冲区大小 最多显示64个字符*/
  77          
  78          /*收发转换需要2ms*/
  79          #ifdef WXKEY
               #define C_HEADN   20  /*无线发送引导头长度 发送0x55的数目*/
              #else
  82           #define C_HEADN   0
  83          #endif
  84          
  85          #define C_TIMERN   25
  86          #define C_LED  30
  87          #define C_LOOPT 25
  88          
  89          #define KDOT 10
  90          #define KDEL 11
  91          #define KOK  12
  92          #define KESC 13
  93          #define KFUNC1 14
  94          #define KFUNC2 15
  95          
  96          /*内部数据*/
  97          uchar bdata ICData; /*串行读写数据使用,可位寻址*/
  98          sbit ICDataB0=ICData^0;
  99          sbit ICDataB1=ICData^1;
 100          sbit ICDataB2=ICData^2;
 101          sbit ICDataB3=ICData^3;
 102          sbit ICDataB4=ICData^4;
 103          sbit ICDataB5=ICData^5;
 104          sbit ICDataB6=ICData^6;
 105          sbit ICDataB7=ICData^7;
 106          
 107          uchar bdata Config1,Config2,Config3;
 108          sbit Config1_0=Config1^0;
 109          sbit Config1_1=Config1^1;
 110          
 111          uchar data SerData[C_SERMAXN] ;/*串口数据区*/
 112          //uchar idata SerData[78];
 113          
 114          uchar data SerN,SerHeadN,SerBufN;
 115          bit bRcvOk,bSendOk;
 116          
 117          bit bTimer,bKeyOk,bDot,bEnter,bKeyScan,bSetup,bFlash;
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 3   

 118          uchar data TimerN,PwrT,KonT;
 119          uchar data AddL,AddH,SysMode;
 120          uchar data KeyNo,InputN,IniPos,DataPos,InputMode;
 121          
 122          unsigned int data TimerA,LedTimer,SleepTimer;
 123          uchar data InitOkNum,InitOkNum1;
 124          /*最后按键计时,延时关机计时,上电初始化标志*/
 125          
 126          uchar data LcdBuf[6];/*液晶显示*/
 127          
 128          uchar data IcBuf[10];/*EEPROM数据区*/
 129          bit bAck; /*EEPROM中的应答标志*/
 130          
 131          uchar data LcdX,LcdY;
 132          bit bSendAck;//在发送应答
 133          #define C_CHARN 68
 134          uchar idata CharData[C_CHARN];
 135          bit bLoopShow,bRcvChar,bLoop;//
 136          uchar LoopT,LoopPos,CharN,Money,Crc,SleepN;
 137          
 138          #define VERSION 10
 139          
 140          void SystemIni();
 141          void ReadCmd();
 142          void TstSend();
 143          void LcdInit();
 144          void ShowNums();
 145          void TimerFunc();
 146          void KeyScan();
 147          void FuncInput();
 148          void FuncSetup();
 149          void PushSendBuf(uchar);
 150          void StartSendBuf();
 151          void Stop24();
 152          bit  WrBytes24(unsigned int,unsigned char);
 153          bit  RdBytes24(unsigned int,unsigned char);
 154          bit  CheckMima();
 155          void ShowIni();
 156          void SendIni();
 157          void Beep();
 158          void DelayMs(uchar);
 159          void RstTR();/*TR100E接收不正常后复位TR100E*/
 160          void Tst24();
 161          void InputClr();
 162          void SaveKey(uchar);
 163          void ReadKey(uchar);
 164          
 165          void LcdWrCmd(uchar);
 166          void LcdWrData(uchar);
 167          void LcdClr(uchar);
 168          void Prints(uchar,uchar,uchar data *,uchar);
 169          void ShowLoop();
 170          void WrBytes(uchar,uchar data *,uchar);
 171          void ShowEprom();
 172          void ShowMoney();
 173          
 174          //液晶数据地址
 175          uchar code DDRAMTAB[]={0x80,0x90,0x88,0x98,};
 176          
 177          /*主程序开始*/
 178          main()
 179          {
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 4   

 180   1          AUXR=0x11;
 181   1      
 182   1          SystemIni();           /*系统初始化*/
 183   1      
 184   1          WDTRST=0x1E; /*start WDT*/
 185   1          WDTRST=0xE1;
 186   1      
 187   1          while(1)
 188   1          {
 189   2              WDTRST=0x1E; /*Reset WDT*/
 190   2              WDTRST=0xE1;
 191   2      
 192   2              if (bRcvOk) ReadCmd();
 193   2              if (bTimer) TimerFunc();
 194   2              if (bKeyScan) KeyScan();
 195   2              if (bKeyOk) Beep();
 196   2              if (bLoop) ShowLoop();
 197   2      
 198   2            switch (SysMode)
 199   2              { case 0:
 200   3                     FuncInput();
 201   3                     break;
 202   3                case 1: //Setup
 203   3                     FuncSetup();
 204   3                     break;
 205   3                default:
 206   3                     SysMode=0;
 207   3                     break;
 208   3              }
 209   2      
 210   2              //PCON=PCON|0x01;//IDLE模式,减少耗电
 211   2          }
 212   1      }
 213          
 214          void InputNum()
 215          { uchar data i;
 216   1        switch (InputMode)
 217   1        {
 218   2          case 0:
 219   2               break;
 220   2          case 2:
 221   2               LcdBuf[5]=KeyNo;
 222   2               InputN=1;
 223   2               break;
 224   2          case 3:
 225   2               Money=KeyNo;
 226   2               //if (Money>99) Money=99;
 227   2               ShowMoney();
 228   2               break;
 229   2          default:
 230   2              //if (InputN>5) return;
 231   2              if (bEnter) return;//修改为Enter后不可再输入
 232   2              for (i=0;i<5;i++) LcdBuf[i]=LcdBuf[i+1];
 233   2              LcdBuf[5]=KeyNo;
 234   2              InputN++;
 235   2        }
 236   1      }
 237          /*正常键盘输入*/
 238          void FuncInput()
 239          {    register uchar i;
 240   1           if (!bKeyOk) return;
 241   1           bKeyOk=0;
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 5   

 242   1           //LED=~LED;
 243   1      
 244   1           if (InputMode==0) return;
 245   1           SleepTimer=PwrT*120;
 246   1      
 247   1           TimerA=0;/*重新计时*/
 248   1      
 249   1           switch (KeyNo)
 250   1           {
 251   2              case KDOT: //dot
 252   2                   if (InputMode!=1) return;
 253   2                   if (bDot) return;
 254   2                   bDot=1;
 255   2                   if (InputN==0)
 256   2                      {  LcdBuf[5]=0;}
 257   2                   for (i=0;i<5;i++) LcdBuf[i]=LcdBuf[i+1];
 258   2                   LcdBuf[5]=0x0a;
 259   2                   InputN++;
 260   2                   break;
 261   2              //case 11: //space
 262   2              //     break;
 263   2              case KDEL:
 264   2                   if (InputMode==3)
 265   2                   { if (Money>0) Money--;
 266   3                     ShowMoney();
 267   3                     break;
 268   3                   }
 269   2                   if (bEnter==1) return;
 270   2                   if (LcdBuf[5]==0x0a) bDot=0;
 271   2                   for (i=0;i<5;i++) LcdBuf[5-i]=LcdBuf[4-i];
 272   2                   LcdBuf[0]=0x0f;
 273   2                   if (InputN>0) InputN--;
 274   2                   break;
 275   2              case KOK: //OK
 276   2                   if (InputMode==3)
 277   2                   {  if (Money<99 ) Money++;
 278   3                      ShowMoney();
 279   3                      break;
 280   3                   }
 281   2                   if (InputN>0)
 282   2                      {  bEnter=1;
 283   3                         //InputN=6;
 284   3                         }
 285   2                   else return;
 286   2                   break;
 287   2      
 288   2              case KESC: //ESC
 289   2                   if (InputMode==3)
 290   2                   {  Money=0;
 291   3                      ShowMoney();
 292   3                      break;
 293   3                   }
 294   2                   InputClr();
 295   2                   break;
 296   2              case KFUNC1: //FUNC
 297   2              case KFUNC2:
 298   2                   break;
 299   2              default:  /*数字键*/
 300   2                   InputNum();
 301   2           }
 302   1      
 303   1           if (InputN==1)/*开机缺省显示消除*/
C51 COMPILER V7.00  YXKTV                                                                  05/08/2006 17:58:08 PAGE 6   

 304   1           {  for (i=0;i<5;i++) LcdBuf[i]=0x0f;
 305   2           }
 306   1      
 307   1           ShowNums();
 308   1      }
 309          
 310          
 311          void WriteIni()
 312          {   IcBuf[0]=0xAA;IcBuf[1]=0x55;
 313   1          IcBuf[2]=AddH;IcBuf[3]=AddL;
 314   1          IcBuf[4]=PwrT;IcBuf[5]=Config1;
 315   1          IcBuf[6]=Config2;IcBuf[7]=Config3;
 316   1          WrBytes24( 0,8);
 317   1      
 318   1      }
 319          
 320          void ReadIni()
 321          {   uchar i;
 322   1      
 323   1          Stop24();
 324   1          for (i=0;i<6;i++)
 325   1          {
 326   2             RdBytes24(0,2);
 327   2             if ((IcBuf[0]==0xAA) && (IcBuf[1]==0x55)) i=7;
 328   2             DelayMs(10);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -