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

📄 fyd.lst

📁 基于51系列单片机以DS18B20为温度传感器的数字温度计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   FYD                                                                   08/01/2008 14:37:53 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FYD
OBJECT MODULE PLACED IN FYD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FYD.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include <intrins.h>
   3          #define uchar unsigned char
   4          #define uint   unsigned int
   5          
   6          sbit CS  = P2^0;//指令数据控制端
   7          sbit SID = P2^1;//R/W读写控制端
   8          sbit CLK = P2^2;//使能端
   9          
  10          //sbit DQ  = P3^7;//DS18B20数据总线
  11          sbit DQ    = P3^0;//DS18B20数据总线
  12          sbit buzzer= P1^5;//报警器接口
  13          sbit set   = P2^3;//时间调整键
  14          sbit ret   = P2^4;//定时按键
  15          sbit add   = P2^5;//加一键
  16          sbit dec   = P2^6;//减一键 
  17          sbit led1  = P1^2;//指示灯
  18          
  19          uchar ms50=0,second=0,minite=0,hour=12;//实际时间存放变量 
  20          uchar hh  =0,ff=0,KT=0;//设定时间变量
  21          uint tvalue;//温度值
  22          bit tflag;//温度正负标志
  23          uint n=0;
  24          uchar T[8]={0x3a,0,0,0,0,0x2e,0,0x43};//温度存放缓冲区
  25          uchar sheding[8]={0x3a,0,0,0x3a,0,0,0x20,0x20};//设定时间存放数组
  26          /*************************************************************************************************/
  27          
  28          /*****************************初始化子程序******************************/
  29          uchar  code huanyinghuamian[]={"欢迎来到诚信院@"};
  30          uchar  code word[]            ={"时钟温度显示系统"};
  31          uchar  code guanggao[]        ={"嵌入式爱好者协会"};
  32          uchar  code tegong[]          ={"嵌协特工队制作!!"};
  33          //uchar  code huanyinghuamian2[]={"Welcome to here!"};
  34          //uchar  code huanyinghuamian3[]={"We'll be friend!"};
  35          /***********************************************************************/
  36          uchar  code numble[16]={"当前时间       "};
  37          uchar  code name[16]  ={"当前温度       "};
  38          //uchar  code zhifu[]={"女人只能呵护与爱"};
  39          uchar  code zhifu[]   ={"设定时间      "};
  40          /************************温度测试模块***********************/
  41          /***********ds18b20延迟子函数(晶振12MHz )*******/ 
  42          
  43          /******************************ds1820程序***************************************/
  44          void delay_18B20(unsigned int i)//延时1微秒
  45          {
  46   1         while(i--);
  47   1      }
  48          
  49          
  50          void ds1820rst()/*ds1820复位*/
  51          { unsigned char x=0;
  52   1      DQ = 1;          //DQ复位
  53   1      delay_18B20(4); //延时
  54   1      DQ = 0;          //DQ拉低
  55   1      delay_18B20(100); //精确延时大于480us
C51 COMPILER V7.50   FYD                                                                   08/01/2008 14:37:53 PAGE 2   

  56   1      DQ = 1;          //拉高
  57   1      delay_18B20(40); 
  58   1       } 
  59          
  60          
  61          uchar ds1820rd()/*读数据*/
  62          { unsigned char i=0;
  63   1        unsigned char dat = 0;
  64   1        for (i=8;i>0;i--)
  65   1        {   DQ = 0; //给脉冲信号
  66   2            dat>>=1;
  67   2            DQ = 1; //给脉冲信号
  68   2            if(DQ)
  69   2            dat|=0x80;
  70   2            delay_18B20(10);
  71   2        }
  72   1         return(dat);
  73   1      }
  74          
  75          
  76          void ds1820wr(uchar wdata)/*写数据*/
  77          {
  78   1        unsigned char i=0;
  79   1          for (i=8; i>0; i--)
  80   1          { DQ = 0;
  81   2            DQ = wdata&0x01;
  82   2            delay_18B20(10);
  83   2            DQ = 1;
  84   2            wdata>>=1;
  85   2          }
  86   1      }
  87          
  88          
  89          
  90          read_temp()/*读取温度值并转换*/
  91          {
  92   1         uchar a,b;
  93   1         ds1820rst();    
  94   1         ds1820wr(0xcc);//*跳过读序列号*/
  95   1         ds1820wr(0x44);//*启动温度转换*/
  96   1         ds1820rst();    
  97   1         ds1820wr(0xcc);//*跳过读序列号*/ 
  98   1         ds1820wr(0xbe);//*读取温度*/ 
  99   1         a=ds1820rd();
 100   1         b=ds1820rd();
 101   1         tvalue=b;
 102   1         tvalue<<=8;
 103   1         tvalue=tvalue|a;
 104   1         if(tvalue<0x0fff)
 105   1            tflag=0;
 106   1         else
 107   1           {tvalue=~tvalue+1;
 108   2            tflag=1;}
 109   1      
 110   1         tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 111   1         return(tvalue);
 112   1      }
 113          /*****************************************************************/
 114          /***************************液晶显示模块**************************/
 115          /*****************************延时子程序**************************/
 116          void delay( uint t )
 117          {
C51 COMPILER V7.50   FYD                                                                   08/01/2008 14:37:53 PAGE 3   

 118   1        uint i;
 119   1        while( t-- )
 120   1          for(i=0;i<120;i++);      
 121   1      }
 122          
 123          /*****************************写液晶子程序******************************/
 124          /************************************************************************
 125          说明:word:要写的内容 dat:1为数据 0为指令
 126          *************************************************************************/
 127          void Writelcd(uchar word,uchar dat)
 128          {
 129   1          uchar lcddat[3];
 130   1          uchar i,j,k;
 131   1          lcddat[0] = ( 0xf8+(dat<<1) );//第一个字节
 132   1          lcddat[1] = ( word&0xf0 ) ;     //第二个字节 内容的高四位+0000
 133   1          lcddat[2] = ( (word<<4)&0xf0 ) ;//第三个字节 内容的第四位+0000
 134   1          CS  = 0;
 135   1          CS  = 1;
 136   1          CLK = 0;
 137   1          for(i=0;i<3;i++)
 138   1          {
 139   2              j = lcddat[i];
 140   2              for(k=0;k<8;k++)
 141   2              {
 142   3                  if( (j<<k)&0x80 )
 143   3                       SID = 1;        
 144   3                  else             
 145   3                       SID = 0;            
 146   3                  /**时钟下降沿写入数据**/
 147   3                  CLK = 1;
 148   3                  CLK = 0; 
 149   3              }
 150   2          }    
 151   1      } 
 152          
 153          void Serial_int(void)
 154          {    
 155   1          CS  =1;
 156   1          SID =0;
 157   1          CLK =0; 
 158   1          Writelcd( 0x30,0 );//功能设置,一次送8位数据,基本指令集
 159   1       //   delay( 50 );
 160   1          Writelcd( 0x30,0 );//功能设置,一次送8位数据,基本指令集
 161   1       //   delay( 40 );
 162   1          Writelcd( 0x0c,0 );//0000,1100  整体显示,游标off,游标位置off
 163   1      //    delay( 50 );
 164   1          Writelcd( 0x01,0 );//0000,0001 清DDRAM
 165   1       //   delay( 10000 );
 166   1          Writelcd( 0x02,0 );//0000,0010 DDRAM地址归位
 167   1      //    delay( 50 );
 168   1      
 169   1      //  delay( 50 );
 170   1          Writelcd( 0x80,0 );//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//        
 171   1      //    delay( 150 );
 172   1          Writelcd( 0x06,0 );    
 173   1      }
 174          
 175          /***********************按键处理程序模块****************************/
 176          void key_set()
 177          {
 178   1        if(set==0)
 179   1        {
C51 COMPILER V7.50   FYD                                                                   08/01/2008 14:37:53 PAGE 4   

 180   2         delay(10);
 181   2          if(set==0)
 182   2              n++;
 183   2              if(n>=6)
 184   2              n=0;
 185   2        }
 186   1        while(set==0);
 187   1        if((n>=1)&&(n<=5))
 188   1         KT=1;
 189   1        else
 190   1         KT=0;
 191   1      }
 192          
 193          
 194          void key_ret()
 195          {
 196   1        if(ret==0)
 197   1        {
 198   2        hh=0;
 199   2        ff=0;
 200   2        //ss=0;
 201   2        }
 202   1        while(ret==0);
 203   1      }
 204          
 205          void key_add()
 206          {
 207   1        if(add==0)
 208   1        {
 209   2         delay(10);
 210   2         switch(n)
 211   2         {
 212   3          //case 0:break;
 213   3          case 1:hour++;if(hour>=24)hour=0;break;
 214   3          case 2:minite++;if(minite>=60)minite=0;break;
 215   3          case 3:second++;if(second>=60)second=0;break;
 216   3              case 4:hh++;if(hh>=24)hh=0;break;
 217   3              case 5:ff++;if(ff>=60)ff=0;break;
 218   3              //case 6:ss++;if(ss>=60)ss=0;break;
 219   3          default:break;
 220   3         }
 221   2        }
 222   1        while(add==0);
 223   1      }
 224          
 225          void key_dec()
 226          {
 227   1        if(dec==0)
 228   1        {
 229   2         delay(10);
 230   2         switch(n)
 231   2         {
 232   3          //case 0:break;
 233   3          case 1:hour--;  if(hour<=0)  hour=23;break;
 234   3          case 2:minite--;if(minite<=0)minite=59;break;

⌨️ 快捷键说明

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