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

📄 chengxu.lst

📁 单路带数码管可编程可调节延时模块
💻 LST
字号:
C51 COMPILER V9.00   CHENGXU                                                               12/28/2012 00:49:21 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: D:\keil2\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                                      汇诚科技
   3          
   4          实现功能:此版配套测试程序
   5          使用芯片:STC12C2052AD
   6          晶振:11.0592MHZ
   7          波特率:9600
   8          编译环境:Keil
   9          作者:yang
  10          QQ:790244909
  11          网站:www.ourhc.cn
  12          淘宝店:汇诚科技 华龙电子直销:http://hlelectrony.taobao.com
  13          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
  14          /********************************************************************
  15          
  16          ********************************************************************/
  17          #include<STC12C5A60S2.H>   //库文件
  18          #include <intrins.h>
  19          #include<eprom.h>
  20          #define uchar unsigned char//宏定义无符号字符型
  21          #define uint unsigned int  //宏定义无符号整型
  22          #define DUAN P2            //P0口控制段
  23          #define WEI  P1            //P2口控制位
  24          /********************************************************************
  25                                      初始定义
  26          *********************************************************************/
  27          //数码管显示段码 
  28          code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
  29          //数码管显示位码 
  30          sbit wei1=P1^0;                //位的控制端
  31          sbit wei2=P1^1;
  32          sbit wei3=P1^2;
  33          sbit wei4=P1^3;
  34                                       
  35          uchar numb[4];        //定义字符串用于数值转换
  36          //按键
  37          sbit key2=P3^2;
  38          sbit key1=P3^3;
  39          //模拟量输入端
  40          sbit A1=P1^5;
  41          sbit A2=P1^6;
  42          //输入控制端
  43          sbit IN1=P3^7;
  44          sbit IN2=P1^7;
  45          //输出控制端
  46          sbit  OUT1=P3^4;
  47          sbit  OUT2=P3^5;
  48          //全局变量和标着位变量
  49          uchar timesnum;
  50          uchar setnum;
  51          uchar setnum1;
  52          uint xstimes=180;
  53          bit flag=0;
  54          bit zfflag=0;
  55          bit xsflag=0;
C51 COMPILER V9.00   CHENGXU                                                               12/28/2012 00:49:21 PAGE 2   

  56          bit changeflag=0;
  57          /********************************************************************
  58                                      延时函数
  59          *********************************************************************/
  60          void delay(uchar x)  //延时程序 0.002秒
  61          {
  62   1              uchar m,n,s;
  63   1              for(m=x;m>0;m--)
  64   1              for(n=20;n>0;n--)
  65   1              for(s=248;s>0;s--);
  66   1      }       
  67          /********************************************************************
  68                                      求值函数
  69          *********************************************************************/
  70          void t_to_dis(uchar num)
  71          {
  72   1          uint x;
  73   1          x=num*4;
  74   1              numb[0]=0;                      //显示千位
  75   1              numb[1]=x/100;          //显示百位
  76   1              numb[2]=x%100/10;                   //显示十位
  77   1              numb[3]=x%10;             //显示个位
  78   1      }
  79          
  80          /********************************************************************
  81                                      显示函数
  82          *********************************************************************/        
  83          void display()                  //显示函数
  84          {
  85   1            WEI&=0XF0;
  86   1                DUAN=seg7code[numb[0]];
  87   1                wei1=1;
  88   1                delay(2);
  89   1      
  90   1                WEI&=0XF0;  
  91   1            DUAN=seg7code[numb[1]];
  92   1                wei2=1;
  93   1                delay(2);
  94   1      
  95   1                WEI&=0XF0;  
  96   1                DUAN=seg7code[numb[2]];
  97   1                wei3=1;
  98   1                delay(2);
  99   1      
 100   1                WEI&=0XF0;  
 101   1            DUAN=seg7code[numb[3]];
 102   1                wei4=1;
 103   1                delay(2);
 104   1                WEI&=0XF0;
 105   1      }   
 106          /********************************************************************
 107                                     IO口初始化函数
 108          *********************************************************************/    
 109          void init_all(void)
 110          {               
 111   1          P2M1=0;
 112   1              P2M0=0xff;
 113   1              P1M1=0x80;
 114   1              P1M0=0x0f;
 115   1              P3M1|=0x80;
 116   1              P3M0&=0x7f;
 117   1      } 
C51 COMPILER V9.00   CHENGXU                                                               12/28/2012 00:49:21 PAGE 3   

 118          /********************************************************************
 119                                     按键扫描函数
 120          *********************************************************************/    
 121          void key_scan(void)
 122          {
 123   1               if(xsflag==1) 
 124   1                   t_to_dis(setnum);                  //数值变换
 125   1                else
 126   1                   t_to_dis(timesnum);
 127   1      
 128   1           if(key1==0)                         //增加次数
 129   1                      {
 130   2                        delay(5);
 131   2                        if(key1==0)
 132   2                         {
 133   3                           while(!key1);
 134   3                               xsflag=1;
 135   3                               setnum++;                   //keynum=0为模式0,继电器吸合300ms ,keynum=1继电器吸合12s
 136   3                               if(setnum>=100)
 137   3                                   setnum=100;
 138   3                           IapEraseSector(0);  //擦除扇区
 139   3                               IapProgramByte(5,setnum);
 140   3                               xstimes=0;
 141   3                               changeflag=1;
 142   3                         }
 143   2                      }
 144   1                 if(key2==0)                   //按键扫描,key2按下模式变化一次
 145   1                      {
 146   2                        delay(5);
 147   2                        if(key2==0)
 148   2                         {
 149   3                           while(!key2);
 150   3                               xsflag=1;
 151   3                               setnum--;                   //减小次数
 152   3                               if(setnum==0||setnum>=120)
 153   3                                 setnum=0;
 154   3                               IapEraseSector(0);  //擦除扇区
 155   3                               IapProgramByte(5,setnum);
 156   3                                xstimes=0;
 157   3                                changeflag=1;
 158   3                         }
 159   2                      }
 160   1      }
 161          /********************************************************************
 162                                     定时器T0初始化
 163          *********************************************************************/
 164          void timer0init(void)
 165          { 
 166   1               TMOD=0X01;                  //定义定时器工作方式
 167   1               TH0=(65536-25000)/256;
 168   1               TL0=(65536-25000)%256;
 169   1               ET0=1;
 170   1               TR0=1;
 171   1               EA=1;
 172   1       }
 173          /********************************************************************
 174                                      主函数
 175          *********************************************************************/
 176          void main()
 177          {           
 178   1              init_all();                     //初始化IO
 179   1              timer0init();                           //定时器初始化
C51 COMPILER V9.00   CHENGXU                                                               12/28/2012 00:49:21 PAGE 4   

 180   1              setnum1=setnum=IapReadByte(5); 
 181   1              while(1)
 182   1              { 
 183   2               
 184   2      
 185   2                key_scan();                           //键盘扫描
 186   2      
 187   2                if(xstimes>=180)
 188   2                   xsflag=0;
 189   2      
 190   2      
 191   2                if(IN2==0&&flag==0)       //寻找位置
 192   2                {
 193   3                        delay(10);                
 194   3                        if(IN2==0)
 195   3                        {
 196   4                           delay(2);
 197   4                           //while(!IN1);
 198   4                               OUT1=!OUT1;
 199   4                              
 200   4                               flag=1;
 201   4                        }
 202   3                }
 203   2      
 204   2      
 205   2               if(flag==1&&IN1==0)   //flag=1上电不计数,找到位置开始计数
 206   2               {
 207   3                  delay(5);
 208   3                if(IN1==0)
 209   3                { 
 210   4                   delay(5);
 211   4                   while(!IN1);
 212   4      
 213   4                       if(zfflag==0&&timesnum<(setnum1+1))     
 214   4                       timesnum++;
 215   4                       else
 216   4                               timesnum--;
 217   4      
 218   4                       if(timesnum>=(setnum1+1))
 219   4                       {
 220   5                         delay(60);
 221   5                         zfflag=1;
 222   5                         OUT1=!OUT1;  
 223   5                       }
 224   4      
 225   4                       if(timesnum==0)
 226   4                       {
 227   5                         delay(5);
 228   5                        if(timesnum==0)
 229   5                         {
 230   6                          
 231   6                                t_to_dis(timesnum);
 232   6                            zfflag=0;
 233   6                           if(changeflag==1)
 234   6                           {
 235   7                                changeflag=0;
 236   7                                setnum1=setnum;
 237   7                           }
 238   6                            while(IN2);
 239   6                            OUT1=!OUT1; 
 240   6                         }
 241   5                         }
C51 COMPILER V9.00   CHENGXU                                                               12/28/2012 00:49:21 PAGE 5   

 242   4      
 243   4                 }
 244   3                }
 245   2          }
 246   1      }
 247          /********************************************************************
 248                                     定时器T1中断函数
 249          *********************************************************************/
 250          void timer0(void)interrupt 1  using 1
 251          { 
 252   1       TH0=(65536-25000)/256;
 253   1       TL0=(65536-25000)%256;
 254   1          xstimes++;
 255   1              display();                   //显示函数 
 256   1              
 257   1      }
 258          /********************************************************************
 259                                        结束
 260          *********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    582    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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