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

📄 sushe_lamp.lst

📁 带时间显示的室内灯光控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SUSHE_LAMP                                                            01/02/2009 13:18:11 PAGE 1   


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

stmt level    source

   1          #include<reg52.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          sbit DQ=P3^0;           //温度传感的DQ脚
   6          sbit lcden=P3^1;        //LCD 的E脚
   7          sbit lcdrs=P3^2;        //LCD的RS脚
   8          sbit cro_l=P3^3;        //光控中断控制脚
   9          sbit cro_h=P3^4;        //人体红外中断控制脚
  10          sbit lamp=P3^5;
  11          sbit wr=P3^6;
  12          sbit rd=P3^7;
  13          sbit cro_t=P1^7;        //时间控制中断脚
  14          bit flag_init=0;
  15          uchar code ascII[]={
  16          0x30,0x31,0x32,0x33,
  17          0x34,0x35,0x36,0x37,
  18          0x38,0x39};                     //0到9的ASCII码
  19          uchar code tbweek[][9]={
  20          {0x4d,0x6f,0x6e,0x64,0x61,0x79},
  21          {0x54,0x75,0x65,0x73,0x64,0x61,0x79},
  22          {0x57,0x65,0x64,0x6e,0x65,0x73,0x64,0x61,0x79},
  23          {0x54,0x68,0x75,0x72,0x73,0x64,0x61,0x79},
  24          {0x46,0x72,0x69,0x64,0x61,0x79},
  25          {0x53,0x64,0x74,0x75,0x72,0x64,0x61,0x79},
  26          {0x53,0x75,0x6e,0x64,0x61,0x79}};       //星期一到星期天在液晶中显示用的代码
  27          uint tens,units,decile,tmp,un_guang;
  28          uchar time,sec,min,hour,week;
  29          float tmprt;
  30          void time_init();
  31          void lcd_init();
  32          void ADC_init();
  33          void write_com(uchar com);
  34          void write_data(uchar date);
  35          void DS18B20_init();
  36          void Readtemperature();
  37          void Writeonechar(uchar dat);
  38          uchar Readonechar();
  39          void displaytt(uchar sec1,uchar min1,uchar hour1);
  40          void displaytemp();
  41          void displaywe();
  42          void keyscan();
  43          void delay(uint z);
  44          void Delay_uS(uint tt);
  45          
  46          void main()
  47          {
  48   1              lcd_init();                     //液晶初始化
  49   1              time_init();            //定时器初始化
  50   1              DS18B20_init();         //温度传感器初始化
  51   1              hour=12;
  52   1          while(1)
  53   1          {
  54   2              Readtemperature();     //读DS18B20检测到的温度
  55   2                      displaytt(sec,min,hour);
C51 COMPILER V7.06   SUSHE_LAMP                                                            01/02/2009 13:18:11 PAGE 2   

  56   2                      keyscan();
  57   2                      displaytemp();
  58   2                      displaywe();
  59   2                      ADC_init();
  60   2                      if(un_guang>52) //(假设)夜晚光强少于150lx
  61   2                              cro_l=1;
  62   2                      else    //白天光强大于150lx,AD转换后数少于52,给中断口一个电平,使进入灯灭函数
  63   2                              cro_l=0;
  64   2                      if(cro_h==1)
  65   2                              lamp=0;
  66   2                      else    //人体红外检测到有低电平(没人时),控制灯灭
  67   2                              lamp=1;
  68   2                      if(hour==8)             //早上八点让被睡眠开关置零的P1^7口恢复高电平,传感器开始正常工作
  69   2                              cro_t=1;
  70   2                      delay(21);
  71   2              while(time>=16)         //用大于等于代替等于才能进去
  72   2                       { 
  73   3                              time=0;
  74   3                      sec++;
  75   3                              while(sec==60)
  76   3                               {
  77   4                                sec=0;
  78   4                                min++;
  79   4                                while(min==60)
  80   4                                      {
  81   5                                           min=0;
  82   5                                           hour++;
  83   5                                           while(hour==24)
  84   5                                                 {
  85   6                                                       sec=0;
  86   6                                                       min=0;
  87   6                                                       hour=0;
  88   6                                                       week++;
  89   6                                                       while(week==7)
  90   6                                                              week=0; 
  91   6                                                 }
  92   5                                              
  93   5                                              
  94   5                                      }
  95   4                               
  96   4                               }
  97   3                      
  98   3                        }  
  99   2      
 100   2         }
 101   1      
 102   1      }
 103          void lcd_init()
 104          {
 105   1              lcden=0;                        //写状态,使能为高脉冲
 106   1              write_com(0x38);        //显示模式设置
 107   1              write_com(0x01);        //显示清屏
 108   1              write_com(0x0c);        //开显示,光标不显示
 109   1              write_com(0x06);        //光标移动设置
 110   1              write_com(0x80+0x00);   //设置数据地址指针
 111   1      }
 112          void write_com(uchar com)       //往LCD写指令
 113          {
 114   1              lcdrs=0;
 115   1              P2=com;
 116   1              delay(2);
 117   1              lcden=1;
C51 COMPILER V7.06   SUSHE_LAMP                                                            01/02/2009 13:18:11 PAGE 3   

 118   1              delay(2);
 119   1              lcden=0;
 120   1      }
 121          
 122          void write_data(uchar date)             //往LCD写数据
 123          {
 124   1              lcdrs=1;
 125   1              P2=date;
 126   1              delay(2);
 127   1              lcden=1;
 128   1              delay(2);
 129   1              lcden=0;
 130   1      }
 131          void displaytt(uchar sec1,uchar min1,uchar hour1)       //LCD时间显示
 132          {
 133   1                      uchar s1,s2,m1,m2,h1,h2;
 134   1                      write_com(0x80+0x00);
 135   1              s2=sec1/10;
 136   1                      s1=sec1%10;
 137   1                      m2=min1/10;
 138   1                      m1=min1%10;
 139   1                  h2=hour1/10;
 140   1                      h1=hour1%10;
 141   1                      s1=ascII[s1];
 142   1                      s2=ascII[s2];
 143   1                      m1=ascII[m1];
 144   1                      m2=ascII[m2];
 145   1                      h1=ascII[h1];
 146   1                      h2=ascII[h2];
 147   1                      write_data(h2);
 148   1                      delay(5);
 149   1                      write_data(h1);
 150   1                      delay(5);
 151   1                      write_data(0x3a);
 152   1                      delay(5);
 153   1                      write_data(m2);
 154   1                      delay(5);
 155   1                      write_data(m1);
 156   1                      delay(5);
 157   1                      write_data(0x3a);
 158   1                      delay(5);
 159   1                      write_data(s2);
 160   1                      delay(5);
 161   1                      write_data(s1);
 162   1                      delay(5);
 163   1      
 164   1      
 165   1      }
 166          void displaywe()        //显示星期
 167          {
 168   1              uchar j,we;
 169   1              write_com(0x80+0x40);
 170   1              we=tbweek[week][0];
 171   1              for(j=0;j<=8;j++)
 172   1                      {
 173   2                              we=tbweek[week][j];
 174   2                              write_data(we);
 175   2                              delay(2);                       
 176   2                      }
 177   1      

⌨️ 快捷键说明

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