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

📄 temp.lst

📁 18b20的c程序+串口通讯+595显示温度
💻 LST
字号:
C51 COMPILER V8.02   TEMP                                                                  03/25/2008 11:08:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEMP
OBJECT MODULE PLACED IN temp.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE temp.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          #include <iccard.h>
   3          #include<stdio.h> 
   4          //bit key_flag;
   5          //uchar key_value;
   6          #define uchar unsigned char
   7          #define uint  unsigned int
   8          #define nop() _nop_();_nop_();
   9          
  10          uint16 temper;
  11          uchar fuhao;
  12          unsigned char tmp;
  13          
  14          sbit key0=P1^0;
  15          //sbit dat_1820=P2^4;
  16          sbit CLK=P0^6;
  17          sbit DAT=P0^4;
  18          sbit DCLK=P0^7;
  19          //sbit CS=P2^3;
  20          uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
  21          void send_char(unsigned char txd);
  22          
  23          //串口初始化
  24          void initcom(void)
  25          {
  26   1              TMOD = 0x20;                    // 定时器1工作于8位自动重载模式, 用于产生波特率
  27   1              TH1 = 0x0F3;                            // 波特率2400
  28   1              TL1 = 0x0F3;
  29   1      
  30   1              SCON = 0x50;                    // 设定串行口工作方式  
  31   1              PCON &= 0xef;                   // 波特率不倍增
  32   1      
  33   1              ES=1;      //允许串行口中断
  34   1              TR1 = 1;                                // 启动定时器1
  35   1              IE = 0x00;                              // 禁止任何中断
  36   1      }
  37          
  38          void send_char(unsigned char txd)
  39          // 传送一个字符
  40          {
  41   1              SBUF = txd;
  42   1              while(!TI);                             // 等特数据传送
  43   1              TI = 0;                                 // 清除数据传送标志
  44   1      }
  45          
  46          
  47          void delay(uchar x)//系统延时
  48          {
  49   1              while(x--);
  50   1      }
  51          
  52          
  53          void delayns()//延时
  54          {
  55   1              uchar i;
C51 COMPILER V8.02   TEMP                                                                  03/25/2008 11:08:26 PAGE 2   

  56   1              for(i=0;i<10;i++);
  57   1      }
  58          void delayms(uint32 x)//长延时
  59          {
  60   1              uint32 i;
  61   1              for(;x>0;x--)
  62   1                      for(i=5000;i>0;i--);
  63   1      }
  64          ////--------------------------------------------------
  65          //=====================================================
  66          void sendbyte(uchar byte)
  67          {    
  68   1              uchar num,i; 
  69   1              num=tab[byte];
  70   1              
  71   1         for(i=0;i<8;i++)
  72   1              {
  73   2               CLK=0;
  74   2               DAT=num&0x80;
  75   2               num=num<<1;
  76   2               
  77   2               CLK=1;
  78   2               }
  79   1      //         RCLK=0;
  80   1      //         nop();
  81   1      //         nop();
  82   1      //         RCLK=1;
  83   1               
  84   1      }
  85          
  86          void out595(void)
  87          {
  88   1              DCLK=0;
  89   1             delay(29);
  90   1             // nop();
  91   1              DCLK=1;
  92   1      }
  93          
  94          void display(uchar number)
  95          {
  96   1       uchar sw,gw;
  97   1       sw=number/10;
  98   1       gw=number-10*sw;
  99   1       sendbyte(gw);
 100   1       sendbyte(sw);
 101   1       out595();
 102   1      }
 103          
 104          
 105          /*****************LCD程序END****************/ 
 106           uchar init_1820()//初始化1820
 107          {
 108   1              dat_1820=1;
 109   1              delay(8);
 110   1              dat_1820=0;
 111   1              delay(80);
 112   1              dat_1820=1;
 113   1              delay(14);
 114   1              if(dat_1820==0)
 115   1              {
 116   2                      delay(20);
 117   2                      return(1);
C51 COMPILER V8.02   TEMP                                                                  03/25/2008 11:08:26 PAGE 3   

 118   2              }
 119   1              else return(2);
 120   1              dat_1820=1;
 121   1              delay(20);
 122   1      
 123   1      }
 124          
 125          void wr_1820(uchar x)//写入1字节数据
 126          {
 127   1              uchar i;
 128   1              for(i=8;i>0;i--)
 129   1              {
 130   2                      dat_1820=1;
 131   2                      delay(1);
 132   2                      dat_1820=0;
 133   2                      delay(1);
 134   2                      if(x&0x01)dat_1820=1;
 135   2                      else dat_1820=0;
 136   2                      delay(20);
 137   2      
 138   2                      dat_1820=1;
 139   2      //              delay(1);
 140   2                      x>>=1;
 141   2              }
 142   1              
 143   1      }
 144          
 145          void rd_1820()//读1字节数据
 146          {
 147   1              uint16 i;
 148   1              uchar j;
 149   1              i=0;
 150   1              for(j=16;j>0;j--)
 151   1              {
 152   2                      dat_1820=1;
 153   2                      delay(1);
 154   2                      dat_1820=0;
 155   2                      delay(1);
 156   2                      dat_1820=1;
 157   2                      if(dat_1820)
 158   2                      {
 159   3                              i>>=1;
 160   3                              i=i|0x8000;     
 161   3                      }
 162   2                      else i>>=1;
 163   2                      delay(20);
 164   2                      dat_1820=1;
 165   2      
 166   2              }
 167   1              temper=i;
 168   1      }
 169          
 170          
 171          void get_temper()//进行温度测量并取温度数据
 172          {
 173   1              uchar i;
 174   1              i=init_1820();//
 175   1              if(i==1)//判断1820是否存在
 176   1              {
 177   2                      wr_1820(0xcc);//跳过rom
 178   2                      wr_1820(0x44);//发送温度转换指令
 179   2                      delayms(3);
C51 COMPILER V8.02   TEMP                                                                  03/25/2008 11:08:26 PAGE 4   

 180   2                      init_1820();
 181   2                      wr_1820(0xcc);//跳过rom
 182   2                      wr_1820(0xbe);//去温度数据
 183   2                      rd_1820();//读出数据
 184   2              }
 185   1      
 186   1      }
 187          
 188          void init_sys()//系统初始化设置 
 189          {
 190   1      //      P0=0;//P0口清零 
 191   1              P2=0x86;//屏蔽其它模块
 192   1              P1=P1&0X01;;//
 193   1      }
 194          
 195          
 196          void main()
 197          {  uchar t;
 198   1        uchar sw,gw,k;
 199   1      
 200   1          initcom();
 201   1              init_sys();
 202   1      
 203   1                     
 204   1              while(1)
 205   1              {//display(11);
 206   2                      get_temper();
 207   2              if(!key0)
 208   2                      {
 209   3                        delayms(5);
 210   3                        if(!key0)
 211   3                        {
 212   4                        t=temper/16; 
 213   4                        //k=(t&0xf0)*16+(t&0x0f);
 214   4                        k=(temper)/16;
 215   4                        /*{
 216   4                        if(k>=16)
 217   4                        {k+=16;}
 218   4                        if(k>=32)
 219   4                        {k+=32;}
 220   4                        if(k>=48)
 221   4                        {k+=48;}
 222   4                        if(k>=64)
 223   4                        {k+=64;}
 224   4                        }*/
 225   4                        sw=k/10;
 226   4                        gw=k%10;
 227   4                        send_char(t);
 228   4             display(k);
 229   4                        }
 230   3                      }
 231   2               
 232   2              /* if(RI)
 233   2               {RI=0;
 234   2                tmp=SBUF;
 235   2               if(tmp==0x01)
 236   2           { get_temper();
 237   2                  delay(5);
 238   2                      t=temper/16;
 239   2              send_char(t);
 240   2           }
 241   2      
C51 COMPILER V8.02   TEMP                                                                  03/25/2008 11:08:26 PAGE 5   

 242   2               }*/
 243   2               else   delayms(5);
 244   2              }
 245   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    449    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      10
   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 + -