18b20的c程序+串口通讯+595显示温度

源代码在线查看: com.lst

软件大小: 98 K
上传用户: tzxiaojian
关键词: 18b20 595 程序 串口通讯
下载地址: 免注册下载 普通下载 VIP

相关代码

				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 
				  11          #include 
				  12          #include 
				  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				  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				  51   1              {
				  52   2               CLK=0;
				  53   2               DAT=num&0x80;
				  54   2               num=num				  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)
							

相关资源