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

📄 jnsk.lst

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


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

stmt level    source

   1          #include <AT89x051.H>           //器件配置文件
   2          #define uchar unsigned char             //变量类型的宏定义
   3          #define uint unsigned int
   4          uchar DATA_7SEG[10]={0xfc,0x60,0xda,0xf2,0x66,
   5                              0xb6,0xbe,0xe0,0xfe,0xf6};  /*0~9的数码管段码*/
   6          uchar x[4];                                     /* 存放走时的数组*/
   7          uchar y[4]={0,0,0,0};                   /* 存放定时1的数组*/
   8          uchar z[4]={0,0,0,0};                   /* 存放定时2的数组*/
   9          uchar act[4]={0xfe,0xfd,0xfb,0xf7};     /*四位数码管的位选码*/
  10          void delay(uint k);                             //延时子函数声明
  11          void conv();                                            //走时转换子函数声明
  12          void p_out();                                           //判别定时到否子函数声明
  13          void p_out1();                                          //判别定时到否子函数1声明
  14          void t_adj();                                           //走时调整子函数声明
  15          uchar deda=0;           /*100mS计数单元清零*/ 
  16          bit d_05s=0;            /*0.5秒标志*/
  17          bit o_f1=0;             /*定时1启/停标志*/
  18          bit o_f2=0;             /*定时2启/停标志*/
  19          uchar set=0;            /*功能键标志*/
  20          uchar h=0;
  21          uchar n=0;
  22          uchar m=0;
  23          uchar flag;
  24          uchar left=0;
  25          uchar sec=0;
  26          uchar min=0;
  27          uchar hour=0;
  28          uchar min1=0;
  29          uchar hour1=0;
  30          uchar min2=0;
  31          uchar hour2=0;
  32          uchar up=0;
  33          bit flag1=0; 
  34          bit flag2=0; 
  35          
  36          /*显示走时*/
  37          void time()
  38          {
  39   1      for(h=0;h<4;h++)                        
  40   1              {P1=DATA_7SEG[x[h]];    //输出数码管的字形码
  41   2                      P3=act[h];p_out();              //输出数码管的位码。判断输出
  42   2      if(P3_2==0){if(d_05s==1)P1_0=1;else P1_0=0;}            /* 百位数码管点亮时,控制小数点
  43   2      (秒点)闪烁*/
  44   2                      delay(2);}                      //每位数码管点亮2ms
  45   1      if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;}/* 若定时1启动,
  46   1      点亮十位数码管小数点*/
  47   1              else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则十位数码管
  48   1      小数点不亮*/
  49   1      delay(2);
  50   1      if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /* 若定时2启动,
  51   1      点亮个位数码管小数点*/
  52   1              else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则个位数码管
  53   1      小数点不亮*/
  54   1      delay(2);
  55   1      }
C51 COMPILER V7.06   JNSK                                                                  11/18/2005 20:06:16 PAGE 2   

  56          
  57          /*定时器T0初始化*/
  58          void init_timer0()
  59          {
  60   1      TMOD=0x11;
  61   1      TH0=-(50235/256);
  62   1      TL0=-(50235%256);
  63   1      IE=0x8a;
  64   1      TR0=1;
  65   1      }
  66          
  67          /*定时器T1初始化*/
  68          void init_timer1()
  69          {
  70   1      TH1=-(5000/256);
  71   1      TL1=-(5000%256);
  72   1      }
  73          
  74          
  75          /*延时k*1ms子函数*/
  76          void delay(uint k)
  77          {
  78   1      uint i,j;
  79   1      for(i=0;i<k;i++){
  80   2      for(j=0;j<60;j++)
  81   2      {;}}
  82   1      }
  83          
  84          /*100mS定时中断服务子函数*/
  85          void zd0(void) interrupt 1 
  86          {
  87   1      TH0=-(50235/256);               //重装100ms定时初值
  88   1      TL0=-(50235%256);
  89   1      deda++;                                 //100ms计时单元递增
  90   1      }
  91          
  92          /*10mS定时中断服务子函数*/
  93          void zd1(void) interrupt 3 
  94          {uchar i,j;i=P1;j=P3;
  95   1              TH1=-(5000/256);
  96   1              TL1=-(5000%256);
  97   1      if(m==1)n++;
  98   1      if(n>=30){n=0;m=0;}
  99   1      P3_7=0;
 100   1      P1=0xff;
 101   1      if(P1!=0xff)
 102   1      {
 103   2      if(n==0)m=1;
 104   2      {if(n==1)
 105   3      {
 106   4      if(P1_0==0){set++;left=0;}
 107   4      if(set>=4)set=0;
 108   4      if(set==1)flag=0x55;
 109   4      if(P1_1==0)left++;
 110   4      if(left>=4)left=0;
 111   4      if(P1_2==0){up++;
 112   5      switch(left)
 113   5      {
 114   6      case 0:{if(up>=10)up=0;}break;
 115   6      case 1:{if(up>=6)up=0;}break;
 116   6      case 2:{if(up>=10)up=0;}break; 
 117   6      case 3:{if(up>=3)up=0;}break;
C51 COMPILER V7.06   JNSK                                                                  11/18/2005 20:06:16 PAGE 3   

 118   6      default:break;
 119   6      }
 120   5      }
 121   4      if(P1_2==0){
 122   5      switch(set)
 123   5      {case 0:break;
 124   6      case 1:x[left]=up;break;
 125   6      case 2:{y[left]=up;if(P1_3==0)o_f1=!o_f1;}break; 
 126   6      case 3:{z[left]=up;if(P1_3==0)o_f2=!o_f2;}break;
 127   6      default:break;}
 128   5                              }
 129   4      else {
 130   5      switch(set)
 131   5      {case 0:break;
 132   6      case 1:up=x[left];break;
 133   6      case 2:{up=y[left];if(P1_3==0)o_f1=!o_f1;}break; 
 134   6      case 3:{up=z[left];if(P1_3==0)o_f2=!o_f2;}break;
 135   6      default:break;}
 136   5              }}
 137   3      }}
 138   1      P1=i;P3=j;
 139   1      }
 140          
 141          /*显示调整走时*/
 142          void t_adj()
 143          {p_out1();
 144   1      for(h=0;h<4;h++)        //四位数码管每位点亮3ms
 145   1              {if(h==left)P1=0x00;
 146   2              else {P1=DATA_7SEG[x[h]];
 147   3              P3=act[h];p_out();
 148   3              delay(3);}}
 149   1              P1=DATA_7SEG[up];P3=act[left];
 150   1              hour=x[3]*10+x[2];min=x[1]*10+x[0];
 151   1              p_out();
 152   1              delay(12);      //需调整的数码管点亮12ms
 153   1      if(o_f1==1){P1=0x01;P3_3=1;P3_2=1;P3_1=0;P3_0=1;} /*若定时1启动,
 154   1      点亮十位数码管小数点*/
 155   1              else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则十位数码管
 156   1      小数点不亮*/
 157   1      delay(12);              //需调整的数码管点亮12ms
 158   1      if(o_f2==1){P1=0x01;P3_3=1;P3_2=1;P3_1=1;P3_0=0;} /*若定时2启动,
 159   1      点亮个位数码管小数点*/
 160   1              else{P1=0x00;P3_3=1;P3_2=1;P3_1=1;P3_0=1;}p_out();/*否则个位数码管
 161   1      小数点不亮*/
 162   1      delay(12);              //需调整的数码管点亮12ms
 163   1      }
 164          
 165          /*显示调整定时1*/
 166          void t1_adj()
 167          {p_out1();
 168   1      for(h=0;h<4;h++)                //四位数码管每位点亮3ms
 169   1              {if(h==left)P1=0x00;
 170   2              else {P1=DATA_7SEG[y[h]];
 171   3              P3=act[h];p_out();
 172   3              delay(3);}}
 173   1              P1=DATA_7SEG[up];P3=act[left];  //需调整的数码管点亮18ms
 174   1              hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
 175   1              p_out();
 176   1      delay(18);
 177   1      if(o_f1==1){P1=0x01;P3_3=0;P3_2=1;P3_1=0;P3_0=1;} /*若定时1启动,
 178   1      点亮十位数码管小数点*/
 179   1              else{P1=0x01;P3_3=0;P3_2=1;P3_1=1;P3_0=1;} /*否则十位数码管
C51 COMPILER V7.06   JNSK                                                                  11/18/2005 20:06:16 PAGE 4   

 180   1      小数点不亮*/
 181   1              p_out();
 182   1              delay(18);                                              //需调整的数码管点亮18ms
 183   1      }
 184          
 185          
 186          /*显示调整定时2*/
 187          void t2_adj()
 188          {p_out1();
 189   1      for(h=0;h<4;h++)                                //四位数码管每位点亮3ms
 190   1              {if(h==left)P1=0x00;
 191   2              else {P1=DATA_7SEG[z[h]];               //需调整的数码管点亮18ms
 192   3              P3=act[h];p_out();
 193   3              delay(3);}}
 194   1              P1=DATA_7SEG[up];P3=act[left];
 195   1      hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
 196   1              p_out();
 197   1      delay(18);
 198   1      if(o_f2==1){P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=0;} /*若定时2启动,
 199   1      点亮个位数码管小数点*/
 200   1              else{P1=0x01;P3_3=1;P3_2=0;P3_1=1;P3_0=1;} /*否则个位数码管
 201   1      小数点不亮*/
 202   1              p_out();
 203   1              delay(18);                              //需调整的数码管点亮18ms
 204   1      }
 205          
 206          
 207          /*时、分、秒计时单元转换*/
 208          void conv()
 209          {
 210   1      if(deda<=5)d_05s=0;             //每500ms,秒点取反
 211   1              else d_05s=1;
 212   1      if(deda>=10){sec++;deda=0;}     //每1000ms,秒单元递增
 213   1      if(sec>=60){min++;sec=0;}               //每60s,分单元递增
 214   1      if(min>=60){hour++;min=0;}      //每60m,时单元递增
 215   1      if(hour>=24){hour=0;}                   //每24h,时单元清零
 216   1      }
 217          
 218          /*判别定时到否子函数*/
 219          void p_out()
 220          {
 221   1      if(o_f1==1)                     //若定时1启动
 222   1      {if(hour==hour1)                //定时1时间到
 223   2      {if(min==min1)
 224   3      {flag1=1;if(d_05s==1)P3_4=0;else P3_4=1;}}}     //继电器输出标志置1,蜂鸣器间断鸣响
 225   1      if(flag1==1) P3_5=0;                    //若输出标志为1,继电器吸合
 226   1      
 227   1      if(o_f2==1)                     //若定时2启动
 228   1      {if(hour==hour2)                //定时2时间到
 229   2      {if(min==min2)
 230   3      {flag1=0;if(d_05s==1)P3_4=0;else P3_4=1;}}} //继电器输出标志置0,蜂鸣器间断鸣响
 231   1      if(flag1==0) P3_5=1;                    //若输出标志为0,继电器释放
 232   1      }
 233          
 234          /*判别定时到否子函数1*/
 235          void p_out1()
 236          {
 237   1      if(o_f1==1)                     //若定时1启动
 238   1      {if(hour==hour1)                //定时1时间到
 239   2      {if(min==min1)
 240   3      {flag1=1;}}}                    //继电器输出标志置1
 241   1      if(flag1==1) P3_5=0;    //若输出标志为1,继电器吸合
C51 COMPILER V7.06   JNSK                                                                  11/18/2005 20:06:16 PAGE 5   

 242   1      
 243   1      if(o_f2==1)                     //若定时2启动
 244   1      {if(hour==hour2)                //定时2时间到
 245   2      {if(min==min2)
 246   3      {flag1=0;}}}                    //继电器输出标志置0
 247   1      if(flag1==0) P3_5=1;    //若输出标志为0,继电器释放
 248   1      }
 249          
 250          
 251          /*主函数*/
 252          void main()
 253          {
 254   1              init_timer0();            /*定时器T0初始化*/
 255   1              init_timer1();            /*定时器T1初始化*/
 256   1              
 257   1              while(1)
 258   1              {
 259   2      /*将显示缓冲数组内容移到时、分计时单元*/
 260   2      hour=x[3]*10+x[2];min=x[1]*10+x[0];
 261   2      hour1=y[3]*10+y[2];min1=y[1]*10+y[0];
 262   2      hour2=z[3]*10+z[2];min2=z[1]*10+z[0];
 263   2       conv();                                        /*时、分、秒及100mS单元转换*/
 264   2      /*将转换后的时、分计时单元内容移到显示缓冲数组*/
 265   2      x[3]=hour/10;x[2]=hour%10;x[1]=min/10;x[0]=min%10;
 266   2      y[3]=hour1/10;y[2]=hour1%10;y[1]=min1/10;y[0]=min1%10;
 267   2      z[3]=hour2/10;z[2]=hour2%10;z[1]=min2/10;z[0]=min2%10;
 268   2      switch(set)
 269   2      {
 270   3      case 0:time();break;/*显示走时*/
 271   3      case 1:t_adj();break;/*显示调整走时*/
 272   3      case 2:t1_adj();break;/*显示调整定时1*/
 273   3      case 3:t2_adj();break;/*显示调整定时2*/
 274   3      default:break;
 275   3      } 
 276   2      if(flag!=0x55)                                  /*判断RAM受干扰标志,若受干扰,
 277   2      则显示器闪烁告警*/
 278   2              {uchar i;P3_4=1;P3_5=1;
 279   3                      for(i=0;i<100;i++)              /*点亮显示器200mS*/
 280   3                      {
 281   4                      P1=DATA_7SEG[x[3]];P3=0xf7;delay(1);
 282   4                      P1=DATA_7SEG[x[2]];P3=0xfb;delay(1);
 283   4                      P1=DATA_7SEG[x[1]];P3=0xfd;delay(1);
 284   4                      P1=DATA_7SEG[x[0]];P3=0xfe;delay(1);
 285   4                      }
 286   3                      
 287   3                      P1=0xff;P3=0xff;delay(400);     /*熄灭显示器200mS*/
 288   3                      P3_7=0;
 289   3      /*如有键按下达0.5S则退出闪烁状态同时掉电标志置55H。*/
 290   3      if(P1!=0xff){
 291   4      delay(10);if(P1_0==0)flag=0x55;F0:if(P1!=0xff)goto F0;
 292   4                              }P3_7=1;
 293   3              }
 294   2      else TR1=1;/*启动定时器1*/
 295   2      }}


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1359    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     41       1
C51 COMPILER V7.06   JNSK                                                                  11/18/2005 20:06:16 PAGE 6   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =      5    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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