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

📄 0.lst

📁 2010年新增TX-1C程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 0
OBJECT MODULE PLACED IN 0.OBJ
COMPILER INVOKED BY: D:\处理软件\keil\C51\BIN\C51.EXE 0.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /*******************************************************************/
   2          /*                                                                 */
   3          /* TX-51STAR单片机开发系统演示程序 - DS18B20-64位序列码读取程序     */
   4          /*                                                                  *
   5          * LCD1602显示                                                           *
   6          *                                                                       *
   7          * 工作芯片:STC89C516      晶振频率:11.0592MHz                         *
   8          *                                                                       *
   9          * 版本: V1.0 (2009/1/2)                                                *
  10          * 作者: 郭天祥 (Email: txmcu@163.com)                                  *
  11          * 网站: www.tx-power.com(天祥电子)                                     *
  12          * 邮箱: txmcu@163.com                                                  *
  13          *                                                                       *
  14          *【版权】Copyright(C)天祥电子 www.tx-power.com  All Rights Reserved *
  15          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!         *
  16          *                                                                       *
  17          /*******************************************************************/
  18          /*读取DS18B20的64位序列码并显示在1602液晶上,如果读取正确结果,则在
  19          液晶第一行显示DS18B20 OK,第二行显示序列码,如果读取失败,则在液晶上
  20          显示DS18B20  ERR0R PLEASE CHECK ,用户可通过更改18B20接口自己外接。 */
  21          #include <reg51.h>
  22          #include <intrins.h>
  23          
  24          #define uchar unsigned char
  25          #define uint  unsigned int
  26          
  27          sbit DQ = P2^2;  //定义DS18B20端口DQ  
  28          sbit BEEP=P2^3 ; //蜂鸣器驱动线
  29          
  30          bit  presence ;
  31          
  32          sbit LCD_RS = P3^5;             
  33          //sbit LCD_RW = P2^1;
  34          sbit LCD_EN = P3^4;
  35          
  36          uchar code  cdis1[ ] = {"   DS18B20 OK   "};
  37          uchar code  cdis2[ ] = {"                "};
  38          uchar code  cdis3[ ] = {" DS18B20  ERR0R "};
  39          uchar code  cdis4[ ] = {"  PLEASE CHECK  "};
  40          
  41          unsigned char data  display[2] = {0x00,0x00};
  42                                              
  43          unsigned char data  RomCode[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  44          
  45          unsigned char Temp;
  46          unsigned char  crc;
  47          
  48          void beep();
  49          
  50          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  51          
  52          /*******************************************************************/
  53          void delay1(int ms)
  54          {
  55   1       unsigned char y;
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 2   

  56   1        while(ms--)
  57   1       {
  58   2        for(y = 0; y<250; y++)
  59   2        {
  60   3         _nop_();
  61   3         _nop_();
  62   3         _nop_();
  63   3         _nop_();
  64   3        }
  65   2       }
  66   1      }
  67          
  68          /******************************************************************/
  69          /*                                                                */
  70          /*检查LCD忙状态                                                   */
  71          /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。     */
  72          /*                                                                */
  73          /******************************************************************/ 
  74          
  75          bit lcd_busy()
  76           {                          
  77   1          bit result;
  78   1          LCD_RS = 0;
  79   1      //    LCD_RW = 1;
  80   1          LCD_EN = 1;
  81   1          delayNOP();
  82   1          result = (bit)(P0&0x80);
  83   1          LCD_EN = 0;
  84   1          return(result); 
  85   1       }
  86          
  87          /*******************************************************************/
  88          /*                                                                 */
  89          /*写指令数据到LCD                                                  */
  90          /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  91          /*                                                                 */
  92          /*******************************************************************/
  93          
  94          void lcd_wcmd(uchar cmd)
  95          
  96          {                          
  97   1       //  while(lcd_busy());
  98   1          LCD_RS = 0;
  99   1       //   LCD_RW = 0;
 100   1          LCD_EN = 0;
 101   1          _nop_();
 102   1          _nop_(); 
 103   1          P0 = cmd;
 104   1          delayNOP();
 105   1          LCD_EN = 1;
 106   1          delayNOP();
 107   1          LCD_EN = 0;  
 108   1              delay1(5);
 109   1      }
 110          
 111          /*******************************************************************/
 112          /*                                                                 */
 113          /*写显示数据到LCD                                                  */
 114          /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
 115          /*                                                                 */
 116          /*******************************************************************/
 117          
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 3   

 118          void lcd_wdat(uchar dat)
 119          {                          
 120   1      //   while(lcd_busy());
 121   1          LCD_RS = 1;
 122   1      //    LCD_RW = 0;
 123   1          LCD_EN = 0;
 124   1          P0 = dat;
 125   1          delayNOP();
 126   1          LCD_EN = 1;
 127   1          delayNOP();
 128   1          LCD_EN = 0; 
 129   1              delay1(5);
 130   1      }
 131          
 132          /*******************************************************************/
 133          /*                                                                 */
 134          /*  LCD初始化设定                                                  */
 135          /*                                                                 */
 136          /*******************************************************************/
 137          
 138          void lcd_init()
 139          { 
 140   1          delay1(15);   
 141   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 142   1                  
 143   1          lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
 144   1          delay1(5);
 145   1          lcd_wcmd(0x38);         
 146   1          delay1(5);
 147   1          lcd_wcmd(0x38);         
 148   1          delay1(5);
 149   1      
 150   1          lcd_wcmd(0x0c);      //显示开,关光标
 151   1          delay1(5);
 152   1          lcd_wcmd(0x06);      //移动光标
 153   1          delay1(5);
 154   1          lcd_wcmd(0x01);      //清除LCD的显示内容
 155   1          delay1(5);
 156   1      }
 157          
 158          /*******************************************************************/
 159          /*                                                                 */
 160          /*  设定显示位置                                                   */
 161          /*                                                                 */
 162          /*******************************************************************/
 163          
 164          void lcd_pos(uchar pos)
 165          {                          
 166   1        lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
 167   1      }
 168          
 169          /*******************************************************************/
 170          /*                                                                 */
 171          /*us级延时函数                                                     */
 172          /*                                                                 */
 173          /*******************************************************************/
 174          
 175          void Delay(unsigned int num)
 176          {
 177   1        while( --num );
 178   1      }
 179          
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 4   

 180          /*******************************************************************/
 181          /*                                                                 */
 182          /*初始化ds1820                                                     */
 183          /*                                                                 */
 184          /*******************************************************************/
 185          Init_DS18B20(void)
 186          {  
 187   1           DQ = 1;      //DQ复位
 188   1           Delay(8);    //稍做延时
 189   1      
 190   1           DQ = 0;      //将DQ拉低
 191   1           Delay(90);   //精确延时 大于 480us
 192   1      
 193   1           DQ = 1;       //拉高总线
 194   1           Delay(8);
 195   1      
 196   1           presence = DQ;    //读取存在信号
 197   1           Delay(100);
 198   1           DQ = 1; 
 199   1           
 200   1           return(presence); //返回信号,0=presence,1= no presence
 201   1      }
 202          
 203          /*******************************************************************/
 204          /*                                                                 */
 205          /* 读一位(bit)                                                   */
 206          /*                                                                 */
 207          /*******************************************************************/
 208          uchar read_bit(void) 
 209          {
 210   1      unsigned char i;
 211   1      DQ = 0;                  //将DQ 拉低开始读时间隙
 212   1      DQ = 1;                         // then return high
 213   1      for (i=0; i<3; i++);    // 延时15μs
 214   1      return(DQ);                     // 返回 DQ 线上的电平值
 215   1      }
 216          
 217          /*******************************************************************/
 218          /*                                                                 */
 219          /* 读一个字节                                                      */
 220          /*                                                                 */
 221          /*******************************************************************/
 222           ReadOneChar(void)
 223          {
 224   1      unsigned char i = 0;
 225   1      unsigned char dat = 0;
 226   1      
 227   1      //for (i = 8; i > 0; i--)
 228   1      //  {
 229   1      //       read_bit();
 230   1      //    DQ = 0; // 给脉冲信号
 231   1      //     dat >>= 1;
 232   1      //    DQ = 1; // 给脉冲信号
 233   1      for (i=0;i<8;i++) 
 234   1      {                               // 读取字节,每次读取一个字节
 235   2      if(read_bit()) dat|=0x01<<i;    // 然后将其左移
 236   2      
 237   2      //    if(DQ)
 238   2      //     dat |= 0x80;
 239   2          Delay(4);

⌨️ 快捷键说明

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