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

📄 温度测量.lst

📁 运用AT89C2O51单片机实现温度测量,测量精度1度.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   温度瞋量                                                              06/23/2005 21:02:16 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 温度瞋量
OBJECT MODULE PLACED IN 温度测量.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE 温度测量.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REG2051.H>
   2          #include <intrins.h> 
   3          
   4          #define uchar unsigned char
   5          #define uint signed int
   6          #define uuchar signed char
   7          
   8          #define k1 P3_1                         //k1功能键
   9          #define k2 P3_2                         //k2加键
  10          #define k3 P3_3                         //k3复位键
  11          #define bj P3_0                         //定值输出
  12          #define adk P3_7
  13          
  14          
  15          
  16          uchar sec20,sec,xm0,xm1,xm2,ki,buffer[3],BitCounter,temp,Dat,dz,i,digit,Number[5]={1,2,3,4,5};     
  17          uchar convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码
  18          uint Count,zzz,zzbl,t,v,jsz;
  19          static uchar bdata ke,kee;              //可位寻址的状态寄存器
  20          
  21          sbit stada= P1^7;                       //Ls164串行数据
  22          sbit sclk = P1^2;                       //Ls164串行时钟
  23          sbit Sda= P3^5;                         //2401串行数据
  24          sbit Scl= P3^4;                         //2401串行时钟
  25          sbit LED1 = P1^3;                       //数码管位驱动
  26          sbit LED2 = P1^4;                       //数码管位驱动
  27          sbit LED3 = P1^5;                       //数码管位驱动
  28          sbit p36 = P3^6;
  29          sbit k11=ke^0;
  30          sbit k12=ke^1;
  31          sbit k22=ke^2;
  32          sbit k21=ke^3;
  33          sbit k33=ke^4;
  34          sbit k31=ke^5;
  35          sbit jsz11=ke^6;
  36          sbit jsz12=ke^7;
  37          sbit jsf11=kee^0;
  38          sbit jsf12=kee^1;
  39          sbit b=kee^2;
  40          sbit c=kee^3;
  41          sbit d=kee^4;
  42          sbit e=kee^5;
  43          sbit cl=kee^6;
  44          
  45          void delay(i);                          //延时函数
  46          void scanLED();                         //显示函数
  47          void timeToBuffer();            //显示转换函数
  48          void Sen();                                     //74Ls164串并转换
  49          
  50          void time();
  51          void jpcl();
  52          void fw();
  53          void jy();
  54          void adzhh();
  55          
C51 COMPILER V7.09   温度瞋量                                                              06/23/2005 21:02:16 PAGE 2   

  56          /*起始条件*/
  57          void Start(void)
  58          {
  59   1              Sda=1;
  60   1              Scl=1;
  61   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  62   1              Sda=0;
  63   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  64   1      }
  65          
  66          /*停止条件*/   
  67          void Stop(void)
  68          {
  69   1              Sda=0;
  70   1              Scl=1;
  71   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  72   1              Sda=1;
  73   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  74   1      }
  75          
  76          /*应答位*/
  77          void Ack(void)
  78          {
  79   1              Sda=0;
  80   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  81   1              Scl=1;
  82   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  83   1              Scl=0;
  84   1      }
  85          
  86          /*反向应答位*/
  87          void NoAck(void)
  88          {
  89   1              Sda=1;
  90   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  91   1              Scl=1;
  92   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  93   1              Scl=0;
  94   1      }
  95          
  96          /*发送数据子程序,Data为要求发送的数据*/
  97          void Send(uchar Data)
  98          {
  99   1              uchar BitCounter=8;                             //位数控制
 100   1              uchar temp;                                             //中间变量控制
 101   1              do
 102   1              {
 103   2                      temp=Data;
 104   2                      Scl=0;
 105   2                      _nop_();_nop_();_nop_();_nop_();_nop_();
 106   2                      if((temp&0x80)==0x80)                   //如果最高位是1
 107   2                      Sda=1;
 108   2                      else
 109   2                      Sda=0;
 110   2                      _nop_();_nop_();_nop_();_nop_();_nop_();
 111   2                      Scl=1;
 112   2                      temp=Data<<1;                                   //RLC
 113   2                      Data=temp;
 114   2                      BitCounter--;
 115   2              }
 116   1              while(BitCounter);
 117   1              Scl=0;
C51 COMPILER V7.09   温度瞋量                                                              06/23/2005 21:02:16 PAGE 3   

 118   1              _nop_();_nop_();_nop_();_nop_();_nop_();
 119   1      }
 120          
 121          /*读一个字节的数据,并返回该字节值*/
 122          uchar Read(void) 
 123          {
 124   1              uchar temp=0;
 125   1              uchar temp1=0;
 126   1              uchar BitCounter=8;
 127   1              Sda=1;
 128   1              do
 129   1              {
 130   2                      Scl=0;
 131   2                      _nop_();_nop_();_nop_();_nop_();_nop_();
 132   2                      Scl=1;
 133   2                      _nop_();_nop_();_nop_();_nop_();_nop_();
 134   2                      if(Sda)                                                 //如果Sda=1
 135   2                      temp=temp|0x01;                                 //temp的最低位置1
 136   2                      else
 137   2                      temp=temp&0xfe;                                 //否则temp的最低位清0
 138   2                      if(BitCounter-1)
 139   2                      {
 140   3                              temp1=temp<<1;
 141   3                              temp=temp1;
 142   3                      }
 143   2                      BitCounter--;
 144   2              }
 145   1              while(BitCounter);
 146   1              return(temp);
 147   1      }
 148          
 149          void WrToROM(uchar Data[],uchar Address,uchar Num)
 150          {
 151   1              uchar i;
 152   1              uchar *PData;
 153   1              PData=Data;
 154   1              for(i=0;i<Num;i++)
 155   1              {
 156   2                      Start();                                        //发送启动信号
 157   2                      Send(0xa0);                             //发送SLA+W
 158   2                      Ack();
 159   2                      Send(Address+i);                        //发送地址
 160   2                      Ack();
 161   2                      Send(*(PData+i));
 162   2                      Ack();
 163   2                      Stop();
 164   2                      delay(2000);
 165   2              }
 166   1      }
 167          
 168          void RdFromROM(uchar Data[],uchar Address,uchar Num)
 169          {
 170   1              uchar i;
 171   1              uchar *PData;
 172   1              PData=Data;
 173   1              for(i=0;i<Num;i++)
 174   1              {
 175   2                      Start();
 176   2                      Send(0xa0);
 177   2                      Ack();
 178   2                      Send(Address+i);
 179   2                      Ack();
C51 COMPILER V7.09   温度瞋量                                                              06/23/2005 21:02:16 PAGE 4   

 180   2                      Start();
 181   2                      Send(0xa1);
 182   2                      Ack();
 183   2                      *(PData+i)=Read();
 184   2                      Scl=0;
 185   2                      NoAck();
 186   2                      Stop();
 187   2              }
 188   1      }
 189          
 190          void main()
 191          {
 192   1              EA=1;                                   //开中断
 193   1              TMOD=0x11;                              //设定时器0为计数,设定时器1定时
 194   1              ET0=1;                                  //定时器0中断允许 
 195   1              ET1=1;                                  //定时器1中断允许 
 196   1              TH0=0xD8;
 197   1              TL0=0xF0;                               //设定时值为20000us(20ms)
 198   1              TH1=0x00;
 199   1              TL1=0x00;
 200   1              TR0=1;
 201   1              buffer[0]=0x06; 
 202   1              buffer[1]=0x3F;
 203   1              buffer[2]=0x4F;
 204   1              d=0;
 205   1              while(!d)
 206   1              {
 207   2                      if (sec>2)
 208   2                      d=1;
 209   2                      scanLED();
 210   2              }
 211   1              RdFromROM(Number,0,5);
 212   1              zzz=Number[0]*256+Number[1];
 213   1              dz=Number[2];
 214   1              jsz=Number[3]*256+Number[4];
 215   1              LED1 = 1;
 216   1              LED2 = 1;
 217   1              LED3 = 1;
 218   1              k12=1;
 219   1              k22=1;
 220   1              k31=1;
 221   1              bj=1;
 222   1              d=1;
 223   1              jy();
 224   1              while(1)
 225   1              {
 226   2                      adzhh();
 227   2                      timeToBuffer();         //调用转换段码功能模块
 228   2                      scanLED();                      //调用显示函数
 229   2                      jpcl();
 230   2      
 231   2              }
 232   1      }
 233          
 234          void delay(i)                           //延时子程序                                    
 235          {
 236   1          while(--i);
 237   1      }
 238          
 239          void scanLED()                       //显示功能模块
 240          {
 241   1              Dat=buffer[2];
C51 COMPILER V7.09   温度瞋量                                                              06/23/2005 21:02:16 PAGE 5   

 242   1              Sen();
 243   1              LED1=0;
 244   1              delay(50);
 245   1              LED1=1;
 246   1              Dat=buffer[1];
 247   1              Sen();
 248   1              LED2=0;
 249   1              delay(50);
 250   1              LED2=1;
 251   1              Dat=buffer[0];
 252   1              Sen();
 253   1              LED3=0;
 254   1              delay(50);
 255   1              LED3=1;
 256   1      }
 257          
 258          
 259          
 260          void timeToBuffer()                             //转换段码功能模块
 261          {
 262   1              xm0=jsz/100;    
 263   1              xm1=(jsz-xm0*100)/10;
 264   1              xm2=jsz-xm0*100-xm1*10;
 265   1              buffer[0]=convert[xm2]; 
 266   1              buffer[1]=convert[xm1];
 267   1              buffer[2]=convert[xm0];
 268   1              if (buffer[2]==0x3F)
 269   1              {
 270   2                      buffer[2]=0x00;
 271   2                      if (buffer[1]==0x3F)
 272   2                      buffer[1]=0x00;
 273   2              }
 274   1      }
 275          
 276          void Sen()                                              //74Ls164串并转换               
 277          {
 278   1          for( i=0; i<8;i++)                  //循环8次,转换一位
 279   1          {
 280   2                      sclk=0;
 281   2              if((Dat&0x80)==0x80)    //依次转换各位数
 282   2                      stada=1;                                
 283   2              else stada=0; 
 284   2                      sclk=1;
 285   2                      delay(3);
 286   2                      sclk=0;

⌨️ 快捷键说明

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