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

📄 com.lst

📁 18b20的c程序+串口通讯+595显示温度
💻 LST
字号:
C51 COMPILER V7.00  COM                                                                    03/24/2007 22:15:32 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE COM
OBJECT MODULE PLACED IN com.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE com.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*******************************************************************************
   2          ********************************************************************************
   3          *  描述:                                                                       *
   4          *         单片机接收主机的数据,然后将数据传送到P0口, 并传回给主机;             *
   5          *         当按下K1时, 单片机发送字串"welcome! www.willar.com\n\r" 给主机       * 
   6          *                                                                              *
   7          * 
   8          *******************************************************************************/   
   9          
  10          #include <reg51.h>
  11          #include <intrins.h>
  12          #include <iccard.h>
  13          unsigned char key_s, key_v, tmp;
  14          
  15          char code str[] = "I am a good boy!!! \n";
  16          
  17          #define uint unsigned int
  18          #define uchar unsigned char
  19          #define nop() _nop_();_nop_();
  20          
  21          sbit key0=P1^0;
  22          uint16 temper;
  23          sbit CLK=P0^6;
  24          sbit DAT=P0^4;
  25          sbit RCLK=P0^7;
  26          //sbit CS=P2^3;
  27          uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
  28          
  29          void send_str();
  30          bit     scan_key();
  31          void key_pro();
  32          void delayms(unsigned char ms);
  33          void send_char(unsigned char txd);
  34          
  35          sbit    K1 = P1^0;
  36          void delay(uint j)//延时
  37          { uchar m;
  38   1      for(;j>0;j--)
  39   1      {
  40   2      for(m=0;m<=60;m++)
  41   2       {;}
  42   2      }
  43   1      }
  44          //=====================================================
  45          void sendbyte(uchar byte)
  46          {    
  47   1              uchar num,i; 
  48   1              num=tab[byte];
  49   1              
  50   1         for(i=0;i<8;i++)
  51   1              {
  52   2               CLK=0;
  53   2               DAT=num&0x80;
  54   2               num=num<<1;
  55   2               
C51 COMPILER V7.00  COM                                                                    03/24/2007 22:15:32 PAGE 2   

  56   2               CLK=1;
  57   2               }
  58   1      //         RCLK=0;
  59   1      //         nop();
  60   1      //         nop();
  61   1      //         RCLK=1;
  62   1               
  63   1      }
  64          
  65          void out595(void)
  66          {
  67   1              RCLK=1;
  68   1              nop();
  69   1              RCLK=0;
  70   1      }
  71          
  72          void display(uchar number)
  73          {
  74   1       uchar sw,gw;
  75   1       sw=number/10;
  76   1       gw=number-(10*sw);
  77   1       sendbyte(gw); 
  78   1       sendbyte(sw);
  79   1       //delay(18);
  80   1       out595();
  81   1      }
  82          
  83          //=====================================================================
  84          //=====================================================
  85          //串口初始化
  86          void initcom(void)
  87          {
  88   1      
  89   1              TMOD = 0x20;                    // 定时器1工作于8位自动重载模式, 用于产生波特率
  90   1              TH1 = 0x0F3;                            // 波特率2400
  91   1              TL1 = 0x0F3;
  92   1      
  93   1              SCON = 0x50;                    // 设定串行口工作方式  
  94   1              PCON &= 0xef;                   // 波特率不倍增
  95   1      
  96   1         ES=1;      //允许串行口中断
  97   1              TR1 = 1;                                // 启动定时器1
  98   1              IE = 0x00;                              // 禁止任何中断
  99   1      
 100   1      }
 101          
 102          void send_char(unsigned char txd)
 103          // 传送一个字符
 104          {
 105   1              SBUF = txd;
 106   1              while(!TI);                             // 等特数据传送
 107   1              TI = 0;                                 // 清除数据传送标志
 108   1      }
 109          
 110          void send_str()
 111          // 传送字串
 112          {
 113   1              unsigned char i = 0;
 114   1              while(str[i] != '\0')
 115   1              {
 116   2                      SBUF = str[i];
 117   2                      while(!TI);                             // 等特数据传送
C51 COMPILER V7.00  COM                                                                    03/24/2007 22:15:32 PAGE 3   

 118   2                      TI = 0;                                 // 清除数据传送标志
 119   2                      i++;                                    // 下一个字符
 120   2              }       
 121   1      }
 122          
 123          void delayms(unsigned char ms)  
 124          // 延时子程序
 125          {                                               
 126   1              unsigned char i;
 127   1              while(ms--)
 128   1              {
 129   2                      for(i = 0; i < 120; i++);
 130   2              }
 131   1      }
 132          
 133          
 134          
 135          bit scan_key()  
 136          // 扫描按键
 137          {
 138   1              key_s = 0x00;
 139   1              key_s |= K1;
 140   1              return(key_s ^ key_v);  
 141   1      }
 142          void key_pro()
 143          {
 144   1       if ((key_v&0x01)==0)
 145   1      { send_str();}
 146   1      
 147   1      }
 148          
 149          
 150          uchar init_1820()//初始化1820
 151          {
 152   1              dat_1820=1;
 153   1              delay(8);
 154   1              dat_1820=0;
 155   1              delay(80);
 156   1              dat_1820=1;
 157   1              delay(14);
 158   1              if(dat_1820==0)
 159   1              {
 160   2                      delay(20);
 161   2                      return(1);
 162   2              }
 163   1              else return(2);
 164   1              dat_1820=1;
 165   1              delay(20);
 166   1      
 167   1      }
 168          
 169          void wr_1820(uchar x)//写入1字节数据
 170          {
 171   1              uchar i;
 172   1              for(i=8;i>0;i--)
 173   1              {
 174   2                      dat_1820=1;
 175   2                      delay(1);
 176   2                      dat_1820=0;
 177   2                      delay(1);
 178   2                      if(x&0x01)dat_1820=1;
 179   2                      else dat_1820=0;
C51 COMPILER V7.00  COM                                                                    03/24/2007 22:15:32 PAGE 4   

 180   2                      delay(20);
 181   2      
 182   2                      dat_1820=1;
 183   2      //              delay(1);
 184   2                      x>>=1;
 185   2              }
 186   1              
 187   1      }
 188          
 189          void rd_1820()//读1字节数据
 190          {
 191   1              uint16 i;
 192   1              uchar j;
 193   1              i=0;
 194   1              for(j=16;j>0;j--)
 195   1              {
 196   2                      dat_1820=1;
 197   2                      delay(1);
 198   2                      dat_1820=0;
 199   2                      delay(1);
 200   2                      dat_1820=1;
 201   2                      if(dat_1820)
 202   2                      {
 203   3                              i>>=1;
 204   3                              i=i|0x8000;     
 205   3                      }
 206   2                      else i>>=1;
 207   2                      delay(20);
 208   2                      dat_1820=1;
 209   2      
 210   2              }
 211   1              temper=i;
 212   1      }
 213          
 214          
 215          void get_temper()//进行温度测量并取温度数据
 216          {
 217   1              uchar i;
 218   1              i=init_1820();//
 219   1              if(i==1)//判断1820是否存在
 220   1              {
 221   2                      wr_1820(0xcc);//跳过rom
 222   2                      wr_1820(0x44);//发送温度转换指令
 223   2                      delayms(3);
 224   2                      init_1820();
 225   2                      wr_1820(0xcc);//跳过rom
 226   2                      wr_1820(0xbe);//去温度数据
 227   2                      rd_1820();//读出数据
 228   2              }
 229   1      
 230   1      }
 231          
 232          void init_sys()//系统初始化设置 
 233          {
 234   1      //      P0=0;//P0口清零 
 235   1              P2=0x86;//屏蔽其它模块
 236   1              P1=P1&0X01;;//
 237   1      }
 238          
 239          
 240          void main()
 241          {  uchar t;
C51 COMPILER V7.00  COM                                                                    03/24/2007 22:15:32 PAGE 5   

 242   1        uint sw,gw,k;
 243   1      
 244   1          initcom();
 245   1              init_sys();
 246   1      
 247   1      
 248   1                     
 249   1              while(1)
 250   1              {
 251   2                      get_temper();
 252   2                      if(!key0)
 253   2                      {
 254   3                        delayms(5);
 255   3                        if(!key0)
 256   3                        {
 257   4                        t=temper/16; 
 258   4                        k=(temper*10/100);
 259   4                        sw=k/10;
 260   4                        gw=k%10;
 261   4                        send_char(t);
 262   4                        
 263   4                        WriData(sw+0x30);WriData(gw+0x30);
*** WARNING C206 IN LINE 263 OF COM.C: 'WriData': missing function-prototype
*** ERROR C267 IN LINE 263 OF COM.C: 'WriData': requires ANSI-style prototype
 264   4                        }
 265   3                      }
 266   2                      delayms(5);
 267   2              }
 268   1      }

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

⌨️ 快捷键说明

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