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

📄 c_code.lst

📁 Pressure Sensor Assemble Code
💻 LST
📖 第 1 页 / 共 3 页
字号:
 185   2                      ACC = ACC & 0x0fE;                                                                                 //模拟电路休眠控制位,1休,0工作
 186   2                      Regstr = ACC;
 187   2                      PortA000 = ACC;
 188   2      
 189   2                      while(1)
 190   2                      {
 191   3                              AD_A0 = 0;
 192   3                              AD_A1 = 0;
 193   3                              new_value[0] = ad_convert();                                                    //模拟输入路1测量
 194   3                              do
 195   3                              {
 196   4                                      C = AD_BUSY;
 197   4                              }while(C == 0);
 198   3                              Port10F4 = ACC;                                                                            //启动模拟转换上一路,锁存第当前路
 199   3      
 200   3                              do
 201   3                              {
 202   4                                      C = AD_BUSY;                                                                       //等待以前路转换
 203   4                              }while(C == 0);
 204   3                              Port10F4 = ACC;                                                                            //启动模拟转换第当前路,锁存第当前路
 205   3      
 206   3                              do
 207   3                              {
 208   4                                      C = AD_BUSY;
 209   4                              }while(C == 0);                                                                                 //等待当前路转换结束;
 210   3                              ACC = Port10FF;                                                                                 //读yiqian转换的低字节;
 211   3                              new_value[1] = new_value[1] & ACC;                                              //需要将赋给new_value[1]的低字节
 212   3                              ACC = Port10FB;                                                                                 //读yiqian转换的高字节
 213   3                              //做移位,将其赋给new_value[1]的高字节
 214   3      
 215   3                              AD_A0 = 1;
 216   3                              new_value[1] = ad_convert();                                                    //模拟输入路2测量
 217   3              
 218   3                              AD_A0 = 0;
 219   3                              AD_A1 = 1;
 220   3                              new_value[2] = ad_convert();                                                    //模拟输入路3测量
 221   3              
 222   3                              AD_A0 = 1;
 223   3                              new_value[3] = ad_convert();                                                    //模拟输入路4测量
 224   3              
 225   3                              Delay(1);
 226   3                              Delay(1);
 227   3                              FS = 1;
 228   3                              Delay(1);
 229   3                              Delay(1);       
 230   3                                                                                                                      
 231   3                              FS = 0;                                                                            //ad_sample();
 232   3                              ACC = Port6000;
 233   3                              ACC = ACC & 0x80;
 234   3                              if(ACC != 0x80)                 
 235   3                              {
 236   4                                      
 237   4                                      ACC = Regstr;                                                     //poweroff();
 238   4                                      ACC = ACC | 0x01;                                                 //模拟电路休眠控制位,1休,0工作
 239   4                                      Regstr = ACC;
 240   4                                      PortA000 = ACC;
 241   4                                      ACC = Regstr;
C51 COMPILER V8.02   C_CODE                                                                10/25/2006 07:30:58 PAGE 5   

 242   4                                      ACC = ACC & 0x7F;                                                 //模拟电路电源控制位,1供电,0断电
 243   4                                      Regstr = ACC;
 244   4                                      PortA000 = ACC;
 245   4      
 246   4                                      FPWR = 0;
 247   4                                      iflag[0] = 1;
 248   4                                      break;
 249   4                              }
 250   3                              calibration(new_value);
 251   3                              deoutlier(new_value, value, 10);                                //数据处理
 252   3                              LcmDynWriteData(0,0,0x11,ihexs);                                //显示
 253   3                              DelayKey(2);
 254   3                              
 255   3                              PortA000 = 0x08;
 256   3                              ACC = Port6000;
 257   3                              ACC = ACC & 0x10;
 258   3                              if(ACC == 0x10)                                                            //若SET键按下,可弹出上面的菜单
 259   3                              {
 260   4                              }
 261   3                              ACC = Port6000;
 262   3                              ACC = ACC & 0x08;
 263   3                              if(ACC == 0x08)                                                                 //若FIND键按下,为查询
 264   3                              {
 265   4                              }
 266   3                              ACC = Port6000;
 267   3                              ACC = ACC & 0x04;
 268   3                              if(ACC == 0x04)                                                                 //DELETE键按下
 269   3                              {
 270   4                              }
 271   3                              PortA000 = 0x04;
 272   3                              ACC = Port6000;
 273   3                              ACC = ACC & 0x04;
 274   3                              if(ACC == 0x04)                                                                 //SAVE键按下
 275   3                              {
 276   4                              }
 277   3                              ACC = Port6000;
 278   3                              ACC = ACC & 0x08;
 279   3                              if(ACC == 0x08)                                                                 //ALARM键按下
 280   3                              {
 281   4                              }
 282   3                      }
 283   2              }while(iflag[0] != 0);
 284   1      }
 285          
 286           //   hex to bcd 转换程序
 287          void hextobcd(unsigned int hexs,unsigned char j) 
 288          {
 289   1              unsigned int va;
 290   1              unsigned char i;
 291   1          va = 10000;                                         //最大数级万位
 292   1          for     (i=j-1;i;i--) {
 293   2              disp_buffer[i] = 0;                             //目标数组清零
 294   2              while ((hexs>=va)&&(va>9)) {
 295   3                  hexs -= va;                                 //减除数
 296   3                  disp_buffer[i]++;                           //商位加1
 297   3              }
 298   2              va /= 10;                                       //除数除10,指向低一位
 299   2          }
 300   1          disp_buffer[0]=hexs;                                //最后个位数    
 301   1      }
 302          
 303           //数据处理程序
C51 COMPILER V8.02   C_CODE                                                                10/25/2006 07:30:58 PAGE 6   

 304          void deoutlier(unsigned int x[4], unsigned int x0[4][2], char Bound)    //野点剔除
 305          {
 306   1              for(i=0;i<4;i++)
 307   1                      value[i][0] = value[i][1];
 308   1              for(i=0;i<4;i++)
 309   1              {
 310   2                      if(x[i]-x0[i][0]> Bound||x0[i][0]-x[i]>Bound)
 311   2                              value[i][1] = 2*x0[i][0] - x0[i][1];
 312   2                      else
 313   2                              value[i][1] = x[i];
 314   2              }
 315   1      }
 316          
 317          void calibration(unsigned int x[4])//温度校正公式见说明文档
 318          {
 319   1              for(i=0;i<4;i++)
 320   1                      new_value[i] = x[i];                                    //
 321   1      }
 322          
 323          //指令&数据读写状态
 324          void CheckRWCD(void){
 325   1           while((LcmCmdPort & 0x03) != 0x03);      //低电平忙
 326   1      }
 327          //数据自动写状态
 328          void CheckAutoWrite(void){
 329   1           while((LcmCmdPort & 0x08) == 0);      //低电平忙
 330   1      }
 331          //屏读/屏考贝出错状态
 332          //void CheckScreen(void){      
 333          //     while(LcmCmdPort & 0x40);      //1出错,0正确
 334          //}
 335          //一个数据子写入函数
 336          void LcmWriteData(unsigned char uData) {
 337   1           LcmDataPort = uData;
 338   1      }
 339          //一个数据读出函数
 340          //unsigned char LcmReadData( void ){
 341          //     unsigned char uData;
 342          //     uData = LcmDataPort;
 343          //     return uData;
 344          //}
 345          //无参数指令写入函数
 346          void LcmWriteCommand(unsigned char Command) {
 347   1           CheckRWCD();                        //检测指令读写状态
 348   1           LcmCmdPort = Command;
 349   1      }
 350          //单参数指令写入函数
 351          void LcmWriteCommandWith1Par(unsigned char Parameter,unsigned char Command){
 352   1           CheckRWCD();                        //检测指令读写状态
 353   1           LcmDataPort = Parameter;
 354   1           CheckRWCD();
 355   1           LcmCmdPort = Command;
 356   1      }
 357          //双参数指令写入函数
 358          void LcmWriteCommandWith2Par(unsigned char Parameter1,unsigned char Parameter2,unsigned char Command){
 359   1           CheckRWCD();                        //检测指令读写状态
 360   1           LcmDataPort = Parameter1;
 361   1           CheckRWCD();
 362   1           LcmDataPort = Parameter2;
 363   1           CheckRWCD();
 364   1           LcmCmdPort = Command;
 365   1      }
C51 COMPILER V8.02   C_CODE                                                                10/25/2006 07:30:58 PAGE 7   

 366          //LCM初始化函数
 367          void LcmInit( void ){
 368   1           LcmWriteCommandWith2Par(0x00,0x00,0x40);      //设置文本显示区首地址
 369   1           LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x41);      //设置文本显示区宽度
 370   1           LcmWriteCommandWith2Par(0x00,0x08,0x42);      //设置图形显示区首地址0x0800
 371   1           LcmWriteCommandWith2Par(LcmLengthDots/8,0x00,0x43);      //设置图形显示区宽度
 372   1           LcmWriteCommand(0xA7);                  //设置光标形状 8x8方块
 373   1           LcmWriteCommand(0x81);                  //显示方式设置 文本xor图形(异或)
 374   1           LcmWriteCommand(0x9C);                  //显示开关设置 文本开,图形开,光标闪烁关
 375   1      }
 376          //延时函数
 377          void Delay(unsigned int MS){

⌨️ 快捷键说明

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