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

📄 wendu.lst

📁 51单片机用c语言实例 包括ad
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   WENDU                                                                 08/02/2005 14:26:27 PAGE 1   


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

line level    source

   1          /**************************************************************
   2           * 文件名:   Wendu.c
   3           * 功能描述: 实现闭环温度控制,将给定值与测量值在数码管上显示
   4           **************************************************************/
   5          
   6          #include <reg51.h>
   7          #include <absacc.h>
   8          #include <math.h>
   9          
  10          void pid(void);
  11          void init(void);
  12          void Display(void);
  13          void clear();
  14          
  15          int  mmul(int x, int y);                 /*16位乘法,溢出赋极值*/
  16          int  madd(int x, int y);                 /*16位加法,溢出赋极值*/
  17          int  change32_16(int z, int t);          /*将32位数转化成16位*/
  18          char change16_8(int wd);                 /*将16位数转化成8位*/
  19          
  20          #define C8255_A     XBYTE[0x7F00]
  21          #define C8255_B     XBYTE[0x7F01]
  22          #define C8255_C     XBYTE[0x7F02]
  23          #define C8255_CON   XBYTE[0x7F03]
  24          
  25          #define AD0809      XBYTE[0xFEFF]
  26          
  27          sbit P17 = P1^7;
  28          
  29          char TS    = 0x64;
  30          int  X     = 0x80;
  31          char SPEC  = 0x28;              // 数字给定(40)
  32          char IBAND = 0x60;              // 积分分离值
  33          int  KP    = 12;                // 比例系数
  34          char KI    = 20;                // 积分系数
  35          char KD    = 32;                // 微分系数
  36          int  CK;                                // 控制量:PID算法产生用于控制的量
  37          int  TC;                                // 采样周期变量
  38          char FPWM;                              // PWM脉冲中间标志位
  39          int  CK_1;                              // 控制量变量:记录上次控制量值
  40          int  AAAA;                              // PWM脉冲高电平时间计算
  41          int  VAA;                               // AAAA变量
  42          int  BBB;                               // PWM脉冲低电平时间计算
  43          int  VBB;                               // BBB变量
  44          int  TKMARK;                    // 采样标志值
  45          int  ADMARK;                    // AD转换结束标志位
  46          int  ADVALUE;                   // AD采样值保存
  47          int  YK;                                // 反馈:测量温度值
  48          int  EK;                                 
  49          int  EK_1;                              
  50          int  AEK;                               
  51          int  BEK;                               
  52          
  53          unsigned char DIS;
  54          // BCD码显示表
  55          unsigned char Led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6f};
C51 COMPILER V7.09   WENDU                                                                 08/02/2005 14:26:27 PAGE 2   

  56          unsigned char b[] = {0x00, 0x00, 0x00, 0x00};           // 位选
  57          
  58          // 温度表
  59          unsigned char code  a[0x100]={0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
  60                                                            0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
  61                                                            0x1D, 0x1E, 0x1E, 0x1F, 0x20, 0x21, 0x23, 0x24, 0x25,
  62                                                            0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  63                                                            0x2F, 0x31, 0x32, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  64                                                            0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,
  65                                                            0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
  66                                                            0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x4F, 0x50, 0x51,
  67                                                            0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A,
  68                                                            0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63,
  69                                                            0x64, 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x68, 0x69,
  70                                                            0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6E, 0x6F, 0x6F, 0x70,
  71                                                                    0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
  72                                                                    0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82,
  73                                                                    0x83, 0x84, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
  74                                                                    0x8B, 0x8C, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
  75                                                                    0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9C,
  76                                                                    0x9C, 0x9D, 0x9D, 0x9E, 0x9E, 0x9F, 0x9F, 0xA0, 0xA1,
  77                                                                    0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA,
  78                                                                    0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1, 0xB2,
  79                                                                0xB3, 0xB4, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA,
  80                                                                0xBB, 0xBD, 0xBE, 0xBE, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5,
  81                                                                    0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2,
  82                                                                0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
  83                                                                0xDD, 0xDE, 0xE3, 0xE6, 0xE9, 0xEC, 0xF0, 0xF2, 0xF6,
  84                                                                0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  85                                                                0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  86                                                                0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  87                                                                0xFF, 0xFF, 0xFF, 0xFF  };
  88          
  89          void delay(unsigned int time)
  90          {
  91   1              unsigned int i;
  92   1              for(i=0; i<time; i++);
  93   1      }
  94          
  95          void main()
  96          {
  97   1         init();
  98   1      
  99   1         while (1)
 100   1         {
 101   2            while (1)
 102   2            {
 103   3                    if (TKMARK == 0x01)                       //采样周期到否
 104   3                        break;
 105   3            }
 106   2      
 107   2            TKMARK = 0x00;
 108   2      
 109   2            while (1)
 110   2            {
 111   3                    if (ADMARK == 0x01)                       //AD转换是否结束
 112   3                        break;
 113   3            }
 114   2      
 115   2            ADMARK = 0x00;
 116   2      
 117   2            YK = a[ADVALUE];                                  //查温度表
C51 COMPILER V7.09   WENDU                                                                 08/02/2005 14:26:27 PAGE 3   

 118   2            DIS = (char)YK;
 119   2      
 120   2            pid();                                                    //调PID运算函数
 121   2      
 122   2            if( CK <= 0x80)                                   //根据CK产生PWM
 123   2                    AAAA = 0x00;
 124   2            else
 125   2                    AAAA = CK - 0x80;
 126   2      
 127   2            BBB = 0x7f - AAAA;
 128   2         }
 129   1      }
 130          
 131          void init(void)                                                 //初始化函数
 132          {
 133   1              YK      = 0x00;                                         //变量初始化
 134   1              EK      = 0x00;
 135   1              EK_1    = 0x00;
 136   1              AEK     = 0x00;
 137   1              BEK     = 0x00;
 138   1              CK      = 0x00;
 139   1              CK_1    = 0x00;
 140   1              BBB     = 0x00;
 141   1              VBB     = 0x00;
 142   1              ADVALUE = 0x00;
 143   1              TKMARK  = 0x00;
 144   1              ADMARK  = 0x00;
 145   1              TC      = 0x00;
 146   1              FPWM    = 0x01;
 147   1              AAAA    = 0x7F;
 148   1              VAA     = 0x7F;
 149   1              
 150   1              C8255_CON = 0x81;
 151   1              Display();
 152   1              clear();
 153   1              
 154   1              TMOD = 0x11;                                            // T1, T0 16位定时器
 155   1              IP = 0x02;                                                      // pt0 定时器0中断为高优先级
 156   1              IT1 = 1;                                                        // 外中断1为下降沿有效
 157   1              EX1 = 1;                                                        // 允许INT1中断
 158   1              TH0 = 0xD8;
 159   1              TL0 = 0xEF;
 160   1              
 161   1              TH1 = 0xD8;
 162   1              TL1 = 0xEF;
 163   1              ET0 = ET1 = 1;                                          //使能定时器中断
 164   1              TR0 = TR1 = 1;                                          //启动定时器
 165   1              EA = 1;
 166   1              AD0809 = 1;                                                     // 启动AD
 167   1      }
 168          
 169          void myint3(void) interrupt 3                   // 定时器1,LED显示
 170          {
 171   1              TH1 = 0xD8;
 172   1              TL1 = 0xEF;
 173   1              ET1 = 1;
 174   1              Display();

⌨️ 快捷键说明

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