基于ADC的AD转换.docx

上传人:b****7 文档编号:10726227 上传时间:2023-02-22 格式:DOCX 页数:10 大小:15.81KB
下载 相关 举报
基于ADC的AD转换.docx_第1页
第1页 / 共10页
基于ADC的AD转换.docx_第2页
第2页 / 共10页
基于ADC的AD转换.docx_第3页
第3页 / 共10页
基于ADC的AD转换.docx_第4页
第4页 / 共10页
基于ADC的AD转换.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于ADC的AD转换.docx

《基于ADC的AD转换.docx》由会员分享,可在线阅读,更多相关《基于ADC的AD转换.docx(10页珍藏版)》请在冰豆网上搜索。

基于ADC的AD转换.docx

基于ADC的AD转换

/*----------------------------------------------------------

功能介绍:

-----------------------------------------------------------*/

#include<>

#include<>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

#defineucodeunsignedcode

/*--------------------------------------------

包含函数

---------------------------------------------*/

voidDISP(void);//数码管显示函数

voidkey(void);//矩阵键盘函数

void_nop_(void);

voidad_buf();//模拟量转化为数字函数

ucharADC0834(uchartds);//AD转换函数

/*-------------------------------------------

参数定义

-------------------------------------------*/

ucharbdataekey1;//键前沿提取

ucharbdataekey2;

uchardatakey2;

uchardatakey1;

ucharbdatalastkey1;

ucharbdatalastkey2;

uchardisp_a;//数码管显示指针

sbitcs0=P2^0;

sbitcs1=P2^1;

sbitcs2=P2^2;

sbitcs3=P2^3;

sbitcs4=P2^4;

sbitesw0=ekey2^6;//独立按键键沿标志

sbitesw1=ekey2^7;//

sbitek0=ekey1^0;//矩阵按键键沿标志

sbitek1=ekey1^1;

sbitek2=ekey1^2;

sbitek3=ekey1^3;

sbitek4=ekey1^4;

sbitek5=ekey1^5;

sbitek6=ekey1^6;

sbitek7=ekey1^7;

sbitek8=ekey2^0;

sbitek9=ekey2^1;

sbitrow0=P2^5;

sbitrow1=P2^6;

sbitrow2=P2^7;

sbitsw0=P1^6;

sbitsw1=P1^7;

sbitdo_0834=P1^0;//0834DI

sbitcs_0834=P1^1;//0834片选

sbitdi_0834=P1^2;//0834DI

sbitclk_0834=P1^3;//0834时钟

sbitdian=P0^7;//小数点

ucharbuf0;//显示缓冲单元个位

ucharbuf1;//十

ucharbuf2;//百

ucharbuf3;//千

ucharbuf4;

ucharcodeled[]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90};

ucharmsta=0;

uchartds;//通道选择

uintadbuf;

bitt1s;//一秒标志位

bitlight;//小数点亮标志位

ucharktime;

/*-------------------------------------------

主函数

-------------------------------------------*/

voidmain()

{ucharf1s=0;

uchari;

TMOD=0x01;

TH0=0xec;

TL0=0x78;

TR0=1;

while

(1)

{

while(!

TF0);//5ms

TF0=0;

TH0=0x0ec;

TL0=0x78;

++f1s;

if(f1s==200)

{t1s=1;

f1s=0;}

key();

DISP();

switch(msta)

{//待机模块显示“0000”

case0:

if(esw0){msta=1;tds=0xd0;}//SW1按下跳到模块1选择单端模式AD一次

if(esw1){msta=1;tds=0x80;}//SW2按下跳到模块1选择差分模式AD一次

if(ek0){msta=2;tds=0xd0;}//ek0按下跳到模块2选择单端模式十次AD取平均

if(ek1){msta=2;tds=0x80;}//ek1按下跳到模块2选择差分模式十次AD取平均

if(ek2){msta=3;tds=0xd0;}//ek2按下跳到模块3选择单端模式一秒AD一次

if(ek3){msta=3;tds=0x80;}//ek3按下跳到模块3选择差分模式一秒AD一次

buf4=0,buf3=0,buf2=0,buf1=0;

buf0=0;

break;

case1:

if(esw0){msta=1;tds=0xd0;}//只AD一次

if(esw1){msta=1;tds=0x80;}

light=1;//小数点亮

adbuf=ADC0834(tds);

ad_buf();

break;

case2:

if(ek0){msta=2;tds=0xd0;}//AD十次取平均

if(ek1){msta=2;tds=0x80;}

light=1;

for(i=0;i<10;i++)

{adbuf=adbuf+ADC0834(tds);}

adbuf=adbuf/11;

ad_buf();

break;

case3:

if(ek2){msta=3;tds=0xd0;}//一秒AD一次

if(ek3){msta=3;tds=0x80;}

light=1;

if(t1s)

{t1s=0;

adbuf=ADC0834(tds);

ad_buf();}

break;

default:

break;

}

}

}

/*-----------------------------------------------

数码管显示

------------------------------------------------*/

voidDISP()

{P0=0xff;

P2=0xff;

switch(disp_a)

{case0:

cs0=0;//点亮第0位数码管

P0=led[buf0];

disp_a=1;

break;

case1:

cs1=0;//点亮第1位数码管

P0=led[buf1];

disp_a=2;

break;

case2:

cs2=0;//点亮第2位数码管

P0=led[buf2];

disp_a=3;

break;

case3:

cs3=0;//点亮第3位数码管

P0=led[buf3];

if(light)

dian=0;//小数点亮

disp_a=4;

break;

case4:

cs4=0;//点亮流水灯

P0=buf4;

disp_a=0;

break;

default:

break;

}

}

/*-------------------------------------------------------

矩阵键盘及独立按键子程序

------------------------------------------------------------*/

voidkey()

{ucharkbuf;

P2=0x0ff;//关数码管

row0=0;//扫描K0~3

_nop_();//延时

_nop_();

kbuf=P2;

kbuf=(kbuf&0x0f)^0x0f;//K0~3键位保留求反转正逻辑

lastkey1=kbuf;//新的键状态暂存R6

P2=0x0ff;

row1=0;//扫描K4~7

_nop_();

_nop_();

kbuf=P2;

kbuf=(kbuf&0x0f)^0x0f;

lastkey1=(kbuf<<4)+lastkey1;

P2=0x0ff;

row2=0;//扫描K8~K11

_nop_();

_nop_();

kbuf=P2;

kbuf=(kbuf&0x0f)^0x0f;

lastkey2=kbuf;

P2=0x0ff;

P1=P1|0x0c0;

kbuf=P1;

kbuf=(kbuf&0x0c0)^0x0c0;

lastkey2=kbuf+lastkey2;

if((lastkey2!

=key2)||(lastkey1!

=key1))//键状态变化则转移

{if(ktime--!

=0)

{lastkey1=key1;

lastkey2=key2;}

}

else

ktime=0x04;

ekey1=(key1^lastkey1)&lastkey1;

key1=lastkey1;

ekey2=(key2^lastkey2)&lastkey2;

key2=lastkey2;

}

/************************************************************

AD转换

************************************************************/

ucharADC0834(uchartds)

{

uchari,adbuf=0;

cs_0834=0;

for(i=0;i<5;i++)

{

clk_0834=0;

di_0834=0;

if(tds&0x80)

di_0834=1;

clk_0834=1;

tds<<=1;

}

do_0834=1;

for(i=0;i<8;i++)

{

clk_0834=0;

clk_0834=1;

adbuf=(adbuf<<1)|do_0834;

}

cs_0834=1;

return(adbuf);

}

/*****************************************************************

模拟量转化为数字并送显

******************************************************************/

voidad_buf()

{

buf4=adbuf%51*10%51*10%51*10/51;//流水灯

buf3=adbuf/51;//个位

buf2=adbuf%51*10/51;//十分位

buf1=adbuf%51*10%51*10/51;//百分位

buf0=adbuf%51*10%51*10%51*10/51;//千分位

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1