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

📄 all.lst

📁 ds18b20测温程序,在keilc51调适通过
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 1   


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

line level    source

   1          /*项目名称:数字式多路温度检测、显示与报警系统*/
   2          /*创建  人:孙云辉                            */
   3          /*创建时间:2008.05.25                        */
   4          /*修改时间:2008.06.01                        */
   5          /*功    能:全部功能                          */
   6          /*版    本:V1.0                              */
   7          
   8          #include<reg51.h>
   9          
  10          /////////////////////////////////////////////////
  11          /********************基本程序*******************/
  12          /////////////////////////////////////////////////
  13          
  14          /*短延时程序16us为单位 延时时间=24+Num*16 微秒*/
  15          void Delay_short(unsigned int n)
  16          {
  17   1       unsigned int i;
  18   1       for(i=0;i<n;i++)       
  19   1       {}
  20   1      }
  21          
  22          /*长延时程序,以5ms为单位*/
  23          void Delay_long(unsigned char N)
  24          { unsigned char i;
  25   1        unsigned int j;
  26   1         for(i=0;i<N;i++)
  27   1         { for(j=0;j<315;j++)  //一个循环16us,共5ms
  28   2            {}
  29   2         }
  30   1      }
  31           
  32          /////////////////////////////////////////////////
  33          /*******************键盘部分********************/
  34          /////////////////////////////////////////////////
  35          
  36          /*键盘键值定义*/
  37          #define MENU    0xee  //KEY1 菜单键
  38          #define UP      0xde  //KEY2 菜单上翻或加一键
  39          #define SET     0xeb  //KEY3 确认键
  40          #define CHANGE  0xe7  //KEY4 搜索ROM键
  41          #define LEFT    0xed  //KEY5 光标左移
  42          #define DOWN    0xdd  //KEY6 菜单下翻或减一键
  43          #define RIGHT   0xdb  //KEY7 光标右移
  44          #define QUIT    0xd7  //KEY8 退出键
  45          
  46          /*键盘接口定义*/
  47          sbit R1= P2^4;  //第一列按键
  48          sbit R2= P2^5;  //第二列按键
  49          
  50          /*键盘扫描程序,返回键值*/
  51          unsigned char Key_scan(void)
  52          {
  53   1        unsigned char i,j;
  54   1        R1=0;             //扫描第一列
  55   1        i=P2;             //读取键值
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 2   

  56   1        Delay_long(2);        //延时10ms去抖动
  57   1        j=P2;                     //再次读取键值
  58   1        R1=1;                     //第一列初始化
  59   1        if(i==j)                  //两次键值相同表示有键按下
  60   1       {
  61   2        switch(j)
  62   2              {
  63   3                case 0xee: return(j);break;//KEY1
  64   3                case 0xed: return(j);break;//KEY5
  65   3                case 0xeb: return(j);break;//KEY3
  66   3                case 0xe7: return(j);break;//KEY4       
  67   3               }
  68   2        
  69   2       }
  70   1         R2=0;
  71   1         i=P2;
  72   1         Delay_long(2);
  73   1         j=P2;
  74   1         R2=1;
  75   1         if(i==j)
  76   1        {
  77   2         switch(j)
  78   2              {
  79   3                case 0xde: return(j);break;//KEY2
  80   3                case 0xdd: return(j);break;//KEY6
  81   3                case 0xdb: return(j);break;//KEY7
  82   3                case 0xd7: return(j);break;//KEY8      
  83   3                default:return(0);             //无键按下返回0
  84   3               }
  85   2        }     
  86   1      
  87   1      }
  88          
  89          /////////////////////////////////////////////////
  90          /*******************报警部分********************/
  91          /////////////////////////////////////////////////
  92          
  93          /*蜂鸣器接口*/
  94          sbit voice=P1^7;
  95          
  96          bit Alarm_flag; //报警标志位  1报警 0取消报警
  97          
  98          /*报警子程序                         */
  99          /*全局变量:Alarm_flag=1报警=0报警解除*/
 100          void Alarm(void)              
 101          {
 102   1       unsigned char i;
 103   1       if(Alarm_flag==1)        //当Alarm_flag有效
 104   1       { 
 105   2        for(i=0;i<10;i++)  //报警一段时间
 106   2        {
 107   3         voice=~voice;
 108   3         Delay_long(5);
 109   3        }
 110   2       }
 111   1      }
 112          
 113          /////////////////////////////////////////////////
 114          /********************LCD部分********************/
 115          /////////////////////////////////////////////////
 116          
 117          /*LCD接口定义*/
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 3   

 118          sbit LcdRS       = P1^0;          //lcd数据/命令选择端  数据1命令0
 119          sbit LcdRW       = P1^1;          //lcd读/写选择端      读1写0
 120          sbit LcdEn   = P1^2;      //lcd使能控制端  1有效
 121          sfr  LcdIO   = 0x80;      //lcd数据接口 P0=0x80
 122          
 123          
 124          /****向LCD写入命令或数据部分****/
 125          #define LCD_COMMAND                     0         // 输出指令
 126          #define LCD_DATA                        1         // 输出数据
 127          
 128          #define LCD_CLEAR_SCREEN        0x01      // 清屏指令
 129          #define LCD_HOME                0x02      // 光标返回原点指令
 130          
 131          /*写LCD子程序                                        */
 132          /*入口参数:数据style=1 指令style=0 input:写入的内容*/
 133          
 134          void LCD_Write(bit style, unsigned char input) 
 135          {
 136   1              LcdRS=style;         //数据style=1  指令style=0
 137   1          LcdRW=0;             //写
 138   1              LcdIO=input;         //P0口输出
 139   1              Delay_short(10);         //延时
 140   1              LcdEn=1;                     //lcd使能
 141   1              Delay_short(10);         //延时
 142   1              LcdEn=0;                     //停止
 143   1      }
 144          
 145          /****初始化LCD程序****/
 146          void LCD_Initial()
 147          {
 148   1              Delay_long(6);                                             //延迟5*6=30ms
 149   1              LCD_Write(LCD_COMMAND,0x38);               //8位数据端口,2行显示,5*7点阵
 150   1          LCD_Write(LCD_COMMAND,0x38);
 151   1          LCD_Write(LCD_COMMAND,0x38);                           //发送三遍
 152   1              Delay_short(2);                            //延迟大于39us
 153   1              LCD_Write(LCD_COMMAND,0x0c);    //显示模式设置:开启显示, 无光标 0x0c
 154   1              Delay_short(2);                                                    //延迟大于39us
 155   1              LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏                                     0x01
 156   1              Delay_short(100);                                                  //延迟大于1.53ms
 157   1              LCD_Write(LCD_COMMAND,0x06);       //输入模式设置:AC递增, 画面不动 0x06
 158   1      }
 159          
 160          
 161          /*液晶字符输入的位置定位程序*/
 162          /*入口参数:x范围:0-15  y范围:1,2*/
 163          void GotoXY(unsigned char x, unsigned char y) 
 164          {
 165   1              unsigned char address;
 166   1              if(y==1)
 167   1                      address=0x80+x;          //y=1显示在第一行
 168   1           else
 169   1                  address=0xc0+x;      //y=2显示在第二行
 170   1          LCD_Write(LCD_COMMAND, address);
 171   1      }
 172          
 173          /*将字符串输出到液晶显示函数*/
 174          /*入口参数:字符串指针      */
 175          void Print(unsigned char *str)
 176          {
 177   1              while(*str!='\0')
 178   1              {
 179   2                      LCD_Write(LCD_DATA,*str);
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 4   

 180   2                      str++;
 181   2              }
 182   1      }
 183          
 184          /////////////////////////////////////////
 185          /***********DS18B20部分*****************/
 186          /////////////////////////////////////////
 187          
 188          /*DS18B20接口定义*/
 189          sbit DQ  =P1^6;                   //单总线接口
 190          
 191          /*全局变量定义*/
 192          unsigned char DS_Temp[5][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; //存放温度值(负数用补码表示)
 193                                                                                                                                                     //0:符号1:整数2:小数
 194          unsigned char DS_Tl[5]={0,0,0,0,0};                         //温度报警上限
 195          unsigned char DS_Th[5]={0,0,0,0,0};                     //温度报警下限
 196          unsigned char ID[5][8]={{0},{0},{0},{0},{0}};       //存放序列号
 197          
 198          //*DS18B20指令定义*/
 199          #define  READ_ROM      0x33        //读ROM指令
 200          #define  MATCH_ROM         0x55    //匹配ROM指令
 201          #define  SKIP_ROM      0xCC        //跳过ROM指令
 202          #define  ALARM_SEARCH  0xEC        //报警搜索指令
 203          #define  CONVERT_T     0x44        //温度转换指令
 204          #define  WRITE_SCR     0x4E    //写暂存器指令
 205          #define  READ_SCR      0xBE        //读暂存器指令
 206          #define  COPY_SCR      0x48        //复制暂存器指令
 207          
 208          
 209          
 210          /*ds18b20初始化函数 返回初始化状态*/
 211          unsigned char DS_Reset(void) 
 212          {
 213   1        unsigned char presence;
 214   1        DQ = 1;          //DQ复位
 215   1        Delay_short(1);  //稍做延时
 216   1        DQ = 0;          //单片机将DQ拉低
 217   1        Delay_short(29); //精确延时480us
 218   1        DQ = 1;          //拉高总线
 219   1        Delay_short(3);  //等待存在信号
 220   1        presence=DQ;     //稍做延时后 如果presence=0则初始化成功 =1则初始化失败
 221   1        Delay_short(25);
 222   1        if(presence==0)
 223   1          return 1;      //初始化成功返回1
 224   1        else
 225   1          return 0;      //初始化失败返回0
 226   1      } 
 227          
 228          /*从ds18b20读一个字节 dat为返回值*/  
 229          unsigned char DS_ReadByte(void)
 230          {

⌨️ 快捷键说明

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