首页 STC12C2052AD芯片的AD转换程序

STC12C2052AD芯片的AD转换程序

举报
开通vip

STC12C2052AD芯片的AD转换程序STC12C2052AD芯片的AD转换程序 /*flashman编写,QQ28479691*/ #include #include #define uchar unsigned char // 0~255 #define uint unsigned int // 0~65535 sfr ADCR=0xc5; //控制寄存器 sfr ADDR=0xc6; //结果寄存器 sfr P1M0=0x91; sfr P1M1=0x92; char code DisV[]={"V:"};//灵敏度 ...

STC12C2052AD芯片的AD转换程序
STC12C2052AD芯片的AD转换程序 /*flashman编写,QQ28479691*/ #include #include #define uchar unsigned char // 0~255 #define uint unsigned int // 0~65535 sfr ADCR=0xc5; //控制寄存器 sfr ADDR=0xc6; //结果寄存器 sfr P1M0=0x91; sfr P1M1=0x92; char code DisV[]={"V:"};//灵敏度 char code DisP[]={"P:"};//精确度 sbit RS=P1^7; sbit RW=P1^6; sbit E=P1^5; void LCDIni(void); void WrOp(uchar dat); void WrDat(uchar dat); void ChkBusy(void); void delay(); void DisText(uchar addr,uchar *text); void ShowNum(uchar addr,uint num); //在addr处显示数字num void ShowByte(uchar addr,uchar num); char AdcVal(uchar n); //取出单次ADC的值 char AdcValPro(uchar n); //进行软件滤波后的ADC的值 char data BCD[6]; //十位二进制的显示码分别是千百十个位的显示char data Adc[2]; //存放Adc转换后的值 void main(void) { SP=0X5F; LCDIni(); DisText(0x80,DisV); DisText(0xc0,DisP); while(1) { ShowByte(0x82,AdcValPro(0)); ShowByte(0xC2,AdcV al(1)); } } //----------------------------------------- //ADC相关程序 char AdcVal(uchar n) {//软件滤波 uchar i,k; uint tmp=0,val; for(i=0;i<20;i++) { k=AdcValPro(n); tmp=(tmp+k)/2; } val=(uchar)(tmp); k=val>Adc[n] ? (val-Adc[n]):(Adc[n]-val); Adc[n]=k>0 ? val:Adc[n]; return Adc[n]; } char AdcValPro(uchar n) {//返回第N个ADC的值从0到7 uchar val; P1M0=0x03; P1M1=0x03; ADCR=0x88+n; while((ADCR & 0x10) ==0); val=ADDR; ADCR=0x00; return val; } //----------------------------------------- //LCD相关程序 void ShowNum(uchar addr,uint num) //在addr处显示数字num {//将num转化成五个BCD码存放在全局数组BCD[5]中 uchar i; for(i=5;i>0;i--) //将NUM数据转化成ASCII码,如521会转化为00521 { BCD[i-1]=(uchar)(num%10+0x30); //取出最低位 num/=10; //去掉最低位 } i=0; while(BCD[i] ==0x30 && i<4) BCD[i++]=' '; //NUM转换成数组存放,但还没有加上小数点 BCD[5]='\0'; DisText(addr,BCD); } void ShowByte(uchar addr,uchar num) {//将num转化成五个BCD码存放在全局数组BCD[5]中 uchar i; for(i=3;i>0;i--) //将NUM数据转化成ASCII码,如521会转化为00521 { BCD[i-1]=(uchar)(num%10+0x30); //取出最低位 num/=10; //去掉最低位 } i=0; while(BCD[i] ==0x30 && i<4) BCD[i++]=' '; //NUM转换成数组存放,但还没有加上小数点 BCD[3]='\0'; DisText(addr,BCD); } void DisText(uchar addr,uchar *p) { WrOp(addr); while(*p !='\0')WrDat(*(p++)); } void LCDIni() { WrOp(0x38); WrOp(0x28); WrOp(0x06); WrOp(0x0E); //光标加1 } void WrOp(uchar dat) { ChkBusy(); RS=0; RW=0; E=0; P3=(dat>>4); E=1; delay(); E=0; P3=dat; E=1; delay(); E=0; } void WrDat(uchar dat) { ChkBusy(); RS=1; RW=0; E=0; P3=(dat>>4); E=1; delay(); E=0; P3=dat; E=1; delay(); E=0; } void ChkBusy() { uchar dat; do { P3|=0x0f; // RS=0; RW=1; E=1; dat=P3; //读出P3数据 E=0; E=1; _nop_(); E=0; }while(dat & 0x08); } void delay(void) { uchar j; for(j=0;j<3;j++); }
本文档为【STC12C2052AD芯片的AD转换程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:10
分类:互联网
上传时间:2019-02-16
浏览量:18