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

📄 zly.lst

📁 单片机智能化产品-c语言实例详解,里面有很多程序,讲得很详细,绝对可以直接用,还有电路图pcb文件!详情请看这本书目录
💻 LST
字号:
C51 COMPILER V7.06   ZLY                                                                   11/18/2005 20:42:12 PAGE 1   


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

stmt level    source

   1          #include <AT89X51.H>//6MHz
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          #define reset() {WDT=0x1e;WDT=0xe1;}//看门狗复位宏定义
   5          sfr WDT=0xa6;                   //定义看门狗寄存器
   6          uchar code DATA_7SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,
   7                              0x6d,0x7d,0x07,0x7f,0x6f};/*0~9的数码管段码*/
   8          //============================================================
   9          uchar data deda;        /*100mS计数单元*/ 
  10          uchar data sec;         //计时秒
  11          uchar data min;         //计时分
  12          char data set_min;      //设定分
  13          uchar data cnt_5s;
  14          uchar data ram_flag;
  15          char data powout_flag;
  16          bit work_status;
  17          bit flag_500ms;
  18          bit bz_flag=0;          //蜂鸣标志
  19          bit startflag_5s;               //5S标志
  20          bit start_flag;
  21          bit pout_flag;
  22          //===========================================================
  23          sbit h_pow_out=P2^7;            //驱动H
  24          sbit m_pow_out=P2^6;            //驱动M
  25          sbit l_pow_out=P2^5;            //驱动L
  26          sbit g_x1=P2^2;         //个位显示
  27          sbit g_x2=P2^3;
  28          sbit s_x1=P2^0;         //十位显示
  29          sbit s_x2=P2^1;
  30          sbit r_led=P3^1;        
  31          sbit g_led=P3^0;        
  32          sbit on_off_key=P3^2;   
  33          sbit timeinc_key=P3^3;  
  34          sbit timedec_key=P3^4;
  35          sbit pow_sel_key=P3^5;
  36          sbit run_stop_key=P3^6;
  37          sbit bz_out=P2^4;       
  38          //==================================================
  39          void init(void)
  40          {
  41   1      sec=min=set_min=0;
  42   1      cnt_5s=0;
  43   1      powout_flag=0;
  44   1      work_status=0;
  45   1      flag_500ms=0;
  46   1      bz_flag=0;      
  47   1      startflag_5s=0; 
  48   1      start_flag=0;
  49   1      pout_flag=0;
  50   1      }
  51          /*=========定时器T0初始化======*/
  52          void init_timer0()
  53          {
  54   1      TMOD=0x11;//T0、T1方式1
  55   1      TH0=-(50235/256);//100mS初值
C51 COMPILER V7.06   ZLY                                                                   11/18/2005 20:42:12 PAGE 2   

  56   1      TL0=-(50235%256);
  57   1      ET0=1;TR0=1;    //T0开中断,启动T0
  58   1      }
  59          //======================================================
  60          /*延时k*1mS子函数*/
  61          void delay(uint k)
  62          {
  63   1      uint i,j;
  64   1      for(i=0;i<k;i++){reset()
  65   2      for(j=0;j<60;j++)
  66   2      {;}}
  67   1      }
  68          /*定时器T1初始化*/
  69          void init_timer1()
  70          {
  71   1      TH1=-(2500/256); //5mS初值
  72   1      TL1=-(2500%256);
  73   1      ET1=1; TR1=1; //T1开中断,启动T1
  74   1      }
  75          //======================================================
  76          /*100mS定时中断服务子函数*/
  77          void timer0(void) interrupt 1 using 1
  78          {
  79   1      TH0=-(50235/256);// 重装定时初值
  80   1      TL0=-(50235%256);
  81   1      deda++;                 //计时单元递加
  82   1      if(startflag_5s)cnt_5s++;//启动5秒计时
  83   1      if(deda>=10){sec++;deda=0;}// 秒加1
  84   1      if(cnt_5s>=50){pout_flag=1;cnt_5s=50;}//5秒到,输出标志置位,
  85   1      //同时5秒计时值固定为5秒
  86   1      if(sec>=60){set_min--;sec=0;}//60秒到,设定分递减
  87   1      if(set_min<=0)set_min=0;// 最小为0
  88   1      if((set_min==0)&&(work_status==0)){startflag_5s=0;}// 若设定分为0且工作状态为0,
  89   1      //5秒启动标志复位
  90   1      else {startflag_5s=1;}// 否则5秒启动标志置位
  91   1      if((set_min<=3)&&(work_status==0))bz_flag=1;// 若设定分小于3且工作状态为0,
  92   1      //蜂鸣器启动标志置位
  93   1              else bz_flag=0;                                 //否则蜂鸣器启动标志复位
  94   1      }
  95          //===========================================================
  96          /*T1 5ms定时中断服务子*/ 
  97          void timer1(void) interrupt 3 using 2
  98          {static bit RL;static uchar cnt500;
  99   1      cnt500++;if(cnt500==100){cnt500=0;flag_500ms=!flag_500ms;}// 每0.5秒,标志取反
 100   1      RL=!RL;
 101   1      TH1=-(2500/256);// 重装5mS定时初值
 102   1      TL1=-(2500%256);
 103   1      if(start_flag)// 若系统启动
 104   1      {if(work_status==0)// 若自动时控工作
 105   2              {       if(RL){P1=DATA_7SEG[set_min/10];// 点亮十位数码管
 106   4                              s_x1=0;s_x2=0;g_x1=1;g_x2=1;}
 107   3                      else{P1=DATA_7SEG[set_min%10];// 点亮个位数码管
 108   4                              s_x1=1;s_x2=1;g_x1=0;g_x2=0;}
 109   3              }
 110   2      //===========================================
 111   2      else//否则处于持续工作时
 112   2              {       if(flag_500ms){if(RL){P1=0x40;s_x1=0;s_x2=0;// 点亮g段
 113   5                                                      g_x1=1;g_x2=1;}
 114   4                                                      else {P1=0x40;s_x1=1;s_x2=1;// 点亮g段
 115   5                                                              g_x1=0;g_x2=0;}
 116   4                                                      }
 117   3                      else{P1=0x00;s_x1=1;s_x2=1;g_x1=1;g_x2=1;}
C51 COMPILER V7.06   ZLY                                                                   11/18/2005 20:42:12 PAGE 3   

 118   3              }
 119   2      }
 120   1      else {P1=0x00;s_x1=1;s_x2=1;g_x1=1;g_x2=1;}     // 若系统关闭,熄灭数码管
 121   1      }
 122          
 123          
 124          /**************************************************/
 125          void key(void)                  //扫描时间设定键
 126          {uchar temp,ss;
 127   1      delay(10);
 128   1      ss=P3;P3=0xff;
 129   1      if(P3!=0xff)
 130   1      {delay(10);temp=P3;P3=ss;
 131   2      if(temp==0xfb){start_flag=!start_flag;ram_flag=0x55;delay(300);}// 按下开/关键,
 132   2      //系统启动标志取反,同时防干扰标志写入55H
 133   2              if(start_flag)  //若处于开机状态,根据按键状态,进行功能散转
 134   2              {
 135   3              switch(temp)
 136   3                              {
 137   4                              
 138   4                              case 0xf7:{set_min++;bz_flag=0;startflag_5s=1;cnt_5s=0;// 设定分递增
 139   5                                                      if(set_min>=60)set_min=60;delay(300);}break;
 140   4                              case 0xef:{set_min--;bz_flag=0;startflag_5s=1;cnt_5s=0;// 设定分递减
 141   5                                                      if(set_min<=00)set_min=0;delay(300);}break;
 142   4                              case 0xdf:{powout_flag++;if(powout_flag>=3)powout_flag=0;// 切换
 143   5      //输出功率
 144   5                                                                                                      delay(300);}break;
 145   4                              case 0xbf:{work_status=!work_status;delay(300);}break;// 选择自动时控
 146   4      //或持续工作
 147   4                              default:break;
 148   4                              }
 149   3              }
 150   2              else //否则处于关机状态,设定分清零
 151   2              {set_min=0;}
 152   2      //===================================
 153   2              if(work_status==0){if(set_min>0)startflag_5s=1;// 工作状态为0,
 154   3      //当设定分大于0,启动5秒标志
 155   3                                                      else startflag_5s=0;}
 156   2              else {startflag_5s=1;}// 工作状态为1,也启动5秒标志
 157   2      }
 158   1      }
 159          
 160          /**************************************/
 161          void power_out(uchar powout_flag)// 切换高中低三档温度
 162          {       
 163   1              if(pout_flag==1)
 164   1              {       
 165   2                              switch(powout_flag)
 166   2                              {
 167   3                              case 0:m_pow_out=0;h_pow_out=1;l_pow_out=1;break;
 168   3                              case 1:h_pow_out=0;m_pow_out=1;l_pow_out=1;break;
 169   3                              case 2:l_pow_out=0;m_pow_out=1;h_pow_out=1;break;
 170   3                              default:break;
 171   3                              }
 172   2              }
 173   1              else {m_pow_out=1;h_pow_out=1;l_pow_out=1;}
 174   1      if(start_flag==0)
 175   1      {m_pow_out=1;h_pow_out=1;l_pow_out=1;pout_flag=0;bz_flag=0;bz_out=1;}
 176   1      if(work_status==1)startflag_5s=1;
 177   1      else {if(set_min==0)
 178   2                      {m_pow_out=1;h_pow_out=1;l_pow_out=1;
 179   3                      pout_flag=0;bz_flag=0;bz_out=1;startflag_5s=0;}
C51 COMPILER V7.06   ZLY                                                                   11/18/2005 20:42:12 PAGE 4   

 180   2              }
 181   1      //=====================================================
 182   1      if((bz_flag)&&(pout_flag)){if(flag_500ms)bz_out=0;else bz_out=1;}
 183   1      else bz_out=1;
 184   1      }
 185          /*******************************************************/
 186          /*主函数*/
 187          void main()
 188          {       
 189   1              if(ram_flag!=0x55)init();//上电时初始化
 190   1              init_timer0();      //定时器T0初始化
 191   1              init_timer1();          //定时器T1初始化
 192   1              EA=1;                                   //开总中断
 193   1                      
 194   1      while(1)                //无限循环
 195   1          {
 196   2              if(!start_flag){g_led=0;r_led=1;}// 系统关闭,绿灯亮,红灯灭
 197   2              else {g_led=1;r_led=0;}// 否则系统启动,红灯亮,绿灯灭
 198   2              key();                          //扫描按键
 199   2              power_out(powout_flag); //调用功率切换子函数
 200   2              reset()                 //看门狗复位
 201   2          }
 202   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    650    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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