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

📄 chengxu.lst

📁 单片机调试程序
💻 LST
字号:
C51 COMPILER V8.04   CHENGXU                                                               10/08/2006 15:40:48 PAGE 1   


C51 COMPILER V8.04, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<math.h>
   3          
   4          void short_delay(void);                           //短延时程序
   5          void send_1602( unsigned char DATA_OUT );             //控制1602接收数据
   6          void  write_command(unsigned char DATA_OUT);      //写命令
   7          void  write_data(unsigned char DATA_OUT);                 //写数据
   8          unsigned int fh(unsigned char i);
   9          unsigned int Vout[10];
  10          unsigned char counter,couter,counter1;
  11          
  12          sbit RS=P3^1;                    //1602命令控制端
  13          sbit RW=P3^0;                    //1602读写控制端
  14          sbit E=P3^7;                         //1602时能控制端,并且是低下降延触发
  15          
  16          //*************************************
  17          //1602的操作
  18          
  19          //写数据到1602
  20          void send_1602( unsigned char DATA_OUT )
  21          {E=1;
  22   1       P1=DATA_OUT;
  23   1       short_delay();
  24   1       E=0;
  25   1       short_delay(); 
  26   1      }
  27          
  28          //写命令
  29          void  write_command(unsigned char DATA_OUT)
  30          {RS=0;
  31   1       RW=0;
  32   1       send_1602(DATA_OUT);
  33   1      }
  34          
  35          //写数据
  36          void  write_data(unsigned char DATA_OUT)
  37          {RS=1;
  38   1       RW=0;
  39   1       send_1602(DATA_OUT);
  40   1      }
  41          
  42          //显示单位
  43          void  write_unit(void)                  
  44          {write_command(0x8d);
  45   1       write_data('(');
  46   1       write_data('V');
  47   1       write_data(')');
  48   1       write_command(0x85);
  49   1       }
  50          //*************************************
  51          //10的指数次运算
  52          unsigned int fh(unsigned char i)
  53          {unsigned int temp;
  54   1        temp=1;
  55   1        for(i;i;i--)
C51 COMPILER V8.04   CHENGXU                                                               10/08/2006 15:40:48 PAGE 2   

  56   1        {temp=temp*10;
  57   2         }
  58   1       return(temp);
  59   1       }
  60          
  61          //数据处理
  62          void  Vout_manage(void) 
  63          {unsigned char i,flag,temp[7]={"000000"};
  64   1      // unsigned long int a;
  65   1       unsigned int a,b;
  66   1        a=0;
  67   1        for(i=(counter1);i;i--)
  68   1        {a+=Vout[i-1];}
  69   1         b=a/10;
  70   1       flag=0;
  71   1       temp[0]= (b/fh(4))+48;                        //清除标致
  72   1       for(i=3;i;i--)                                                                    //
  73   1       {temp[4-i]=((b/fh(i))-(b/fh(i+1))*10)+48;
  74   2        }
  75   1       temp[4]=(b%10)+48;                             //求最后一位
  76   1       for(i=0;i<5;i++)
  77   1       {if(i<2)                                          //如果是整数部份,就执行整数部分的程序
  78   2          {if(!(temp[i]-48))                                                     //整数值是否为零,为零时是否是最高位为零,是不显示
  79   3                 {if(flag) write_data(temp[i]);}                
  80   3               else
  81   3                 {flag=1;
  82   4                   write_data(temp[i]);}   
  83   3               }
  84   2        else if(i==2)
  85   2          {if(flag!=1)
  86   3                 {write_data('0');                           //如果显示整数为零,折显示0
  87   4                   }
  88   3                write_data('.');                                         //显示小数点
  89   3                write_data(temp[i]);
  90   3                }     
  91   2        else if(i>2&&i<5) 
  92   2          {write_data(temp[i]);
  93   3               }                                   
  94   2         }
  95   1        write_command(0x85);
  96   1       }
  97          
  98          void yw(void)
  99          {unsigned char i;
 100   1       for(i=9;i;i--)Vout[i]=Vout[i-1];
 101   1       }
 102          //*************************************
 103          //中断程序
 104                                                                                                    
 105          //外部脉冲计数控制,既定时器0中断控制
 106          void  time0(void) interrupt 1 using 1
 107          {TL0=0x00;
 108   1       TH0=0x00;
 109   1       counter++;
 110   1       }
 111          
 112          //定时器一秒时间控制,既定时器1中断控制
 113          void  time1(void) interrupt 3 using 1          
 114          {unsigned char i,temp1,temp2,temp3;
 115   1       unsigned int temp;
 116   1       TL1=0xB0;
 117   1       TH1=0x3C;
C51 COMPILER V8.04   CHENGXU                                                               10/08/2006 15:40:48 PAGE 3   

 118   1       couter--;
 119   1       if(!couter)                                //V-F转换
 120   1        {temp1=TL0;                                               //低位
 121   2         TL0=0x00;
 122   2         temp2=TH0;                               //高位
 123   2         TH0=0x00;
 124   2         couter=20;
 125   2         temp3=counter;                    
 126   2         counter=0;
 127   2         if(counter1!=10)counter1++;
 128   2         temp=(temp1+temp2*256+65536*temp3); 
 129   2         temp=(temp-2000)*1.5;
 130   2         //yw();                               //移位
 131   2         for(i=9;i;i--)Vout[i]=Vout[i-1];
 132   2         i=temp/100;
 133   2         if(50<i&&i<60)
 134   2          {temp=temp+40;}
 135   2         else if(40<i && i<50)
 136   2          {temp=temp+20;}
 137   2         else if(30<i&&i<41)
 138   2          {temp=temp+10;}
 139   2         else if(20<i&&i<31)
 140   2          {temp=temp-40;}
 141   2         else if(15<i&&i<21)
 142   2          {temp=temp-80;}
 143   2         else if(i<16)
 144   2           {switch (i)
 145   3                 {case 15:temp=temp-100;break;
 146   4                  case 14:temp=temp-150;break;
 147   4              case 13:temp=temp-180;break;
 148   4                      case 12:temp=temp-200;break;
 149   4                      case 11:temp=temp-200;break;
 150   4                  case 10:temp=temp-220;break;
 151   4              case 9:temp=temp-250;break;
 152   4              case 8:temp=temp-260;break;
 153   4              case 7:temp=temp-275;break;
 154   4                  case 6:temp=temp-285;break;
 155   4                  case 5:temp=temp-330;break;
 156   4                  case 4:temp=temp-410;break;
 157   4                  case 3:temp=temp-420;break;
 158   4                  case 2:temp=temp-400;break;
 159   4                   }
 160   3                 }
 161   2         Vout[0]=temp;   
 162   2         //Vout=((temp1+temp2*256+65536*temp3)-2000)*1.5;   //对数值进行1000倍放大 
 163   2         //Vout=10000; 
 164   2         //Vout=(Vout-2)*1.5;
 165   2         }
 166   1       }
 167          
 168          //*************************************
 169          //延时程序
 170          void short_delay(void)
 171          {unsigned char i;
 172   1       for(i=200;i;i--);
 173   1      }  
 174          
 175          //主程序
 176          void main()
 177          {unsigned char code a[9]={"Vout="};
 178   1       unsigned char i;                                                                                         
             -                                                                                                                        
C51 COMPILER V8.04   CHENGXU                                                               10/08/2006 15:40:48 PAGE 4   

             -                                                                                         SP=0x60;
 179   1       IE=0x8A;                         //打开定时中断0和1
 180   1       IP=0x08;
 181   1       TMOD=0x15;                       //T0为外部计脉冲,T1为定时控制
 182   1       TL0=0x00;                                                //设置定时器0和1的器起始时间
 183   1       TH0=0x00;
 184   1       TL1=0xB0;
 185   1       TH1=0x3C;
 186   1       //PCON=0X01;
 187   1       Vout[0]=2000;
 188   1       counter1=1;
 189   1       counter=0;
 190   1       couter=20;
 191   1       write_command(0x01);                    //关画面
 192   1       for(i=255;i;i--)                            //保证液晶正常复位
 193   1       {short_delay();
 194   2        }
 195   1        for(i=200;i;i--)                           //保证液晶正常复位
 196   1       {short_delay();
 197   2        }
 198   1       write_command(0x0c);            //开画面
 199   1       write_command(0x38);            //设置数据为8位,并且使双行显示,5*7的点阵字体
 200   1       write_command(0x06);            //设置光标为右移
 201   1       write_command(0x80);                    //设置起始位置
 202   1       for (i=0;i<5;i++)               //显示个数据 
 203   1       {write_data( a[i] );
 204   2        }
 205   1       Vout_manage();                  //显示数值
 206   1       write_unit();                   //显示单位
 207   1       TCON=0x50;                          //打开定时器
 208   1       while(1)
 209   1       {Vout_manage();
 210   2        } 
 211   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    889    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23      14
   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 + -