微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > ADC0832采集到的数据发送到串口一直是乱码怎么回事?

ADC0832采集到的数据发送到串口一直是乱码怎么回事?

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit start=P3^3;                         //ADC0808控制端 引脚 定义
sbit eoc=P3^4;
sbit cs=P2^3;
sbit V=P2^5        ;                 //电压、电流、电阻测量换挡引脚定义
sbit I=P2^6;
sbit R=P2^7;
sbit a=P3^5;                  //ADC0808控制输入端引脚定义
sbit b=P3^6;
sbit c=P3^7;
sbit duan=P2^0;                   //锁存器74HC573使能端引脚定义
sbit wei=P2^1;
        
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管代码表"0-F"
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; //共阴数码管代码表"0-F"(带小数点)
//uchar table2[]='D';
uchar *p="d";
int i;
uchar ge=0,shi=0,bai=0,qian=0,wan=0,sw=0;           //声明全局变量,用于数码管显示,分别为“个、十百、千、万、十万”
void delay(uint count)                 //延时1ms 子程序
{
  uint i,j;
  for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}
void serial_int()
{
    //设置定时器1的工作方式为方式2
    TMOD=0x20;   //设定定时器1的初值,使串口通讯的波特率为9600bps
    TH1=0xfd; TL1=0xfd;
    SCON=0x50;
    PCON=0x00;
    ES=1;EA=1;
    TR1=1;
}

/*主函数*/
void main()
{
  uint adval,adval2,adval3;                        //声明变量
  unsigned long int temp;
                  
  while(1)
  {
           
         if(V==0)                                                    //选择电压档,进行电压测量        (电流电阻档程序跟此类似)
         {        
                a=0;b=0;c=0;           //ADC0808通道选择
                start=0;
                cs=0;
                delay(5);
                start=1;
                delay(5);
                start=0;
                while(1)
                {
                        if(eoc==1)
                            {
                               cs=1;
                               adval=P1;        //读取数字量
                                temp=adval* 1.0/255* 1000;        //换算成具体电压值的100倍
                                 serial_int();
                   ES=0;
                                   delay(5);
                                
                                cs=0;
                            sw=temp/100000;                                 //取各位的具体数值
                                wan=temp%100000/10000;
                                qian=temp%10000/1000;
                                bai=temp%1000/100;
                                shi=temp%100/10;
                                ge=temp%10;        
                                //delay(5);
                                    P0=0x00;      //清除P0口的数据,方便下次赋值
                                        delay(5);
                                        wei=1;duan=0;         //对数码管进行位选
                                        P0=0xdf;
                                        delay(2);               
                                        wei=0;duan=1;          //对数码管进行段选(下面类似)
                                        P0=table[ge];
                                        delay(2);        
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xef;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[shi];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xf7;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table1[bai];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfb;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[qian];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfd;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[wan];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfe;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[sw];
                                        delay(2);
                                    
                                        P0=0x00;
                                start=1;
                                start=0;
                                delay(10);
                        }
                        if(I==0||R==0)         break;           //中途换挡则退出循环
                  }
         }
          if(I==0)                                         //        选择电流档  进行电流测量
          {
                 a=0;b=1;c=0;
                start=0;
                cs=0;
                delay(5);
                start=1;
                delay(5);
                start=0;
                 while(1)
                 {
                         if(eoc==1)
                            {
                               cs=1;
                               adval2=P1;
                           
                            temp=adval2*0.1/255*500000;
                                cs=0;
                            sw=temp/100000;
                                wan=temp%100000/10000;
                                qian=temp%10000/1000;
                                bai=temp%1000/100;
                                shi=temp%100/10;
                                ge=temp%10;
                                        P0=0x00;
                                        delay(5);
                                        wei=1;duan=0;
                                        P0=0xdf;
                                        delay(2);               
                                        wei=0;duan=1;
                                        P0=table[ge];
                                        delay(2);        
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xef;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[shi];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xf7;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table1[bai];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfb;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[qian];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfd;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[wan];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfe;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[sw];
                                        delay(2);
                                        P0=0x00;        
                                
                                start=1;
                                start=0;
                                delay(10);
                        }
                        if(V==0||R==0)         break;
                 }
          }
          if(R==0)                                      //        选择电阻档  进行电阻测量
          {
                 a=1;b=0;c=0;
                start=0;
                cs=0;
                delay(5);
                start=1;
                delay(5);
                start=0;
                 while(1)
                 {
                         if(eoc==1)
                            {
                                cs=1;
                               adval3=P1;
                                temp=adval3* 1.0/255* 100000;
                                cs=0;
                            sw=temp/100000;
                                wan=temp%100000/10000;
                                qian=temp%10000/1000;
                                bai=temp%1000/100;
                                shi=temp%100/10;
                                ge=temp%10;
                                        P0=0x00;
                                        delay(5);
                                        wei=1;duan=0;
                                        P0=0xdf;
                                        delay(2);               
                                        wei=0;duan=1;
                                        P0=table[ge];
                                        delay(2);        
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xef;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[shi];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xf7;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table1[bai];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfb;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[qian];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfd;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[wan];
                                        delay(2);
                                        P0=0x00;
                                        wei=1;duan=0;
                                        P0=0xfe;
                                         delay(2);               
                                        wei=0;duan=1;
                                        P0=table[sw];
                                        delay(2);
                                        P0=0x00;
                                start=1;
                                start=0;
                                delay(10);
                        }
                        if(I==0||V==0)         break;
                 }
          }

  }
}  
        

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top