标题:
基于51单片机的ADC0832数字电压表程序Proteus仿真,可调
[打印本页]
作者:
JN0717
时间:
2022-5-3 00:46
标题:
基于51单片机的ADC0832数字电压表程序Proteus仿真,可调
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(31.15 KB, 下载次数: 50)
下载附件
2022-5-3 03:43 上传
单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
sbit CS=P3^5;
sbit CLK=P3^3;
sbit DI=P3^4;
sbit DO=P3^4;
sbit dot=P0^5; //小数点
unsigned char dat=0x00;
unsigned char nums[]={0x00,0x00,0x00,0x00};
unsigned char channel; //转换通道
unsigned char LEDS[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xB8,0x20,0x28}; //共阳4位数码管段码,字符显示从'0'到'9'
unsigned char ADC0832(unsigned char channel) //模数转换
{
unsigned char i;
unsigned char x=0x00;
unsigned char y=0x00;
CLK=0; //初始化
DI=1;
_nop_();
CS=0;
_nop_();
CLK=1;
_nop_();
if(channel==0x00) //通道选择
{ //通道0
CLK=0;
DI=1;
_nop_();
CLK=1;
_nop_();
CLK=0;
DI=0;
_nop_();
CLK=1;
_nop_();
}
else //通道1
{
CLK=0;
DI=1;
_nop_();
CLK=1;
_nop_();
CLK=0;
DI=1;
_nop_();
CLK=1;
_nop_();
}
CLK=0;
DI=1;
for(i=0;i<8;i++) //读取ADC0832输出的前8位数据
{
x<<=1;
_nop_();
CLK=1;
_nop_();
CLK=0;
if(DO==1)
{
x|=0x01;
}
else
{
x|=0x00;
}
}
for(i=0;i<8;i++) //读取ADC0832输出的后8位数据
{
y>>=1;
if(DO==1)
{
y|=0x80;
}
else
{
y|=0x00;
}
_nop_();
CLK=1;
_nop_();
CLK=0;
}
if(x==y) //校验,比较前8位与后8位的值
{
dat=x;
}
_nop_();
CS=1; //释放ADC0832
DO=1;
CLK=1;
return dat;
}
void Convert(unsigned char dat0) //数据处理
{
unsigned int x;
x=dat0*0.0196*100*5;
nums[0]=x/1000;
nums[1]=x%1000/100;
nums[2]=x%1000%100/10;
nums[3]=x%1000%100%10;
}
void Delay() //数码管显示
{
unsigned char i,j;
for(i=0;i<1;i++)
{
for(j=0;j<121;j++);
}
}
void Display()
{
P0=LEDS[nums[0]];
P2=0xFE;
Delay();
P2=0xFF;
P0=LEDS[nums[1]];
dot=0;
P2=0xFD;
Delay();
P2=0xFF;
P0=LEDS[nums[2]];
P2=0xFB;
Delay();
P2=0xFF;
P0=LEDS[nums[3]];
P2=0xF7;
Delay();
P2=0xFF;
}
void main()
{
while(1)
{
dat=ADC0832(channel);
Convert(dat);
Display();
}
}
复制代码
Proteus8.8仿真下载:
51数字电压表.7z
(25.35 KB, 下载次数: 77)
2022-5-3 03:45 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
1184642321
时间:
2022-5-9 18:02
可以做基于tlc1549的吗
作者:
1184642321
时间:
2022-5-9 18:03
基于tlc1549可以吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1