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

📄 text1.lst

📁 个人单片机入门程序集合 。很适合刚学单片机的人。用的是keil proteus
💻 LST
📖 第 1 页 / 共 2 页
字号:
 174   1              bit btmp;
 175   1              for(j=1;j<=8;j++)
 176   1              {
 177   2                      btmp = b&0x01;
 178   2                      b = b>>1;               // 取下一位(由低位向高位)
 179   2                      if (btmp)
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 22:47:27 PAGE 4   

 180   2                      {
 181   3                              /* 写1 */
 182   3                              DQ = 0;
 183   3                              i++;i++;        // 延时,使得15us以内拉高
 184   3                              DQ = 1;
 185   3                              i = 8;
 186   3                              while(i>0) i--; // 整个写1时隙不低于60us 
 187   3                      }
 188   2                      else
 189   2                      {
 190   3                              /* 写0 */
 191   3                              DQ = 0;                 
 192   3                              i = 8;
 193   3                              while(i>0) i--; // 保持低在60us到120us之间
 194   3                              DQ = 1;
 195   3                              i++;
 196   3                              i++;
 197   3                      }
 198   2              }
 199   1      }
 200          
 201          /* 启动温度转换 */
 202          void convert(void)
 203          {
 204   1              TxReset();                      // 产生复位脉冲,初始化DS18B20
 205   1              RxWait();                       // 等待DS18B20给出应答脉冲
 206   1              delay(1);                       // 延时
 207   1              WrByte(0xcc);           // skip rom 命令
 208   1              WrByte(0x44);           // convert T 命令
 209   1      }
 210          
 211          /* 读取温度值 */
 212          void RdTemp(void)
 213          {
 214   1              TxReset();                      // 产生复位脉冲,初始化DS18B20 
 215   1              RxWait();                       // 等待DS18B20给出应答脉冲
 216   1              delay(1);                       // 延时
 217   1              WrByte(0xcc);           // skip rom 命令
 218   1              WrByte(0xbe);           // read scratchpad 命令
 219   1              tplsb = RdByte();       // 温度值低位字节(其中低4位为二进制的“小数”部分)
 220   1              tpmsb = RdByte();       // 高位值高位字节(其中高5位为符号位)          
 221   1      }
 222          
 223          
 224          /************键盘扫描*************/
 225          uchar keyscan(void)
 226          {
 227   1              uchar scancode,tmpcode;
 228   1              P1 = 0xf0;
 229   1              if ((P1&0xf0)!=0xf0)
 230   1              {
 231   2                      delay(125);
 232   2                      if ((P1&0xf0)!=0xf0)
 233   2                      {
 234   3                              scancode = 0xfe;
 235   3                              while((scancode&0x10)!=0)
 236   3                              {
 237   4                                      P1 = scancode;
 238   4                                      if ((P1&0xf0)!=0xf0)
 239   4                                      {
 240   5                                              tmpcode = (P1&0xf0)|0x0f;
 241   5                                              return((~scancode)+(~tmpcode));
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 22:47:27 PAGE 5   

 242   5                                      }
 243   4                                      else scancode = (scancode<<1)|0x01;     
 244   4                              }
 245   3                      }
 246   2              }
 247   1              return(0);
 248   1      }
 249          
 250          void gettemp()
 251          {
 252   1         delay(1);            // 延时1ms
 253   1         convert();           // 启动温度转换,需要750ms
 254   1         delay(1000); // 延时1s
 255   1         RdTemp();
 256   1         temp=(tpmsb&0x07)*16+((tplsb&0xf0)>>4);
 257   1         tempx=tplsb&0x0f;
 258   1      }
 259          
 260          void xianshi(unsigned long a)
 261          {          unsigned long c,p=0;
 262   1                                      if (a!=0) 
 263   1                              {       c=a/100000000;
 264   2                                      if(c!=0)
 265   2                      {lcd1602_wrdata(c+0x30);
 266   3                                   p=1;
 267   3                                       }
 268   2                      delay(10);
 269   2                                      c=(a%100000000)/10000000;
 270   2                                      if(c!=0)
 271   2                      {lcd1602_wrdata(c+0x30);
 272   3                                   p=1;
 273   3                                       }
 274   2                      delay(10);
 275   2                                      c=(a%10000000)/1000000;
 276   2                                      if(c!=0)
 277   2                      {lcd1602_wrdata(c+0x30);
 278   3                                   p=1;
 279   3                                       }
 280   2                      delay(10);
 281   2                                      c=(a%1000000)/100000;
 282   2                                      if(c!=0)
 283   2                      {lcd1602_wrdata(c+0x30);
 284   3                                   p=1;
 285   3                                       }
 286   2                      delay(10);
 287   2                                      c=(a%100000)/10000;
 288   2                                      if(c!=0)
 289   2                      {lcd1602_wrdata(c+0x30);
 290   3                                   p=1;
 291   3                                       }
 292   2                      delay(10);
 293   2                      c=(a%10000)/1000;
 294   2                      if(c!=0 || p==1)
 295   2                       {lcd1602_wrdata(c+0x30);
 296   3                                    }
 297   2                      delay(10);
 298   2                                      c=(a%1000)/100;
 299   2                      if(c!=0 || p==1)
 300   2                       {lcd1602_wrdata(c+0x30);
 301   3                                    }
 302   2                      delay(10);
 303   2                                      c=(a%100)/10;
C51 COMPILER V7.20   TEXT1                                                                 07/17/2007 22:47:27 PAGE 6   

 304   2                      if(c!=0 || p==1)
 305   2                       {lcd1602_wrdata(c+0x30);
 306   3                                    }
 307   2                      delay(10);
 308   2                          c=a%10+0x30;
 309   2                          lcd1602_wrdata(c);   
 310   2                                      delay(10);
 311   2                  }
 312   1      }
 313          /* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。
 314             tplsb其中低4位为二进制的“小数”部分;tpmsb其中高
 315             5位为符号位。真正通过数码管输出时,需要进行到十进
 316             制有符号实数(包括小数部分)的转换。              */
 317          void main(void)
 318          {
 319   1          
 320   1          delay(2);
 321   1          lcd1602_bus=0xff;
 322   1          lcd1602_init();
 323   1          lcd1602_clear();
 324   1          while(1)
 325   1              {           
 326   2                        gettemp();
 327   2                        xianshi(temp);
 328   2                        tempx=tempx*1000/16;
 329   2                        
 330   2                       
 331   2                        lcd1602_wrdata('.');
 332   2                        xianshi(tempx);
 333   2                      lcd1602_bus=0xff;
 334   2              lcd1602_init();
 335   2              lcd1602_clear();
 336   2              }
 337   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1323    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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