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

📄 main.lst

📁 这是一个红外报警系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  12/11/2007 16:22:43 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          
   2          
   3          //红外报警系统
   4          
   5          #include<REGX52.H>
   6          //#include "1602S51.H"
   7          
   8          sbit Alarm_sound=P1^3;    //蜂鸣器,低电平有效
   9          sbit LED_Green=P2^5;     //正常工作指示  --绿
  10          sbit LED_Test=P2^6;       //测试状态指示  --红
  11          sbit Relay_Control=P1^4;     //继电器 低电平有效
  12          sbit Red_LED1=P1^0;               //红外接收头1
  13          sbit Red_LED2=P1^1;               //红外接收头2
  14          sbit Red_LED3=P1^2;               //红外接收头3
  15          sbit human=P3^0;           //热释电按口 
  16          
  17          unsigned int Alarm_Number=10;       //报警门限值,可通过按键改变
  18          unsigned char  Style_bit=0;         //类型标志位
  19          unsigned int Count_number=0;        //计数
  20          bit Alarm_bit=0;                                        //强制报警开关
  21          bit Test_bit=0;                                     //测试标志
  22          bit Red_recognize_bit1=0;           //识别到物体标志
  23          bit Red_recognize_bit2=0;           //识别到物体标志
  24          unsigned char delay_count;              //灯的开关状态  延迟计数,当到一定次数,就进行开关灯操作,
  25                                              //这样做的好处时为了使灯的闪烁时间不影响其他子程序,如按键扫描
  26             
  27           
  28          unsigned char  style[6]={"STYLE:"}; //显示      Style 类型
  29          unsigned char  raster[6]={"Raster"};//显示          光栅
  30          unsigned char  identify[8]={"Identify"}; // 显示  人体识别
  31          unsigned char  TestModel[9]={"TestModel"}; //显示 测试模式
  32          unsigned char  count[7]={"Count: "}; // 显示  人体识别
  33          unsigned char  change[9]={"Alarm_Num"};
  34          unsigned char  Clear9[9]={"         "};    //用于清屏
  35          unsigned char  Clear16[16]={"                "};           //用于清屏
  36          unsigned char  Warning[16]={"   Warning!     "};
  37          
  38          void Alarm_CLOSE(void);
  39          void Alarm_OPEN(void);
  40          void Key_Scan(void);
  41          void Test(void);
  42          
  43          //------------------------------------------------------
  44          //液晶1602相关定义
  45          sbit LCDE=P2^7;
  46          sbit RW=P3^4;
  47          sbit RS=P3^5;
  48          
  49          wr_com(unsigned char comm);//********写控制字符程序 E=1 RS=0 RW=0**********//
  50          wr_data(unsigned char dat);//*****当前位置写字符子程序:E=1 RS=1 RW=0
  51          void display(unsigned char addr,unsigned char *a,unsigned char c);
  52          unsigned char rd_bf();//*****忙状态检查*******//
  53          
  54          
  55          //*************delay_ms******************************** 
C51 COMPILER V7.50   MAIN                                                                  12/11/2007 16:22:43 PAGE 2   

  56          void delay_10us(unsigned char x)  
  57          {  
  58   1        while(x--); 
  59   1      }  
  60          
  61          void delay_ms(unsigned char cnt) 
  62          { 
  63   1          unsigned char i; 
  64   1      do { 
  65   2        i = 4; 
  66   2        do { 
  67   3         delay_10us(39); 
  68   3        } while(--i); 
  69   2      } while(--cnt); 
  70   1      } 
  71          
  72          //====================================================
  73          //     1602液晶相关
  74          
  75          
  76          wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
  77          {                         
  78   1                      LCDE=0;
  79   1                      RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
  80   1                      RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
  81   1                      LCDE=1;
  82   1                      P0=comm;
  83   1                      RS=0;
  84   1                      RW=0;
  85   1                      LCDE=0;
  86   1      }
  87          
  88          wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS=1 RW=0
  89          {
  90   1                      LCDE=0;
  91   1                      RS=0;             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
  92   1                      RW=0;             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
  93   1                      RS=1;
  94   1                      RW=0;
  95   1                      LCDE=1;
  96   1                      P0=dat;
  97   1                      LCDE=0;
  98   1                      RS=0;
  99   1                      RW=0;
 100   1      }
 101          
 102          
 103          unsigned char rd_bf()//*****忙状态检查*******//
 104          {
 105   1                      unsigned char i;
 106   1                      //P0=0xff;
 107   1                      LCDE=0;
 108   1                      RS=0;
 109   1                      RW=0;
 110   1                      RS=0;
 111   1                      RW=1;
 112   1                      LCDE=1;
 113   1                      i=P0;
 114   1                      LCDE=0;
 115   1              
 116   1      //              while(i){i=P0_7;}
 117   1      
C51 COMPILER V7.50   MAIN                                                                  12/11/2007 16:22:43 PAGE 3   

 118   1                      return(i);
 119   1      }
 120                  
 121          void init_LCD()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
 122          {
 123   1              wr_com(0x38);   //*****显示模式设置必须三次,不用检测忙信号
 124   1              delay_ms(5);
 125   1              wr_com(0x38);
 126   1              delay_ms(5);
 127   1              wr_com(0x38);
 128   1              delay_ms(5);
 129   1      
 130   1              //rd_bf();
 131   1              //delay5ms();
 132   1              wr_com(0x01);   ///***清屏****
 133   1              delay_ms(5);
 134   1              rd_bf();
 135   1              delay_ms(5);
 136   1              wr_com(0x06);   ///****光标移动设置***
 137   1         delay_ms(5);
 138   1              rd_bf();
 139   1              delay_ms(1);
 140   1              wr_com(0x38);   ////***显示模式设置****
 141   1              delay_ms(1);
 142   1              rd_bf();
 143   1          delay_ms(1);
 144   1              wr_com(0x0f);   /////***显示开***
 145   1          delay_ms(1);
 146   1              rd_bf();
 147   1              delay_ms(1);
 148   1              
 149   1              wr_com(0x40);           //set cgram address
 150   1              delay_ms(1);
 151   1      //      rd_bf();
 152   1              
 153   1      
 154   1      }
 155          
 156          //---------------------------------------
 157          //名称:显示子程序
 158          //功能:在指定地方显示字符
 159          //入口:a 是指向要显示的数组
 160          //      addr是要显示的地址
 161          //      c 为数组长度
 162          //返回:无
 163          void display(unsigned char addr, unsigned char *a, unsigned char c)  
 164          {
 165   1          unsigned char i;
 166   1      //      if(rd_bf())
 167   1              wr_com(addr);
 168   1          for(i=0;i<c;i++)
 169   1                {
 170   2              rd_bf();   
 171   2                  wr_data(a[i]);
 172   2              delay_10us(1);
 173   2                }
 174   1      
 175   1      
 176   1              
 177   1      } 
 178           
 179          //---------------------------------------------------------------
C51 COMPILER V7.50   MAIN                                                                  12/11/2007 16:22:43 PAGE 4   

 180          //功能:数据输出
 181          //输入:str为要显示的数据,X为坐标
 182          void Printf_Number(unsigned char X,unsigned long Temp)
 183                  {
 184   1                      
 185   1                      unsigned char i = 8;
 186   1                  char vec[9];
 187   1                  char *ptr=vec; 
 188   1                  vec[i]  = 0;         
 189   1                  do
 190   1                      {
 191   2                      vec[--i] = Temp%10 + '0';
 192   2                      Temp /= 10;
 193   2                  }
 194   1                      while (Temp!=0);
 195   1      
 196   1                  ptr=ptr+i;
 197   1      
 198   1                  wr_com(X);
 199   1                      while((*ptr) != '\0')   
 200   1                      {
 201   2                      //      wr_lcd (dat, *ptr);
 202   2      
 203   2                              rd_bf();   
 204   2                      wr_data(*ptr);
 205   2                              ptr ++;
 206   2                              delay_10us(2);
 207   2                      }
 208   1              }
 209          
 210          
 211          
 212          
 213          void main(void)
 214          {
 215   1         
 216   1         P0=0;
 217   1         P1=0xff;
 218   1         P2=0xFF;
 219   1         P3=0xff;
 220   1      
 221   1         Alarm_sound=1;         //关蜂鸣器
 222   1         LED_Green=1;
 223   1         LED_Test=0;             
 224   1         Relay_Control=1;
 225   1         init_LCD(); //初始化1602
 226   1         display(0x80,style,6);   //第一行  
 227   1         display(0x88,raster,6);   //第二行 

⌨️ 快捷键说明

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