标题: 关于用ad转换和单片机的问题 [打印本页]

作者: 省略句号    时间: 2014-8-20 11:47
标题: 关于用ad转换和单片机的问题

ad转换后,经单片机处理,让数码管显示数值,程序中这句什么意思
dianya=dianyal*20+dianyah*320; //最后的结果是一个四位数,便于显示

作者: jiege    时间: 2014-8-20 17:04
dianyal可能是低位 dianyah可能是高位
作者: 省略句号    时间: 2014-8-20 17:56
file:///c:/users/administrator.user-20140308fi/appdata/roaming/360se6/User Data/temp/eb05e7b8-4046-496a-a76e-9acaedd4d97a.jpgfile:///c:/users/administrator.user-20140308fi/appdata/roaming/360se6/User Data/temp/eb05e7b8-4046-496a-a76e-9acaedd4d97a.jpg 嗯,但他没有用译码器而是直接用下面一段程序实现完成代码的转换
unsigned int datpro(void)//ADC0804 读出的数据处理

{


        unsigned char x;   


       unsigned int dianyah,dianyal; //用于存储读出数据的高字节和低字节


       unsigned int dianya="0";        //存储最后处理完的结果 注意数据类型


       for(x=0;x<10;x++)             // 10次测得的结果存储在dianya


       {


              dianya=adc0804()+dianya;


        }



       dianya=dianya/10;                              //求平均值


       dianyah=dianya&0xf0;                       //屏蔽低四位


       dianyah=dianyah>>4;                        //右移四位 取出高四位


       dianyal=dianya&0x0f;                       //屏蔽高四位 取出低四位


       dianya=dianyal*20+dianyah*320;         //最后的结果是一个四位数,便于显示


       return(dianya);                                          //返回最后处理结果


}



void Led()


{


       unsigned int date;


       date=datpro();                                           //调用数据处理最后结果


       P2=P2&0xef;


     P0=seg7code[date/1000]|0x80; //输出个位数和小数点


     Delay(8);


    P2=P2|0xf0; P2=P2&0xdf;  


     P0=seg7code[date%1000/100]; //输出小数点后第一位


       Delay(8);


       P2=P2|0xf0; P2=P2&0xbf;


    P0=seg7code[date%100/10];   //输出小数点后第二位


    Delay(8);


       P2=P2|0xf0; P2=P2&0x7f;


    P0=seg7code[date%10];       //输出小数点后第三位


    Delay(8);


    P2=P2|0xf0;


}







作者: 省略句号    时间: 2014-8-20 18:01
jiege 发表于 2014-8-20 17:04
dianyal可能是低位 dianyah可能是高位

嗯,但他没有用译码器而是直接用下面一段程序实现完成代码的转换
unsigned int datpro(void)//ADC0804 读出的数据处理
{

        unsigned char x;   

       unsigned int dianyah,dianyal; //用于存储读出数据的高字节和低字节

       unsigned int dianya="0";        //存储最后处理完的结果 注意数据类型

       for(x=0;x<10;x++)             //将 10次测得的结果存储在dianya中

       {

              dianya=adc0804()+dianya;

        }


       dianya=dianya/10;                              //求平均值

       dianyah=dianya&0xf0;                       //屏蔽低四位

       dianyah=dianyah>>4;                        //右移四位 取出高四位

       dianyal=dianya&0x0f;                       //屏蔽高四位 取出低四位

       dianya=dianyal*20+dianyah*320;         //最后的结果是一个四位数,便于显示

       return(dianya);                                          //返回最后处理结果

}


void Led()

{

       unsigned int date;

       date=datpro();                                           //调用数据处理最后结果

       P2=P2&0xef;

     P0=seg7code[date/1000]|0x80; //输出个位数和小数点

     Delay(8);

    P2=P2|0xf0; P2=P2&0xdf;  

     P0=seg7code[date%1000/100]; //输出小数点后第一位

       Delay(8);

       P2=P2|0xf0; P2=P2&0xbf;

    P0=seg7code[date%100/10];   //输出小数点后第二位

    Delay(8);

       P2=P2|0xf0; P2=P2&0x7f;

    P0=seg7code[date%10];       //输出小数点后第三位

    Delay(8);

    P2=P2|0xf0;

}

作者: NB没B    时间: 2014-8-21 11:58
省略句号 发表于 2014-8-20 17:56
嗯,但他没有用译码器而是直接用下面一段程序实现完成代码的转换
unsigned int datpro(void)//ADC0804 读 ...

就是为了便于显示 把二进制换成易于现实的十进制数
作者: 省略句号    时间: 2014-8-21 16:16
NB没B 发表于 2014-8-21 11:58
就是为了便于显示 把二进制换成易于现实的十进制数

那为什么不乘21要乘20
作者: hujia    时间: 2014-8-21 20:43
难怪,他在程序中这样做是为了配合显示电路,乘以二十才能得到正确的显示结果,
作者: 省略句号    时间: 2014-8-22 08:51
hujia 发表于 2014-8-21 20:43
难怪,他在程序中这样做是为了配合显示电路,乘以二十才能得到正确的显示结果,

谢谢了
作者: NB没B    时间: 2014-8-22 09:42
省略句号 发表于 2014-8-21 16:16
那为什么不乘21要乘20

配合显示电路啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1