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

📄 main.lst

📁 基于单片机89C51的程序温控系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  07/20/2008 11:31:54 PAGE 1   


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

line level    source

   1          #include <AT89X52.H>
   2          #include <ctype.h>
   3          #include <string.h>
   4          #include <stdlib.h>
   5          #include <stdio.h>
   6          #include <math.h>
   7          
   8          #define uchar unsigned char
   9          #define uint unsigned int
  10          
  11          sfr  p3=0xb0;
  12          sbit p3_5=p3^5;
  13          sbit p3_4=p3^4;
  14          
  15          sbit DQ=P1^5;//ds18b20与单片机连接口
  16          sbit RS=P1^2;
  17          sbit RW=P1^1;
  18          sbit EN=P1^0;
  19          
  20          /****继电器部分控制***********************************/
  21          sbit LED_RED=P2^6;
  22          sbit LED_BLUE=P2^7;
  23          sbit Relay_add=P2^0;
  24          
  25          
  26          //// /////////////////////////////////////////////////////
  27          bit K1,K2,K3,k4,k5;
  28          bit KT;
  29          bit flash;
  30          unsigned char set=0,xiaoshi=0,fenzhong=0,wendu=0;//定时与调温变量   
  31          uchar ms50,second,minite,hour=12; 
  32          uchar temp;
  33          
  34          void Init_T0(void);
  35          void FlashKey(void);
  36          void Add(void);
  37          void Init_Clock(void);
  38          void Refresh(void);
  39          
  40          
  41          ////////////////////////////////////////////////////////
  42          
  43          unsigned char code str1[]={"M:  :   T:   . "};
  44          unsigned char code str2[]={"S:  :   st:  . "};
  45          
  46          unsigned char code str3[]={"I love you HJ!"};
  47          unsigned char code str4[]={"Made by hu jiao"};
  48          
  49          uchar data disdata[8];
  50          uint tvalue;//温度值
  51          uchar tflag;//温度正负标志
  52           
  53          /////////////////////////////////
  54          uchar data inputdata[8];
  55          ///////////////////////////////////////
C51 COMPILER V7.50   MAIN                                                                  07/20/2008 11:31:54 PAGE 2   

  56          
  57          /*************************lcd1602程序**************************/
  58          void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
  59          {unsigned int i,j;
  60   1         for(i=0;i<ms;i++)
  61   1          for(j=0;j<120;j++);
  62   1      }
  63          
  64          void wr_com(unsigned char com)//写指令//
  65          { delay1ms(1);
  66   1         RS=0;
  67   1         RW=0;
  68   1         EN=0;
  69   1         P0=com;                                                         //////////////////////*****************
             -*DAT
  70   1         delay1ms(1);
  71   1         EN=1;
  72   1         delay1ms(1);                 
  73   1         EN=0;
  74   1      }
  75          
  76          void wr_dat(unsigned char dat)//写数据//
  77          { delay1ms(1);;
  78   1         RS=1;
  79   1         RW=0;
  80   1         EN=0;
  81   1         P0=dat;                                                        /////////////////////////***************
             -***DAT
  82   1         delay1ms(1);
  83   1         EN=1;
  84   1         delay1ms(1);
  85   1         EN=0;
  86   1      }
  87          
  88          void lcd_init()//初始化设置//
  89          {delay1ms(15);
  90   1        wr_com(0x38);delay1ms(5);
  91   1         wr_com(0x08);delay1ms(5);
  92   1          wr_com(0x01);delay1ms(5);
  93   1           wr_com(0x06);delay1ms(5);
  94   1            wr_com(0x0c);delay1ms(5);
  95   1      }
  96          
  97          
  98          
  99          
 100          void display(unsigned char *p)//显示//
 101          {
 102   1      while(*p!='\0')
 103   1      {
 104   2       wr_dat(*p);
 105   2       p++;
 106   2       delay1ms(1);
 107   2      }
 108   1      }
 109          
 110          init_play()//初始化显示
 111          {   lcd_init();
 112   1          wr_com(0x80);
 113   1          display(str1);
 114   1          wr_com(0xc0);
 115   1          display(str2);
C51 COMPILER V7.50   MAIN                                                                  07/20/2008 11:31:54 PAGE 3   

 116   1         }
 117          
 118          /******************************ds1820程序***************************************/
 119          void delay_18B20(unsigned int i)//延时1微秒
 120          {
 121   1         while(i--);
 122   1      }
 123          
 124          
 125          void ds1820rst()/*ds1820复位*/
 126          { unsigned char x=0;
 127   1      DQ = 1;          //DQ复位
 128   1      delay_18B20(4); //延时
 129   1      DQ = 0;          //DQ拉低
 130   1      delay_18B20(100); //精确延时大于480us
 131   1      DQ = 1;          //拉高
 132   1      delay_18B20(40); 
 133   1       } 
 134          
 135          
 136          uchar ds1820rd()/*读数据*/
 137          { unsigned char i=0;
 138   1        unsigned char dat = 0;
 139   1        for (i=8;i>0;i--)
 140   1        {   DQ = 0; //给脉冲信号
 141   2            dat>>=1;
 142   2            DQ = 1; //给脉冲信号
 143   2            if(DQ)
 144   2            dat|=0x80;
 145   2            delay_18B20(10);
 146   2        }
 147   1         return(dat);
 148   1      }
 149          
 150          
 151          void ds1820wr(uchar wdata)/*写数据*/
 152          {
 153   1        unsigned char i=0;
 154   1          for (i=8; i>0; i--)
 155   1          { DQ = 0;
 156   2            DQ = wdata&0x01;
 157   2            delay_18B20(10);
 158   2            DQ = 1;
 159   2            wdata>>=1;
 160   2          }
 161   1      }
 162          
 163          
 164          
 165          read_temp()/*读取温度值并转换*/
 166          {
 167   1         uchar a,b;
 168   1         ds1820rst();    
 169   1         ds1820wr(0xcc);//*跳过读序列号*/
 170   1         ds1820wr(0x44);//*启动温度转换*/
 171   1         ds1820rst();    
 172   1         ds1820wr(0xcc);//*跳过读序列号*/ 
 173   1         ds1820wr(0xbe);//*读取温度*/ 
 174   1         a=ds1820rd();
 175   1         b=ds1820rd();
 176   1         tvalue=b;
 177   1         tvalue<<=8;
C51 COMPILER V7.50   MAIN                                                                  07/20/2008 11:31:54 PAGE 4   

 178   1         tvalue=tvalue|a;
 179   1         if(tvalue<0x0fff)
 180   1            tflag=0;
 181   1         else
 182   1           {tvalue=~tvalue+1;
 183   2            tflag=1;}
 184   1      
 185   1         tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
 186   1         return(tvalue);
 187   1      }
 188          
 189          
 190          /*******************************************************************/
 191          void ds1820disp1()          //温度值显示
 192          { 
 193   1           uchar flagdat;
 194   1      
 195   1               disdata[0]=tvalue/1000  +0x30;//百位数
 196   1           disdata[1]=tvalue%1000/100  +0x30;//十位数
 197   1           disdata[2]=tvalue%100/10  +0x30;//个位数
 198   1           disdata[3]=tvalue%10  +0x30;//小数位
 199   1           
 200   1               disdata[4]=hour/10+0x30;//小时高位
 201   1           disdata[5]=hour%10+0x30;//小时低位
 202   1           disdata[6]=minite/10+0x30;//分钟高位
 203   1           disdata[7]=minite%10+0x30;//分钟低位
 204   1      
 205   1        
 206   1           if(tflag==0)
 207   1             flagdat=0x20;//正温度不显示符号
 208   1           else
 209   1             flagdat=0x2d;//负温度显示负号:-
 210   1      
 211   1          if(disdata[0]==0x30)
 212   1            {
 213   2             disdata[0]=0x20;//如果百位为0,不显示
 214   2             if(disdata[1]==0x30)
 215   2              {disdata[1]=0x20;//如果百位为0,十位为0也不显示
 216   3               }
 217   2            }
 218   1      
 219   1      /*    wr_com(0x80|9);                                //第一行 第 0x80|x   列    
 220   1          wr_dat(flagdat);//显示符号位
 221   1      
 222   1          wr_com(0x80|10);
 223   1          wr_dat(disdata[0]);//显示  百位
 224   1      
 225   1          wr_com(0x80|11);
 226   1          wr_dat(disdata[1]);//显示  十位 
 227   1      
 228   1          wr_com(0x80|12);
 229   1          wr_dat(disdata[2]);//显示  个位 
 230   1      
 231   1          wr_com(0x80|13);
 232   1          wr_dat(0x2e);//显示小数点 
 233   1      
 234   1          wr_com(0x80|14);
 235   1          wr_dat(disdata[3]);//显示小数位 
 236   1          
 237   1          wr_com(0x80|15);
 238   1          wr_dat(0xdf);          //  du */
 239   1          wr_com(0x80|2);                //第一行 第 0x80|x   列    
C51 COMPILER V7.50   MAIN                                                                  07/20/2008 11:31:54 PAGE 5   

 240   1          wr_dat(disdata[4]); //小时高位
 241   1      
 242   1          wr_com(0x80|3);
 243   1          wr_dat(disdata[5]); //小时低位
 244   1      
 245   1          wr_com(0x80|5);
 246   1          wr_dat(disdata[6]); //分高位
 247   1      
 248   1          wr_com(0x80|6);
 249   1          wr_dat(disdata[7]); //分低位
 250   1      
 251   1      //    wr_com(0x80|9);
 252   1      //    wr_dat(flagdat);//正负标志位 
 253   1      
 254   1          wr_com(0x80|10);
 255   1          wr_dat(disdata[0]); //百位
 256   1          
 257   1          wr_com(0x80|11);
 258   1          wr_dat(disdata[1]);  //十位 
 259   1          wr_com(0x80|12);
 260   1          wr_dat(disdata[2]);  //个位
 261   1      //    wr_com(0x80|13);  
 262   1      //   wr_dat(0x2e);     //小数点
 263   1          wr_com(0x80|14);
 264   1          wr_dat(disdata[3]);//显示小数位
 265   1          wr_com(0x80|15);
 266   1          wr_dat(0xdf);       //  du */
 267   1      }

⌨️ 快捷键说明

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