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

📄 1.lst

📁 知道过程虚报絮烦那些幸福关系豆腐干活动法
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   1                                                                     05/07/2008 09:06:08 PAGE 1   


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

line level    source

   1          /*-------------------------------
   2          
   3          温度控制器V1.51
   4          显示为三个共阳极LED
   5          温度传感器用单总线DS18B20
   6          CPU为2051,三个按键,分别为UP,DOWN,SET
   7          温度调节上限为125度,下限为-55度
   8          只能用于单只18B20
   9          
  10          本软件仅供学习与参考,引用时请注明版权
  11          
  12          http://www.cdle.net
  13          明浩 2004/9/13
  14          pnzwzw@cdle.net
  15          -------------------------------*/
  16          
  17          #include <reg52.H>
  18           
  19          #include <intrins.h>
  20          #define uchar unsigned char
  21          #define uint unsigned int
  22          #define ulong unsigned long
  23          //#define Key_UP            P3^0    //上调温度
  24          //#define Key_DOWN          P3^1    //下调温度
  25          //#define Key_SET           P1^7    //设定键(温度设定,长按开电源)
  26          //#define RelayOutPort      P3^5    //继电器输出
  27          //#define LEDPort           P1      //LED控制口
  28          //#define LEDOneC           P3^2    //LED DS1控制(百位)
  29          //#define LEDTwoC           P3^3    //LED DS2控制(十位)
  30          //#define LEDThreeC         P3^4    //LED DS3控制(个位)
  31          //#define TMPort                                                P3^7            //DS1820 DataPort
  32          sbit Key_UP =           P2^7;    //上调温度
  33          sbit Key_DOWN=          P2^6;    //下调温度
  34          sbit Key_SET=           P2^5;    //设定键(温度设定,长按开电源)
  35          sbit RelayOutPort=      P1^7;    //继电器输出
  36          sbit LEDPort =          P0 ;     //LED控制口
  37          sbit LEDOneC =          P2^2;    //LED DS1控制(百位)
  38          sbit LEDTwoC =          P2^3 ;   //LED DS2控制(十位)
  39          sbit LEDThreeC=         P2^4 ;   //LED DS3控制(个位)
  40          sbit TMPort     =                                       P1^0;           //DS1820 DataPort
  41          
  42          
  43          
  44          
  45          
  46          
  47          unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; //0-9的LED笔划,
             -0xFF为空,0xF7为负号
  48          
  49          static unsigned char bdata StateREG;    //可位寻址的状态寄存器
  50          sbit DS1820ON = StateREG^0;               //DS1820是否存在
  51          sbit SetTF = StateREG^1;              //是否是在温度设置状态
  52          sbit KeySETDown = StateREG^2;         //是否已按过SET键标识
  53          sbit PowTF = StateREG^3;              //电源电源标识
  54          sbit KeyTF = StateREG^4;                                                        //键盘是否允许
C51 COMPILER V7.50   1                                                                     05/07/2008 09:06:08 PAGE 2   

  55          
  56          //sbit KeySETDowning = StateREG^5;                      //SET是否正在按下
  57          static unsigned char bdata TLV _at_ 0x0029;         //温度变量高低位
  58          static unsigned char bdata THV _at_ 0x0028;
  59          static signed char TMV;       //转换后的温度值
  60          static unsigned char KeyV,TempKeyV;      //键值
  61          static signed char TMRomV _at_ 0x0027;    //高温限制
  62          static signed char TMSetV _at_ 0x0026;    //温度设定值
  63          static unsigned char KSDNum;    //SET键连按时的采集次数
  64          static unsigned char IntNum,IntNum2,IntNum3;    //中断发生次数,IntNum用于SET长按检测,IntNum2用于设定状态
             -时LED闪烁
  65          static signed char LED_One,LED_Two,LED_Three;  //LED的显示位 LED_One为十位,LED_Two为个位
  66          static unsigned char Sign; //负号标识
  67          
  68          void main(void)
  69          {
  70   1              //void InitDS1820(void);   //定义函数
  71   1              //void ROMDS1820(void);
  72   1              //void TMVDS1820(void);
  73   1              //void TMRDS1820(void);
  74   1              //void TMWDS1820(void);
  75   1              //void TMREDS1820(void);
  76   1              //void TMERDS1820(void);
  77   1              //void ReadDS1820(void);
  78   1              //void WriteDS1820(void);
  79   1              //void Delay_510(void);
  80   1              //void Delay_110(void);
  81   1              //void Delay_10ms(void);
  82   1              //void Delay_4s(void);
  83   1              //void V2ToV(void);
  84   1      
  85   1              StateREG = 0;   //初始化变量
  86   1              SetTF = 1;      
  87   1              PowTF = 1;                      //关电源
  88   1              THV = 0;
  89   1              TLV = 0;
  90   1              TMV = 0;
  91   1              KeyV = 0;
  92   1              TempKeyV = 0;
  93   1              KSDNum = 0;
  94   1              IntNum = 0;
  95   1              IntNum2 = 0;
  96   1              IntNum3 = 0;
  97   1              LED_One = 0;
  98   1              LED_Two = 0;
  99   1      
 100   1              //InitDS1820(); //初始化
 101   1              //ROMDS1820();  //跳过ROM
 102   1              //TMERDS1820();  //E2PRAM中温度上限值调入RAM
 103   1              //InitDS1820(); //初始化
 104   1              //ROMDS1820();  //跳过ROM
 105   1              //TMRDS1820();  //读出温度指令
 106   1              //ReadDS1820(); //读出温度值和上限值
 107   1              //TMSetV = TMRomV;  //拷贝保存在DS18B20ROM里的上限值到TMSetV
 108   1      
 109   1              EA = 1;                                 //允许CPU中断
 110   1              ET0 = 1;                                //定时器0中断打开
 111   1              TMOD = 0x1;                     //设定时器0为模式1,16位模式
 112   1              TH0=0xB1;
 113   1              TL0=0xDF;                               //设定时值为20000us(20ms)
 114   1              TR0 = 1;                                //开始定时
 115   1              while(1);
C51 COMPILER V7.50   1                                                                     05/07/2008 09:06:08 PAGE 3   

 116   1      }
 117          
 118          //定时器0中断外理中键扫描和显示
 119          void KeyAndDis_Time0(void) interrupt 1 using 2
 120          {
 121   1        TH0=0xB1;
 122   1              TL0=0xDF;                               //设定时值为20000us(20ms)
 123   1      
 124   1              LEDPort = 0xFF;
 125   1        if (!Key_UP)
 126   1          KeyV = 1;
 127   1        if (!Key_DOWN)
 128   1          KeyV = 2;
 129   1        if (!Key_SET)
 130   1          KeyV = 3;
 131   1              //KeySETDowning = 0;  //清除
 132   1        if (KeyV != 0)      //有键按下
 133   1          {
 134   2            Delay_10ms();   //延时防抖  按下10ms再测
*** WARNING C206 IN LINE 134 OF 1.C: 'Delay_10ms': missing function-prototype
 135   2            if (!Key_UP)
 136   2              TempKeyV = 1;
 137   2            if (!Key_DOWN)
 138   2              TempKeyV = 2;
 139   2            if (!Key_SET)
 140   2              TempKeyV = 3;
 141   2            if (KeyV == TempKeyV)   //两次值相等为确定接下了键
 142   2              {
 143   3                if (KeyV == 3)      //按下SET键,如在SET状态就退出,否则进入
 144   3                  {
 145   4                                                              //KeySETDowning = 1; //表明SET正在按下
 146   4                    PowTF = 0;      //电源标识开
 147   4                                                              if (!KeyTF)
 148   4                      if (SetTF)
 149   4                                                                              {
 150   5                                      SetTF = 0;    //标识位标识退出设定
 151   5                                                                                      //InitDS1820(); //初始化
 152   5                                                                              //ROMDS1820();  //跳过ROM
 153   5                                                                              //TMWDS1820();  //写温度上限指令
 154   5                                                                                      //WriteDS1820();        //写温度上限到DS18B20ROM
 155   5                                                                                      //WriteDS1820();        //写温度上限到DS18B20ROM
 156   5                                                                                      //WriteDS1820();        //写温度上限到DS18B20ROM
 157   5                                                                                      //InitDS1820(); //初始化
 158   5                                                                              //ROMDS1820();  //跳过ROM
 159   5                                                                              //TMREDS1820();         //温度上限值COPY回E2PRAM
 160   5                                                                              }
 161   4                      else
 162   4                              SetTF = 1;
 163   4                    if (!KeySETDown) //没有第一次按下SET时,KeySETDown标识置1
 164   4                      KeySETDown = 1;
 165   4                    else
 166   4                      KSDNum = KSDNum + 1;  //前一秒内有按过SET则开始计数
 167   4                  }
 168   3                if (SetTF)  //在SET状态下
 169   3                  {
 170   4                    if ((KeyV == 1) && (!KeyTF))
 171   4                      TMSetV = TMSetV + 1;    //上调温度
 172   4                    if ((KeyV == 2) && (!KeyTF))
 173   4                      TMSetV = TMSetV - 1;    //下调温度
 174   4                    if (TMSetV <= -55)          //限制温度上下限
 175   4                      TMSetV = -55;
 176   4                    if (TMSetV >= 125)
C51 COMPILER V7.50   1                                                                     05/07/2008 09:06:08 PAGE 4   

 177   4                      TMSetV = 125;
 178   4                  }
 179   3                      if ((!KeyTF) && (IntNum3 == 0)) KeyTF = 1; //当键盘处于可用时,锁定
 180   3              }
 181   2      
 182   2            if (KeySETDown)         //在2秒内按下了SET则计中断发生次数用于长按SET时计时用
 183   2              IntNum = IntNum + 1;  
 184   2            if (IntNum > 55)     //中断发生了55次时(大约1.2秒)75为1.5秒左右
 185   2              {
 186   3                IntNum = 0;
 187   3                                              KeySETDown = 0;
 188   3                if (KSDNum == 55)      //如一直长按了SET1.2秒左右
 189   3                  {
 190   4                    RelayOutPort = 1;  //关闭继电器输出
 191   4                    PowTF = 1;         //电源标识关
 192   4                    LEDOneC = 0;
 193   4                    LEDTwoC = 0;
 194   4                    LEDThreeC = 0;
 195   4                    LEDPort = 0xBF;      //显示"--"
 196   4                    Delay_4s();        //延时

⌨️ 快捷键说明

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