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

📄 dc_current_souce.lst

📁 利用单片机控制电流大小
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   DC_CURRENT_SOUCE                                                      09/10/2005 19:28:46 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE DC_CURRENT_SOUCE
OBJECT MODULE PLACED IN dc_current_souce.OBJ
COMPILER INVOKED BY: D:\专业学习软件\keil\C51\BIN\C51.EXE dc_current_souce.c OPTIMIZE(2,SPEED) BROWSE INTVECTOR(0X8000) 
                    -DEFINE(monitor51) DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.H>
   2          #include<absacc.h>
   3          #include<intrins.h>
   4          
   5          #define uchar unsigned char
   6          
   7          sbit CS=P1^0;
   8          sbit CLK=P1^1;
   9          sbit DIO=P1^2;
  10          unsigned char KeyCode;    //键盘值
  11          char  dispbuff[8];         //显示缓存
  12          unsigned int volatile keybuf[4];   //键盘读数频率值
  13          char volatile i;    //位标志 
  14          bit volatile set,up_down;    //设置键标志
  15          unsigned char num;
  16          int volatile control;    //频率字
  17          unsigned char keycontrol;          //频率缓存
  18          unsigned int cc; 
  19          char xdata *max530_ad;
  20          char ReadKB();                //读键盘
  21          void sent(unsigned char sent_buf);        //向7289发数据
  22          void delay(unsigned char time);            //延时
  23          void display(unsigned char k)reentrant;             //显示
  24          void transkey1(void);       //将所设定的数值转化为控制字(10进制转16进制)
  25          void dis_control(unsigned char keycontrol)reentrant;      //显示控制如:左移,右移,显示setting
  26          void dacconvent(void)reentrant;   //da转换
  27          void xiuzheng(void);   //对电流的误差进行分段修正,让电流更加准确
  28          
  29          void KeyBoard() interrupt 2          //键盘辨别
  30          {     EX1=0;
  31   1            KeyCode=ReadKB();      //读键盘
  32   1         if(KeyCode==0x0f)                //======判断是否是设置键按下
  33   1                 { i=0;
  34   2                   set=1;
  35   2                       keycontrol=0xa4;        //复位
  36   2               dis_control(keycontrol);       
  37   2                   dispbuff[6]=0x0d;
  38   2                   display(6);
  39   2                   goto loop1;
  40   2      
  41   2             }
  42   1          else if(set)             //======只有当设置键按下才判断
  43   1                {  
  44   2              if(KeyCode==0x0e)         //确定键
  45   2                    {  set=0;
  46   3                          if(i)    //只有当I不为0时才发送
  47   3                           {
  48   4                            transkey1();         //将所设定的数值转化为控制字(10进制转16进制)
  49   4                    dacconvent();                      
  50   4                    keycontrol=0xa4;        //复位
  51   4                    dis_control(keycontrol);    
  52   4                                goto loop1;                  
  53   4                               }
  54   3                   goto loop1;
C51 COMPILER V7.07   DC_CURRENT_SOUCE                                                      09/10/2005 19:28:46 PAGE 2   

  55   3                         }
  56   2                   if((KeyCode<=9)&&(KeyCode>=0)&&(i<4))
  57   2                     {  
  58   3                           keycontrol=0xa0; 
  59   3                   dis_control(keycontrol);                    //显示左移一位
  60   3                           keybuf[i]=KeyCode; 
  61   3                   dispbuff[7]=keybuf[i];
  62   3                               display(7);
  63   3                                i++;
  64   3                               goto loop1;
  65   3                         }
  66   2               if((KeyCode==0x0d)&&(i>0))           //删除一位,
  67   2                 {  
  68   3                   keycontrol=0xa1;           //第一个显示变黑,右移一位
  69   3                   dis_control(keycontrol); 
  70   3                           i--;
  71   3                               goto loop1;
  72   3                          }
  73   2                goto loop1;
  74   2              }            
  75   1          if(KeyCode==0x0c)    // 步进选择(up_down=1为1ma步进,=0时为10ma步进)
  76   1              {  
  77   2                up_down=!up_down;
  78   2                goto loop1;
  79   2                       }
  80   1              if((KeyCode<=9)&&(KeyCode>=1))    //选择步进系数即:数字*1ma,数字*10ma
  81   1                  {
  82   2                         num=KeyCode;
  83   2                         goto loop1;
  84   2                      }
  85   1          if(KeyCode==0x0b)              //加
  86   1              {                  
  87   2                         if(up_down)
  88   2                          control=control+num;
  89   2                         else control=control+10*num;
  90   2                         goto loop1;
  91   2                      }
  92   1              if(KeyCode==0x0a)   // 减
  93   1              {
  94   2                         if(up_down)
  95   2                          control=control-num;
  96   2                         else control=control-10*num;
  97   2                         goto loop1;
  98   2                      }    
  99   1           loop1:   EX1=1;
 100   1         if(control<=0)
 101   1            control=0;
 102   1         if(control>2000)
 103   1                control=2000;
 104   1         dacconvent();
 105   1      }
 106          
 107          
 108          main()
 109          {
 110   1         unsigned int time;
 111   1         char m;
 112   1         EX1=1;
 113   1         EA=1;
 114   1         IT1=1;
 115   1         set=0;  
 116   1         i=0;
C51 COMPILER V7.07   DC_CURRENT_SOUCE                                                      09/10/2005 19:28:46 PAGE 3   

 117   1         control=500;  //初始化电流500ma
 118   1         up_down=0;   //初始化步进10ma档
 119   1         num=1;       //初始化步进系数1
 120   1         keycontrol=0xa4;        //复位
 121   1         dis_control(keycontrol);     
 122   1           
 123   1                   dispbuff[2]=0x09;
 124   1                   display(2);
 125   1                       dispbuff[3]=0x00;
 126   1                   display(3);
 127   1                       dispbuff[4]=0x00;
 128   1                   display(4);
 129   1                       dispbuff[5]=0x0D;
 130   1                   display(5);                 
 131   1              for(time=0;time<800;time++)
 132   1              delay(100);
 133   1                      dacconvent();
 134   1       while(1)
 135   1       {  
 136   2          
 137   2          if(!set)
 138   2               {  keycontrol=0xa4;        //复位
 139   3                dis_control(keycontrol);
 140   3                 dispbuff[1]=num;
 141   3                   display(1);
 142   3                 if(up_down==0)
 143   3                   {
 144   4                     dispbuff[2]=0;
 145   4                 display(2);
 146   4                       }
 147   3             
 148   3                 if(control<2000) 
 149   3                       {
 150   4                        if((control/1000))
 151   4                          {
 152   5                   cc=control;
 153   5                               dispbuff[4]=cc/1000;
 154   5                               display(4);
 155   5                               m=dispbuff[4];
 156   5                   cc=cc-1000*m;
 157   5                               dispbuff[5]=cc/100;
 158   5                               display(5);
 159   5                               m=dispbuff[5];
 160   5                               cc=cc-100*m;
 161   5                               dispbuff[6]=cc/10;
 162   5                               display(6);
 163   5                               m=dispbuff[6];

⌨️ 快捷键说明

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