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

📄 main.lst

📁 这是一种温度变送器的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 192   1              P1MDOUT =0;
 193   1              P1SKIP  =0x80;//交叉开关跳过DA1输出脚
 194   1      }
 195          /********************************************
 196          函数名: Display_LED
 197          功能: 用数码管显示显示缓冲区内容,并检测键盘
 198          形式参数:无
 199          返回值:无
 200          ********************************************/
 201          void Display_LED(void) interrupt 5
 202          {
 203   1              unsigned char i,j,sta1,cod,key;
 204   1              timer_cnt++;
 205   1              if(timer_cnt==50)
 206   1              {
 207   2                      timer_cnt=0; 
 208   2                      
 209   2                      key=0;
 210   2                      //for(k=8;k>0;k--)
 211   2                      //{
 212   2                              if(disp_cnt==0)
 213   2                                      disp_cnt=0x08;
 214   2                              disp_cnt--;                     
 215   2                              cod=display[disp_cnt];
 216   2                              sta1=~disp_sta;
 217   2                              for(j=8;j>0;j--)
 218   2                              {       
 219   3                                      sta1<<=1;
 220   3                                      SRCLK=0;//拉低74HC595时钟
 221   3                                      SER=CY;//发送74HC595一位串行数据
 222   3                                      //wait(1);//延时
 223   3                                      SRCLK=1;//拉高74HC595时钟
 224   3                                      //wait(1);//延时
 225   3                              }
 226   2              
 227   2                              for(i=8;i>0;i--)
 228   2                              {
 229   3                                  cod<<=1;
 230   3                                      SRCLK=0;//拉低74HC595时钟           
 231   3                                  SER=CY;//发送74HC595一位串行数据
 232   3                                      //wait(1);//延时
 233   3                                  SRCLK=1;//拉高74HC595时钟
 234   3                                  //wait(1);//延时
 235   3                              }
 236   2      
 237   2                              RCK0=0;
 238   2                              RCK1=0;
 239   2                              _nop_();
 240   2                              RCK0=1;
 241   2                              RCK1=1;
C51 COMPILER V7.06   MAIN                                                                  01/03/2008 17:28:43 PAGE 5   

 242   2                              _nop_();                
 243   2                              RCK0=0;
 244   2                              RCK1=0;                 
 245   2                              
 246   2                              if(KR==0)       //检测键盘
 247   2                              {
 248   3                                      curkey|=disp_sta;
 249   3                                      curkey&=0x0f;
 250   3                              }
 251   2                              //else
 252   2                              //      curkey=0;
 253   2              
 254   2                              disp_sta>>=1;//显示下一位
 255   2                              if(disp_sta==0)
 256   2                              {
 257   3                                      disp_sta=0x80;
 258   3                                      if(lastkey==curkey)
 259   3                                      {
 260   4                                              if(curkey==0)
 261   4                                              {//无键按下
 262   5                                                      keyval=0;
 263   5                                                      keycount=0;
 264   5                                                      key_mov=1;
 265   5                                                      keycnt=0;
 266   5                                              }
 267   4                                              else
 268   4                                              {//有键按下
 269   5                                                      keycnt++;
 270   5                                                      if(keycnt==1)
 271   5                                                      {
 272   6                                                              keycnt=0;
 273   6                                                              keyval=curkey;                                          
 274   6                                                              keycount++;
 275   6                                                              if(keycount==100)
 276   6                                                              {
 277   7                                                                      keycount=0;
 278   7                                                                      key_mov*=10;
 279   7                                                                      if(key_mov>100)key_mov=100;
 280   7                                                              }
 281   6                                                      }                                       
 282   5                                              }       
 283   4                                      }
 284   3                                      else                    
 285   3                                              lastkey=curkey;                                 
 286   3                                      curkey=0;
 287   3                              }                       
 288   2              }       
 289   1      }
 290          
 291          /********************************************
 292          函数名: SMbus_ISR
 293          功能: SMbus中断服务,
 294          形式参数:无
 295          返回值:无
 296          ********************************************/
 297          void SMbus_ISR(void)interrupt 7
 298          {
 299   1              switch (SMB0CN & 0xF0)
 300   1              {
 301   2                      case 0xe0:
 302   2                              SMB0DAT=Slave;
 303   2                              SMB0DAT |=SMB_RW;
C51 COMPILER V7.06   MAIN                                                                  01/03/2008 17:28:43 PAGE 6   

 304   2                              STA=0;
 305   2                              //wait(1);
 306   2                              break;
 307   2      
 308   2                      case 0xc0:
 309   2                              if(ACK)
 310   2                              {                              
 311   3                          if(RW_flag==1)//读操作
 312   3                                      {
 313   4                                              if(Ack1==0)
 314   4                                              {
 315   5                                                      Ack1=1;
 316   5                                                      SMB0DAT=Dat_addr;
 317   5                                              }
 318   4                                              else if(Ack2==0)
 319   4                                              {
 320   5                                                      Ack2=1;
 321   5                                                      SMB_RW=1;
 322   5                                                      STA=1;
 323   5                                              }
 324   4                                              else
 325   4                                                      break;
 326   4                                      }
 327   3                                      else              //写操作
 328   3                                      {
 329   4                                              if(Ack1==0)
 330   4                                              {
 331   5                                                      Ack1=1;
 332   5                                                      SMB0DAT=Dat_addr;
 333   5                                              }
 334   4                                              else if(Ack2==0)
 335   4                                              {
 336   5                                                      Ack2=1;
 337   5                                                      SMB0DAT=Dat_val;
 338   5                                              }
 339   4                                              else
 340   4                                              {
 341   5                                                      SMB_BUSY=0; 
 342   5                                          STO = 1;
 343   5                                              }       
 344   4                                      }                                                       
 345   3                      }
 346   2                              else
 347   2                                      STA=1;                          
 348   2                              break;
 349   2      
 350   2                      case 0x80:
 351   2                              Dat_24C02= SMB0DAT;
 352   2                              SMB_BUSY = 0; 
 353   2                  ACK = 0;
 354   2                  STO = 1; 
 355   2                              break;
 356   2      
 357   2                      default:
 358   2                              SMB0CN &= ~0x40;
 359   2                      SMB0CN |= 0x40;
 360   2                      SMB_BUSY = 0;
 361   2              }
 362   1              SI=0;   
 363   1      }
 364          
 365          /********************************************
C51 COMPILER V7.06   MAIN                                                                  01/03/2008 17:28:43 PAGE 7   

 366          函数名: wait
 367          功能: 延时
 368          形式参数:del--延时长度
 369          返回值:无
 370          *********************************************/
 371          void wait(unsigned char del)
 372          {
 373   1              unsigned char l;
 374   1              for(l=0;l<del;l++);
 375   1      }
 376          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    657    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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