adc0832数字电压表程序+仿真图.docx
- 文档编号:7452959
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:8
- 大小:62.56KB
adc0832数字电压表程序+仿真图.docx
《adc0832数字电压表程序+仿真图.docx》由会员分享,可在线阅读,更多相关《adc0832数字电压表程序+仿真图.docx(8页珍藏版)》请在冰豆网上搜索。
adc0832数字电压表程序+仿真图
adc0832数字电压表(程序+仿真图)
D
unsignedcharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
charcodetablewe[]={0xfd,0xfb,0xf7,0xef,0xdf,0xfe};
/****************************************************************************
函数功能:
AD转换子程序
入口参数:
CH
出口参数:
dat
****************************************************************************/
unsignedcharadc0832(unsignedcharCH)
{
unsignedchari,test,adval;
adval=0x00;
test=0x00;
Clk=0;//初始化
DATI=1;
_nop_();
CS=0;
_nop_();
Clk=1;
_nop_();
if(CH==0x00)//通道选择
{
Clk=0;
DATI=1;//通道0的第一位
_nop_();
Clk=1;
_nop_();
Clk=0;
DATI=0;//通道0的第二位
_nop_();
Clk=1;
_nop_();
}
else
{
Clk=0;
DATI=1;//通道1的第一位
_nop_();
Clk=1;
_nop_();
Clk=0;
DATI=1;//通道1的第二位
_nop_();
Clk=1;
_nop_();
}
Clk=0;
DATI=1;
for(i=0;i<8;i++)//读取前8位的值
{
_nop_();
adval<<=1;
Clk=1;
_nop_();
Clk=0;
if(DATO)
adval|=0x01;
else
adval|=0x00;
}
for(i=0;i<8;i++)//读取后8位的值
{
test>>=1;
if(DATO)
test|=0x80;
else
test|=0x00;
_nop_();
Clk=1;
_nop_();
Clk=0;
}
if(adval==test)//比较前8位与后8位的值,如果不相同舍去。
若一直出现显示为零,请将该行去掉
dat=test;
_nop_();
CS=1;//释放ADC0832
DATO=1;
Clk=1;
returndat;
}
/****************************************************************************
函数功能:
延时子程序
入口参数:
出口参数:
****************************************************************************/
voiddelay(void)
{
intk;
for(k=10;k<500;k++);
}
/****************************************************************************
函数功能:
将0-255级换算成0.00-5.00的电压数值
入口参数:
i
出口参数:
****************************************************************************/
voidconvdata(unsignedchari)
{
dis[0]=i/51;//个位
dis[1]=(i%51)*10/51*2;//小数点后第一位
dis[2]=((i%51)*10%51)*10/51*2;//小数点后第二位
}
/****************************************************************************
函数功能:
数码管显示子程序
入口参数:
出口参数:
****************************************************************************/
voiddisplay(void)
{
P2=0xff;
P0=tab[dis[0]]&0x7f;//显示个位和小数点
delay();
P2=0xfd;
P2=0xff;
P0=tab[dis[1]];//显示小数点后第一位
delay();
P2=0xfb;
P2=0xff;
P0=tab[dis[2]];//显示小数点后第二位
delay();
P2=0xf7;
P2=0xff;
P0=0xff;//显示小数点后第二位
delay();
P2=0xfe;
}
/****************************************************************************
函数功能:
主程序
入口参数:
出口参数:
****************************************************************************/
voidmain(void)
{
P2=0xff;//端口初始化
P0=0xff;
delay();
CH=0x00;//在这里选择通道0x00或0x01
TMOD=0x01;//设置中断
TH0=(65536-50000)/256;//定时器1初值定时50ms
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while
(1)//主循环
{dat=adc0832(CH);
convdata(dat);//数据转换
display();//显示数值
}
}
/****************************************************************************
函数功能:
定时器中断延时程序这一段的作用时隔一段时间抽样一次否侧显示的最后一位会不稳定
入口参数:
出口参数:
****************************************************************************/
voidtimer0(void)interrupt1
{
TMOD=0x01;
TH0=(65536-50000)/256;//定时器1初值定时50ms
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
count++;
if(count==0x01)
{
count=0x00;
dat=adc0832(CH);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- adc0832 数字 电压表 程序 仿真