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

📄 yxkeyv1.0.lst

📁 C51环境下的有线投票器的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
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 + -