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

📄 system_alarm.lst

📁 DS18B20 LCD1602 AT24C02智能温度控制系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 1   


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

line level    source

   1          /*******************************************************************
   2                                    智能温控器
   3          
   4          问题描述:当温控开关打开时,若测得环境温度大于设定温度,则继电器吸合
   5                            ,启动压缩机工作;若测得环境温度小于设定温度,则继电器释放,
   6                            压缩机停止工作。
   7                    该实验可以应用于对温度控制精度要求不是很高的场合,例如,粮仓,
   8                            电冰箱,空调,电饭锅等。如果配以通讯接口,可以做成多点温度检
   9                    测监控系统。具有极强的扩展性。
  10          
  11          作者:    LI YONG QIANG  "XIAN technologcal university" 
  12          
  13          注意: 此文档为仿真程序,若要在试验板上验证,需要须改一下函数
  14                  
  15          
  16          void lcd_wait(void)
  17          {
  18              DATAPORT=0xff;           
  19                  LCM_EN=1;
  20              LCM_RS=0;                           
  21              LCM_RW=1;                           
  22              _nop_();
  23              while(DATAPORT&BUSY);
  24                  LCM_EN=0;
  25                  
  26          }
  27          
  28          *******************************************************************/
  29          
  30          #include<reg51.h>
  31          #include<intrins.h>
  32          #include <absacc.h>
  33          #define uchar unsigned char
  34          #define uint   unsigned int
  35          
  36          #define BUSY  0x80                               //lcd忙检测标志
  37          #define DATAPORT P0                              //定义P0口为LCD通讯端口
  38          #define PLAYE_ADDR XBYTE[0XBFFF]                 //语音报警地址
  39          
  40          sbit RED_ALARM=P1^0;                                             //红色指示灯
  41          sbit WRITE_ALARM=P1^1;                                          //白色指示灯
  42          sbit GREEN_ALARM=P1^2;                                          //绿色指示灯
  43          sbit BLUE_ALARM=P1^3;
  44          sbit P1_4=P1^4;                                             //时钟调整
  45          sbit P1_5=P1^5;                                                 //时钟加
  46          sbit P1_6=P1^6;                                                 //时钟减
  47          
  48          sbit DQ = P1^7;                                                 //定义ds18b20通信端口 
  49          sbit LCM_RS=P2^0;                                                               //数据/命令端
  50          sbit LCM_RW=P2^1;                                                               //读/写选择端
  51          sbit LCM_EN=P2^2;
  52          sbit sda=P2^3;                          //IO口定义
  53          sbit scl=P2^4;                                          //LCD使能信号
  54          sbit ad_busy=P3^2;                                              //adc中断方式接口
  55          sbit RECLED_EOC=P3^5;                                           //ISD1420放音结束查询标志
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 2   

  56          sbit OUT=P3^7;
  57          
  58          uchar ad_data;                                                  //ad采样值存储                                          
  59          uchar seconde;                                          //定义并初始化时钟变量
  60          uchar minite;
  61          uchar hour;
  62          uchar mstcnt=0;
  63          uchar temp1,temp2,temp;                                     //温度显示变量
  64          uchar t,set;
  65          uchar K;
  66          bit ON_OFF=0;
  67          bit outflag;
  68          bit write=0;
  69          
  70          uchar code str0[]={"---  :  :  ---  "};
  71          uchar code str1[]={"SET:  C SA:  . C"};
  72          
  73          void delay_LCM(uint);                                                                                                   //LCD延时子程序
  74          void initLCM( void);                                                                                                    //LCD初始化子程序
  75          void lcd_wait(void);                                                                                                    //LCD检测忙子程序
  76          void WriteCommandLCM(uchar WCLCM,uchar BusyC);                              //写指令到ICM子函数
  77          void WriteDataLCM(uchar WDLCM);                                             //写数据到LCM子函数
  78          void DisplayOneChar(uchar X,uchar Y,uchar DData);                           //显示指定坐标的一个字符子函数
  79          void DisplayListChar(uchar X,uchar Y,uchar code *DData);                    //显示指定坐标的一串字符子函数
  80          void init_timer0(void);                                                                                         //定时器初始化
  81          void displayfun1(void);
  82          void displayfun2(void);
  83          void displayfun3(void);
  84          void displayfun4(void);
  85          void keyscan(void );                                                                                        //键盘扫描子程序
  86          void set_adj(void);
  87          void inc_key(void);
  88          void dec_key(void);
  89          void delay_18B20(unsigned int i);
  90          void Init_DS18B20(void) ;
  91          uchar ReadOneChar(void);
  92          void WriteOneChar(unsigned char dat);
  93          void ReadTemperature(void);
  94          void ad0809(void);
  95          void playalarm(void); 
  96          
  97          
  98          /*********延时K*1ms,12.000mhz**********/
  99          
 100          void delay_LCM(uint k)
 101          {
 102   1          uint i,j;
 103   1          for(i=0;i<k;i++)
 104   1          {
 105   2              for(j=0;j<60;j++)
 106   2                      {;}
 107   2          }
 108   1      }   
 109          /**********写指令到LCM子函数************/
 110          
 111          void WriteCommandLCM(uchar WCLCM,uchar BusyC)
 112          {
 113   1          if(BusyC)lcd_wait();
 114   1              DATAPORT=WCLCM;
 115   1          LCM_RS=0;                   // 选中指令寄存器
 116   1          LCM_RW=0;                   // 写模式       
 117   1          LCM_EN=1;    
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 3   

 118   1              _nop_();   
 119   1              _nop_();
 120   1              _nop_(); 
 121   1          LCM_EN=0;  
 122   1      }
 123          
 124          /**********写数据到LCM子函数************/
 125          
 126          void WriteDataLCM(uchar WDLCM)
 127          { 
 128   1          lcd_wait( );            //检测忙信号    
 129   1              DATAPORT=WDLCM;
 130   1          LCM_RS=1;               // 选中数据寄存器
 131   1          LCM_RW=0;                   // 写模式
 132   1          LCM_EN=1;
 133   1          _nop_();
 134   1              _nop_();
 135   1              _nop_();
 136   1          LCM_EN=0;
 137   1      }
 138          
 139          /***********lcm内部等待函数*************/
 140          
 141          
 142          void lcd_wait(void)
 143          {
 144   1          DATAPORT=0xff;           
 145   1              LCM_EN=1;
 146   1          LCM_RS=0;                           
 147   1          LCM_RW=1;                           
 148   1          _nop_();
 149   1          while(DATAPORT&BUSY)
 150   1              {  LCM_EN=0;
 151   2                 _nop_();
 152   2                 _nop_();
 153   2                 LCM_EN=1;
 154   2                 _nop_();
 155   2                 _nop_();
 156   2                 }
 157   1              LCM_EN=0;
 158   1              
 159   1      }
 160          
 161          
 162          /**********LCM初始化子函数***********/
 163          
 164          void initLCM( )
 165          {   
 166   1              DATAPORT=0;     
 167   1              delay_LCM(15);
 168   1              WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号
 169   1          delay_LCM(5); 
 170   1          WriteCommandLCM(0x38,0);
 171   1          delay_LCM(5); 
 172   1          WriteCommandLCM(0x38,0);
 173   1          delay_LCM(5); 
 174   1      
 175   1          WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号
 176   1          WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号
 177   1          WriteCommandLCM(0x01,1);    //清屏,检测忙信号
 178   1          WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号
 179   1          WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 4   

 180   1      }
 181          
 182          /****************显示指定坐标的一个字符子函数*************/
 183          
 184          void DisplayOneChar(uchar X,uchar Y,uchar DData)
 185          {
 186   1          Y&=1;
 187   1          X&=15;
 188   1          if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40
 189   1          X|=0x80;                    //指令码为地址码+0X80
 190   1          WriteCommandLCM(X,0);
 191   1          WriteDataLCM(DData);
 192   1      }
 193          
 194          /***********显示指定坐标的一串字符子函数***********/
 195          
 196          void DisplayListChar(uchar X,uchar Y,uchar code *DData)
 197          {
 198   1          uchar ListLength=0;
 199   1          Y&=0x01;
 200   1          X&=0x0f;
 201   1          while(X<16)
 202   1          {
 203   2              DisplayOneChar(X,Y,DData[ListLength]);
 204   2              ListLength++;
 205   2              X++;
 206   2          }
 207   1      }
 208          
 209          /***********ds18b20延迟子函数(晶振12MHz )*******/ 
 210          
 211          void delay_18B20(unsigned int i)
 212          {
 213   1              while(i--);
 214   1      }
 215          
 216          /**********ds18b20初始化函数**********************/
 217          
 218          void Init_DS18B20(void) 
 219          {
 220   1               unsigned char x=0;
 221   1               DQ = 1;          //DQ复位
 222   1               delay_18B20(8);  //稍做延时
 223   1               DQ = 0;          //单片机将DQ拉低
 224   1               delay_18B20(80); //精确延时 大于 480us
 225   1               DQ = 1;          //拉高总线
 226   1               delay_18B20(14);
 227   1               x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 228   1               delay_18B20(20);
 229   1      }
 230          
 231          /***********ds18b20读一个字节**************/  
 232          

⌨️ 快捷键说明

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