数模模数转换程序.docx
- 文档编号:28177760
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:13
- 大小:15.59KB
数模模数转换程序.docx
《数模模数转换程序.docx》由会员分享,可在线阅读,更多相关《数模模数转换程序.docx(13页珍藏版)》请在冰豆网上搜索。
数模模数转换程序
/***********主函数*****************************/
/****这是用ADC0809与DAC0832设计出来的数控电源稳压电源程序*****/
#include"reg52.h"
#include"zhuanhuan.h"
#include"zhongduan.h"
#include"uihanshu.h"
/*****主函数******/
voidmain()
{
mcu_init();
delay(1000);
while
(1)
{
cnt0();
cnt1();
}
}
/**************输入函数*******************/
#include"uihanshu.h"
#include"reg52.h"
sbitclk=P3^1;
sbitdat=P3^0;
uchardis_u[4],dis_i[4];
ucharad,ad1;
ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
/******发送显示数据*******/
voidsend_byte(uchardate)
{
uchari;
for(i=0;i<8;i++)
{
if(date&0x01)dat=1;
elsedat=0;
clk=0;
clk=1;
date>>=1;
}
}
/****u算术平均滤波****/
voiduFiliter()
{
uintsum=0;
uchari;
for(i=0;i<10;i++)
{
sum+=ad_u[i];
}
ad1=sum/10;
}
/*****U进行标度变换****/
voidcov_u()
{
uintk;
k=ad/2;
dis_u[0]=k/100;
k%=100;
dis_i[1]=k/10;
k%=10;
dis_u[2]=k;
dis_u[3]=0x7a;
}
/****i算术平均滤波****/
voidiFiliter()
{
uintsum=0;
uchari;
for(i=0;i<10;i++)
{
sum+=ad_i[i];
}
ad1=sum/10;
}
/*****I进行标度变换****/
voidcov_i()
{
uintk;
k=ad1/2;
dis_i[0]=k/100;
k%=100;
dis_i[1]=k/10;
k%=10;
dis_i[2]=k;
dis_i[3]=0xee;
}
/***显示函数U****/
voiddisp_u()
{
send_byte(0x7a);
send_byte(tab[dis_u[2]]);
send_byte(tab[dis_u[1]]|0x01);
send_byte(tab[dis_u[0]]);
}
/***显示函数I****/
voiddisp_i()
{
send_byte(0xee);
send_byte(tab[dis_i[2]]);
send_byte(tab[dis_i[1]]);
send_byte(tab[dis_i[0]]|0x01);
}
/*****************中断函数**********************/
#include"zhongduan.h"
#include"zhuanhuan.h"
#include"uihanshu.h"
ucharcnt=0;
ucharkey=0x00;
ucharvo=0;
ucharstep=1;
sbitoe=P2^4;
voiddelay(uintz)
{
ucharx,y;
for(x=0;x for(y=0;y<220;y++); } voidcnt0() { if(cnt==0) { uFiliter(); cov_u(); disp_u(); delay(500); } } voidcnt1() { if(cnt==1) { iFiliter(); cov_i(); disp_i(); delay(500); } } /*****读取AD转换结果****/ voidint0()interrupt0using2 { uchari; EX0=0; oe=1; P0=0xff; if(cnt==0) { for(i=0;i<9;i++) { ad_u[i]=ad_u[i+1]; } ad_u[9]=P0; } if(cnt==1) { for(i=0;i<9;i++) { ad_i[i]=ad_u[i+1]; } ad_i[9]=P0; } oe=0; EX0=1; } /******键盘中断******/ voidint1()interrupt2using3 { uchartep; EX1=0; delay(20); tep=P1; tep=~tep; tep&=0xf0; if(tep! =0) { switch(tep) { case0x10: key=0x01;break; case0x20: key=0x02;break; case0x40: key=0x03;break; case0x80: key=0x04;break; default: key=0xff;break; } while(tep! =0) { tep=P1; tep=~tep; tep&=0xf0; } if(key==0x01) { key=0xff; if(vo<240)vo+=1*step; elsevo=240; dac0832(vo); } if(key==0x02) { key=0xff; if(vo>1*step)vo-=1*step; elsevo=0; dac0832(vo); } if(key==0x03) { key=0xff; cnt++; if(cnt>1)cnt=0; } if(key==0x04) { key=0xff; step++; if(step>10) step=1; } } EX1=1; } /*****启动AD转换*****/ voidtimer1()interrupt3using1 { uchari=0; ET1=0; TL1=(65535-2000)%256; TH1=(65535-2000)/256; adc0809(cnt); ET1=1; } voidt1_init() { uchari; i=TMOD; i=i|0x10; TMOD=i; TL1=(65535-2000)%256; TH1=(65535-2000)/256; ET1=1; TR1=1; } voidtimer2_init() { TMOD=0x02; TL2=(65535-12)%256; TH2=(65535-12)/256; RCAP2L=(65535-12)%256; RCAP2H=(65535-12)/256; C_T2=0; TR2=1; }/****还不理解这个函数***/ voidint0_init() { EX0=1; IT0=1; } voidint1_init() { EX1=1; IT1=1; } voidmcu_init() { P1=0xff; P0=0xff; EA=1; int0_init(); int1_init(); t1_init(); timer2_init(); } /***************************转换函数***********************/ #include"zhuanhuan.h" #include"intrins.h" #definen_nop_() sbita0=P2^0; sbita1=P2^1; sbitale=P2^2; sbitstart=P2^3; sbitload=P2^6; /****启动AD转换****/ voidadc0809(ucharchannel) { if(channel==0) { a0=0; a1=0; } if(channel==1) { a0=1; a1=0; } ale=0; ale=1; n;n; ale=0; start=0; start=1; n;n; start=0; } /****启动DA转换****/ voiddac0832(uchardate)///并行发送 { P0=date; load=0; n;n; load=n1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数模 转换 程序