基于51单片机用ad采集电压,显示在数码管上 代码
时间: 2024-03-13 15:44:03 浏览: 152
好的,这里提供一个简单的基于51单片机用AD采集电压并显示在数码管上的代码示例,供参考:
```
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DSPORT=P2^2; //数码管数据口
sbit DS1=P0^0; //数码管第一位
sbit DS2=P0^1; //数码管第二位
sbit DS3=P0^2; //数码管第三位
sbit DS4=P0^3; //数码管第四位
sbit CS=P2^1; //ADC芯片片选信号
sbit CLK=P2^0; //ADC芯片时钟信号
sbit DIN=P2^3; //ADC芯片数据输入信号
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
uchar code table[] = { //数码管显示表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
void Dsplay(uchar num) //数码管显示函数
{
switch(num)
{
case 1: DSPORT=0; DS1=0; DS2=0; DS3=0; DS4=1; break;
case 2: DSPORT=0; DS1=0; DS2=0; DS3=1; DS4=0; break;
case 3: DSPORT=0; DS1=0; DS2=0; DS3=1; DS4=1; break;
case 4: DSPORT=0; DS1=0; DS2=1; DS3=0; DS4=0; break;
case 5: DSPORT=0; DS1=0; DS2=1; DS3=0; DS4=1; break;
case 6: DSPORT=0; DS1=0; DS2=1; DS3=1; DS4=0; break;
case 7: DSPORT=0; DS1=0; DS2=1; DS3=1; DS4=1; break;
case 8: DSPORT=0; DS1=1; DS2=0; DS3=0; DS4=0; break;
case 9: DSPORT=0; DS1=1; DS2=0; DS3=0; DS4=1; break;
case 10: DSPORT=0; DS1=1; DS2=0; DS3=1; DS4=0; break;
case 11: DSPORT=0; DS1=1; DS2=0; DS3=1; DS4=1; break;
case 12: DSPORT=0; DS1=1; DS2=1; DS3=0; DS4=0; break;
case 13: DSPORT=0; DS1=1; DS2=1; DS3=0; DS4=1; break;
case 14: DSPORT=0; DS1=1; DS2=1; DS3=1; DS4=0; break;
case 15: DSPORT=0; DS1=1; DS2=1; DS3=1; DS4=1; break;
case 16: DSPORT=1; DS1=0; DS2=0; DS3=0; DS4=0; break;
default: break;
}
}
uchar ADConvert() //ADC采集函数
{
uchar i,dat=0;
CS=0;
CLK=0;
DIN=1;
for(i=0;i<8;i++)
{
CLK=0;
_nop_();
dat<<=1;
if(DOUT) dat++;
CLK=1;
_nop_();
}
CS=1;
return dat;
}
void main()
{
uchar num=0;
uint vol=0;
while(1)
{
vol=ADConvert(); //采集电压值
vol=vol*5000/256; //转换为实际电压值,假设ADC参考电压为5V
num=vol/1000; //将电压值拆分成四位数
Dsplay(num+1); //显示千位数
delay(5);
num=(vol%1000)/100;
Dsplay(num+1); //显示百位数
delay(5);
num=(vol%100)/10;
Dsplay(num+1); //显示十位数
delay(5);
num=vol%10;
Dsplay(num+1); //显示个位数
delay(5);
}
}
```
需要注意的是,这段代码仅供参考,具体实现时需要根据自己的硬件实际情况进行修改。同时,需要注意电压转换的精度和参考电压的设置。
阅读全文