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

📄 yxkey.lst

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