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

📄 chengxu.lst

📁 单路带数码管可编程可调节延时模块
💻 LST
字号:
C51 COMPILER V7.06   CHENGXU                                                               01/01/2002 07:00:41 PAGE 1   


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

stmt level    source

   1          
   2          /********************************************************************
   3                                      汇诚科技
   4          
   5          实现功能:此版配套测试程序
   6          使用芯片:STC12C2052AD
   7          晶振:11.0592MHZ
   8          波特率:9600
   9          编译环境:Keil
  10          作者:zhangxinchunleo
  11          网站:www.ourhc.cn
  12          淘宝店:汇诚科技 http://shop36330473.taobao.com
  13          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
  14          /********************************************************************
  15          采样AD的电压值作为继电器的延时吸合时间  最大调节数为255秒最小调节单位是秒
  16          或者最大调节时间为分,最大调节数为255,最小调节单位为分
  17          
  18          ********************************************************************/
  19          
  20          #include<STC12C5A60S2.H>               //库文件
  21          #include <intrins.h>
  22          #include"SMG.H"
  23          #define uchar unsigned char//宏定义无符号字符型
  24          #define uint unsigned int  //宏定义无符号整型
  25          #define FOSC 11059200L
  26          #define BAUD  9600
  27          
  28          #define ADC_POWER   0x80            //ADC 电源控制位
  29          #define ADC_FLAG    0x10            //ADC 转换结束标志位
  30          #define ADC_START   0x08            //ADC 开始转换控制位
  31          #define ADC_SPEEDLL 0x00            //420个时钟周期转换一次
  32          #define ADC_SPEEDL  0x20            //280 个时钟周期转换一次
  33          #define ADC_SPEEDH  0x40            //140个时钟周期转换一次
  34          #define ADC_SPEEDHH 0x60            //70个时钟周期转换一次
  35          extern void t_to_dis(void);
  36          extern void display(void);           //显示函数
  37          sbit key1=P3^2;
  38          sbit key2=P3^3;
  39          sbit key3=P3^4;
  40          sbit IN0=P1^6;
  41          sbit IN1=P1^7;
  42          /********************************************************************
  43                                      延时函数
  44          *********************************************************************/
  45          void delay(uchar x)//延时程序 0.1秒
  46          {
  47   1              uchar m,n,s;
  48   1              for(m=x;m>0;m--)
  49   1              for(n=20;n>0;n--)
  50   1              for(s=248;s>0;s--);
  51   1      }
  52                             
  53          /********************************************************************
  54                                   AD转换初始化程序
  55          *********************************************************************/
C51 COMPILER V7.06   CHENGXU                                                               01/01/2002 07:00:41 PAGE 2   

  56          
  57          void InitADC()
  58          {
  59   1          P1ASF|=0x10;        //设置P1口为开漏模式,使用AD功能
  60   1          ADC_RES=0;        //AD数据寄存器清空
  61   1          ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START;//打开AD电源,转换周期XX
  62   1          delay(10);                //延时
  63   1      }
  64          
  65          /********************************************************************
  66                                   AD转换控制程序
  67          *********************************************************************/
  68          uchar GetADCResult(uchar px)      //转换输出的数据 (PX为通道口)
  69          {
  70   1          ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//开始转换
  71   1          _nop_();                        //延时一个机器周期
  72   1          _nop_();                                            //延时一个机器周期
  73   1          _nop_();                                            //延时一个机器周期
  74   1          _nop_();                                            //延时一个机器周期
  75   1          while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
  76   1          ADC_CONTR &= ~ADC_FLAG;         //关闭AD转换
  77   1          return ADC_RES;                 //返回数据
  78   1      } 
  79          void ex0_init(void)
  80          {
  81   1        IT0=1;    // Falling触发
  82   1        EX0=1;        //开外部中断
  83   1        EA=1;
  84   1      }void init_all(void)
  85          {               
  86   1         jdq=0;
  87   1              P2M1=0;
  88   1              P2M0=0xff;
  89   1              P1M1=0;
  90   1              P1M0=0x0f;
  91   1              P3M1&=0x7f;
  92   1              P3M0|=0x80;
  93   1              key1=1;
  94   1              key1=IN1;
  95   1      
  96   1      }
  97          /********************************************************************
  98                                      主函数
  99          *********************************************************************/
 100          void main()
 101          {        
 102   1              init_all();         //初始化IO
 103   1              timer0init();   //初始化T0/T1定时器 
 104   1              InitADC();      //AD转换初始化
 105   1              ex0_init();             //初始化外部中断
 106   1              keynum=1;
 107   1              while(1)
 108   1              {       GetADCResult(4);  //扫描adc转换结果
 109   2                      t_to_dis();               //数值变换
 110   2                      display();                //显示函数
 111   2                  key1=IN1;             //把key1和IN1放在一起作为输入控制端
 112   2                      if(key2==0)             //按键扫描,key2按下模式变化一次
 113   2                      {
 114   3                        delay(5);
 115   3                        if(key2==0)
 116   3                         {
 117   4                           while(!key2);
C51 COMPILER V7.06   CHENGXU                                                               01/01/2002 07:00:41 PAGE 3   

 118   4                               keynum++;              //keynum=0为模式0,继电器吸合300ms ,keynum=1继电器吸合12s
 119   4                               if(keynum==2)
 120   4                                   keynum=0;
 121   4                         }
 122   3                      }
 123   2          }
 124   1      }
 125          void ex0_sevice(void) interrupt 0 using 1  //外部中断服务函数
 126          {  
 127   1          TR0=1;         //有信号时触发中断,定时器启动延时开始
 128   1      }       
 129          /********************************************************************
 130                                        结束
 131          *********************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    412    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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