电压从5v下降到2.5v显示正常,但是过了2.5v数码管又从5v开始下降,当电压为0v时显示2.5v。在程序中如果把uint voltage相关变量更改成uchar型,结果就变成0~2.5v正常,过了2.5v又从0开始显示,5v时显示2.5v。请各位高手解答!!!在线等
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit a=P3^0;
sbit b=P3^1;
sbit c=P3^2;
sbit oe=P3^6;
sbit st=P3^7;
sbit eoc=P3^5;
uchar cha,adt;
uint jg;
uchar zx[]={
0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
};
uchar zw[]={0x70,0xb0,0xd0,0xe0};
uchar h[]={0xff,0xff,0xff,0xff};
void delay(uchar m) //误差 0us
{
unsigned char a,b,c;
for(c=m;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void delay1()
{;;}
void disp(uchar channel,uint voltage)
{
uint getc=voltage;
uchar n;
getc=getc*49/25;
h[0]=channel;
h[1]=getc/100;
h[2]=getc%100/10;
h[3]=getc%10;
for(n=0;n<4;n++)
{
P0=zx[h[n]];
P1=zw[n];
delay(3);
P1=0xf0;
}
}
void ad0809()
{
a=0;
b=0;
c=0;
oe=0;
st=0;
delay1();
st=1;
delay1();
st=0;
delay(1);
while(!eoc);
oe=1;
jg=P2;
oe=0;
}
void main()
{
uchar ch;
while ( 1 )
{
ad0809();
ch=0;
disp(ch,jg);
}
}
另外直接disp(ch,0xff)显示30,证明显示转换也是正常,真不知道为什么了
按你的方法改了 没有结果了,显示全0
追答getc=getc*49/25 你这一句是干什么用的?你用proteus单步一下,看看各个变量值是不是你预想的东西。
给我你的邮箱,我直接发给你一个程序得了,还有proteus仿真图。
单片机数码管显示电压,调节电压大小控制led灯亮度
如图,是亚龙单片机实验模块,这样接好后,调节电压源电压就可以调节电平指示灯。再把AD0809的输出数据用数码管显示即可。AD0809时钟源为500KHZ
懂80C51单片机的进~
1)电路图2)说明(大致主要的引脚功能等设计说明)3)流程图4)ADC0809和LCD1602的驱动子程序我知道不... 条件:80C51单片机,ADC0809,LCD1602及按键。目的:8路PT100温度巡检0~100度。1)电路图 2)说明(大致主要的引脚功能等设计说明)3)流程图 4)ADC0809和LCD1602的驱动子程序我知道不可能有人全做出来,那很费时间的,...