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

📄 lc.lst

📁 一个适合大学生毕业设计的程序。希望大家看看啊
💻 LST
字号:
C51 COMPILER V7.50   LC                                                                    09/21/2008 21:29:43 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LC
OBJECT MODULE PLACED IN .\LC.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\LC.C DEBUG OBJECTEXTEND

line level    source

   1          //****************************************************************************************************//
   2          //本设计使用AT89C2051单片机,时钟频率为12MHz,用共阳极LED数码管显示及使用DS18B20智能温度传感器。//
   3          #include "reg51.h"
   4          #include "intrins.h"     //_nop_();延时函数,用于小于11us延时
   5          #define  Disdata    P1   //段码输出口
   6          #define  discan     P3   //动态扫描口
   7          #define uchar unsigned char
   8          #define uint unsigned int
   9          sbit  DQ=P3^1;        //温度输入口
  10          sbit  DIN=P1^7;       //LED小数点控制
  11          uint   h;             //定义循环变量
  12          //
  13          //
  14          //*********************温度小数部分用查表法*********************//
  15          uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  16          //
  17          uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
  18          // 共阳LED段码表     "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9" "不亮" "-" //                
  19          uchar code  scan_con[4]={0x04,0x08,0x10,0x20};   // 列扫描控制字,P3.3 P3.4 P3.5 P3.6
  20          uchar data  temp_data[2]={0x00,0x00};               // 读出温度暂放
  21          uchar data  display[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用
  22          //
  23          //
  24          //*********************11微秒延时函数*********************//
  25          void delay(uint t)
  26          {
  27   1      for(;t>0;t--);
  28   1      }
  29          //
  30          //
  31          //*********************显示扫描函数*********************//
  32          scan()
  33          {
  34   1      char k;
  35   1          for(k=0;k<4;k++)         //四位LED扫描控制
  36   1           {
  37   2            Disdata=dis_7[display[k]];
  38   2            if(k==1){DIN=0;}
  39   2            discan=scan_con[k];delay(90);//scan_con-列扫描控制字;discan-P3口列扫描输出
  40   2            discan=0x00;                 //灭字
  41   2                      }
  42   1       }
  43          //
  44          //
  45          //*********************18B20复位函数*********************//
  46          reset(void)
  47          {
  48   1      char presence=1;
  49   1      while(presence)
  50   1      {
  51   2      while(presence)
  52   2        {
  53   3              DQ=1;_nop_();_nop_();//总线上拉
  54   3              DQ=0;                //下拉         
  55   3              delay(50);           //维持550us,最短维持480us
C51 COMPILER V7.50   LC                                                                    09/21/2008 21:29:43 PAGE 2   

  56   3              DQ=1;                //总线上拉
  57   3              delay(6);            //检测总线上升沿,66us
  58   3              presence=DQ;         //DS18B20发存在低电平信号(60-240us);presence=0继续下一步
  59   3         }
  60   2      delay(30);              //延时300us,总线恢复高电平,DQ=1;
  61   2      presence = ~DQ;         //取反,跳出循环
  62   2      }
  63   1      DQ=1;
  64   1      } 
  65          //
  66          //
  67          //*********************18B20写命令函数*********************//
  68          void write_byte(uchar val)
  69          {
  70   1      uchar i;
  71   1      for (i=8; i>0; i--) //定义 8 bit,写 8 bit
  72   1      {
  73   2      DQ=1;_nop_();_nop_(); 
  74   2      DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
  75   2      DQ = val&0x01;      //最低位移出,并写入总线
  76   2      delay(6);           //66us
  77   2      val=val/2;          //右移一位,倒数第二位变为最低位
  78   2      }
  79   1      DQ = 1;
  80   1      delay(1);           //高电平维持11us,写结束 
  81   1      }
  82          //
  83          //
  84          //*********************18B20读1个字节函数*********************//
  85          uchar read_byte(void)
  86          {
  87   1      uchar i;
  88   1      uchar value = 0;
  89   1      for (i=8;i>0;i--)
  90   1      {
  91   2      DQ=1;_nop_();_nop_();
  92   2      value>>=1;           //右移一位
  93   2      DQ = 0;            
  94   2      _nop_();_nop_();_nop_();_nop_();          //4us
  95   2      DQ = 1;_nop_();_nop_();_nop_();_nop_();   //4us ,读时隙
  96   2      if(DQ)value|=0x80;   //DQ=1,则写入为 10000000
  97   2      delay(6);            //66us
  98   2      }
  99   1      DQ=1;
 100   1      return(value);
 101   1      }
 102          //
 103          //
 104          //*********************读出温度函数*********************//
 105          read_temp()
 106          {
 107   1      reset();       //总线复位
 108   1      write_byte(0xCC); // 发Skip ROM命令
 109   1      write_byte(0xBE); //  发读命令
 110   1      temp_data[0]=read_byte();  //温度低8位
 111   1      temp_data[1]=read_byte();  //温度高8位
 112   1      reset();
 113   1      write_byte(0xCC); // Skip ROM
 114   1      write_byte(0x44); // 发转换命令
 115   1      }
 116          //
 117          //
C51 COMPILER V7.50   LC                                                                    09/21/2008 21:29:43 PAGE 3   

 118          //*********************温度数据处理函数*********************//
 119          work_temp()
 120          {
 121   1      uchar n=0;       //存储符号
 122   1      if(temp_data[1]>112)
 123   1       {temp_data[1]=(0xFF-temp_data[1]);temp_data[0]=(0xFF-temp_data[0]);n=1;} //负温度求补码
 124   1      display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];  //处理小数位
 125   1      display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//低八位屏蔽小数位后右移四位与高八位屏蔽符号

⌨️ 快捷键说明

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