有关单片机做简易电压表程序问题 90
程序中,关于对数据的处理temp1=temp*1.0/255*5000;//****将得到的数据进行处理****//P1=temp1/1000;P3_3=1;delay(...
程序中,关于对数据的处理
temp1=temp*1.0/255*5000;//****将得到的数据进行处理****//
P1=temp1/1000;P3_3=1;delay(10);P3_3=0;
temp2=temp1;
temp2=temp2%1000;
P1=temp2/100;P3_2=1;delay(10);P3_2=0;
temp2=temp2%100;
P1=temp2/10;P3_1=1;delay(10);P3_1=0;
P1=temp2%10;P3_0=1;delay(10);P3_0=0;
这一节看不太懂,求高人告知这是如何对数据处理的,如果改成其他量程,这里应该怎么改
全程序如下
#include<at89x51.h>
#define uchar unsignedchar
#define uint unsigned int
#define adcdata P0
#define led P1
#define clock P2_0
#define start P2_1
#define eoc P2_3
#define adda P2_4
#define addb P2_5
#define addc P2_6
#define oe P2_7
uchar temp;
float temp1;
uint temp2;
void delay(uchar xms) //****一毫秒延时子函数****//
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
void leddisply()
{
temp1=temp*1.0/255*5000;//****将得到的数据进行处理****//
P1=temp1/1000;P3_3=1;delay(10);P3_3=0;
temp2=temp1;
temp2=temp2%1000;
P1=temp2/100;P3_2=1;delay(10);P3_2=0;
temp2=temp2%100;
P1=temp2/10;P3_1=1;delay(10);P3_1=0;
P1=temp2%10;P3_0=1;delay(10);P3_0=0;
}
main()
{
adda=0; //***选择IN0输入****//
addb=0;
addc=0;
//led=0;
start=0;//*****输入一个2us宽高电平脉冲,A/D开始转换*****//
start=1;
start=0;
while(1)
{
clock=~clock;
adcdata=0xff;
if(eoc==1) //*****A/D转换结束******//
{
oe=1;//*****A/D转换数据从端口输出*****//
temp=adcdata;
oe=0;
leddisply();
start=0;
start=1;
start=0;
}
}
} 展开
temp1=temp*1.0/255*5000;//****将得到的数据进行处理****//
P1=temp1/1000;P3_3=1;delay(10);P3_3=0;
temp2=temp1;
temp2=temp2%1000;
P1=temp2/100;P3_2=1;delay(10);P3_2=0;
temp2=temp2%100;
P1=temp2/10;P3_1=1;delay(10);P3_1=0;
P1=temp2%10;P3_0=1;delay(10);P3_0=0;
这一节看不太懂,求高人告知这是如何对数据处理的,如果改成其他量程,这里应该怎么改
全程序如下
#include<at89x51.h>
#define uchar unsignedchar
#define uint unsigned int
#define adcdata P0
#define led P1
#define clock P2_0
#define start P2_1
#define eoc P2_3
#define adda P2_4
#define addb P2_5
#define addc P2_6
#define oe P2_7
uchar temp;
float temp1;
uint temp2;
void delay(uchar xms) //****一毫秒延时子函数****//
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
void leddisply()
{
temp1=temp*1.0/255*5000;//****将得到的数据进行处理****//
P1=temp1/1000;P3_3=1;delay(10);P3_3=0;
temp2=temp1;
temp2=temp2%1000;
P1=temp2/100;P3_2=1;delay(10);P3_2=0;
temp2=temp2%100;
P1=temp2/10;P3_1=1;delay(10);P3_1=0;
P1=temp2%10;P3_0=1;delay(10);P3_0=0;
}
main()
{
adda=0; //***选择IN0输入****//
addb=0;
addc=0;
//led=0;
start=0;//*****输入一个2us宽高电平脉冲,A/D开始转换*****//
start=1;
start=0;
while(1)
{
clock=~clock;
adcdata=0xff;
if(eoc==1) //*****A/D转换结束******//
{
oe=1;//*****A/D转换数据从端口输出*****//
temp=adcdata;
oe=0;
leddisply();
start=0;
start=1;
start=0;
}
}
} 展开
3个回答
展开全部
被测电压=基准电压*测得数字量/满量程数字量
多数AD模块电源电压即为基准电压,若为5v即满量程电压5V =5000 mv 若是8位AD满量程数字量是2的8次方即256,可读出的最大值应该是255/256*5000 数字量达到256就溢出了t
temp1/1000 求的是千位,
temp2=temp1%1000 求的是不足1千的部分
temp2/100 求的是百位数
temp2%100 求的是不足1百部分
同样 再除10的模和余数分别表示10位和个位
若有分压电阻,实际电压还要乘上分压比(衰减倍数)
如4356/1000=4
4356%1000=356
356/100=3
356%100=56
56/10=5
56%10=6
即分出了 个 十 百 千
多数AD模块电源电压即为基准电压,若为5v即满量程电压5V =5000 mv 若是8位AD满量程数字量是2的8次方即256,可读出的最大值应该是255/256*5000 数字量达到256就溢出了t
temp1/1000 求的是千位,
temp2=temp1%1000 求的是不足1千的部分
temp2/100 求的是百位数
temp2%100 求的是不足1百部分
同样 再除10的模和余数分别表示10位和个位
若有分压电阻,实际电压还要乘上分压比(衰减倍数)
如4356/1000=4
4356%1000=356
356/100=3
356%100=56
56/10=5
56%10=6
即分出了 个 十 百 千
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
下面内各个你好黑啊 跟人家要90
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
10个积分没动力- -
更多追问追答
追问
30了~~
追答
给我100个就告诉你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询