STC125A60S2的AD程序.doc_第1页
STC125A60S2的AD程序.doc_第2页
STC125A60S2的AD程序.doc_第3页
STC125A60S2的AD程序.doc_第4页
STC125A60S2的AD程序.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

经过本人调试通过,其中的电压TMO是放大了1000倍,如果不放就是它的真实电压,这个值可以在1602 ,12864显示!吐血奉献!#include / 包含51单片机寄存器定义的头文件#include /包含随机函数rand()的定义文件#include #define uchar unsigned char #define uint unsigned int#define AD_SPEED 0x60 / 0110,0000 1 1 70 个时钟周期转换一次sbit dula=P26; /控制数码管位选的使能sbit wela=P27; /控制数码管段选的使能,低电平位选中sbit led1=P10;sbit cesi=P20;sbit cesi1=P21;sbit cesi2=P22;unsigned char tr=0X80; /当需要显示小数点的时候便将最高位置1unsigned char code Table11=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/数码管数据uint result;/*延时函数*/void delay(unsigned int m) /STC12C5A60S2 1T单片机精确延时m=1时,为1us。 while(m-) _nop_();_nop_(); /*/void delay_ms(uint z) /ms级延时程序 uint x,y;for(x=z;x0;x-) for(y=110;y0;y-); /*/void timer0_init()TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;/EADC=1; /开ADC中断EA=1;ET0=1;TR0=1;/*/void display(uint dat) /显示二位void display(uchar bai_c,uchar sh_c,uchar g_c) unsigned long x; unsigned int TMO; x=(5000*(long)dat)/1024; /将得到的电压*1000 TMO=(unsigned int)x; if(TMO3300) /3.216V cesi=0; cesi1=0; cesi2=0; dula=0; P0=tr|TableTMO/1000; /显示最高位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay_ms(1); dula=0; P0=Table(TMO%1000)/100; /显示次高位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay_ms(1); P0=Table(TMO%1000)%100)/10; /显示十位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay_ms(1); P0=TableTMO%10; /显示个位 dula=1; dula=0; P0=0x77; wela=1; wela=0; delay_ms(1);/*内部AD驱动函数*/*AD设置步骤: 1; 将寄存器的存取位RES清零, 2; 设置速度,设定当前转换的通道.,注:利用或功能,每次进行三个机器周期的延时 3; 开始转换,通过转换标志来确定转换结束(相对的开始,必须打开电源才能进行转换) 4; 读取数据,进行数据的处理 (前四步设定转换通道,并返回转换值) 5; 开电源,确定P1ASF,调用前四步函数,获取转换值,进行显示 */unsigned int get_AD_result(unsigned char channel) unsigned int result; unsigned char AD_finished=0; /转换完成标志设定 ADC_RES = 0; ADC_RESL = 0; channel &= 0x07; /只取低三位 ADC_CONTR = AD_SPEED; delay(3); /延时三个时钟周期,使得ADCONTR能及时写入 ADC_CONTR |= channel; /设置通道 delay(3); /延时三个时钟周期,使得ADCONTR能及时写入 ADC_CONTR |= 0x80; /开启AD电源 delay(3); /延时三个时钟周期,使得ADCONTR能及时写入 ADC_CONTR |= 0x08; /开始转换 AD_finished = 0; while (AD_finished =0 ) /等待A/D转换结束 AD_finished = (ADC_CONTR & 0x10); /0001,0000 测试A/D转换结束否 ADC_CONTR &= 0xE7; /清除标志,一定要用软件清0,其它的不变 /return (ADC_RES); result=ADC_RES*4+(ADC_RESL&0x03); /获取转换结果,高八位与低二位return result; /*内部AD驱动函数*/ADtongdao() unsigned int temp; P1ASF = 0x80; /1000,0000, 将 P1.7 置成模AD ADC_CONTR |= 0x80; /1000,0000 打开 A/D 转换电源 delay(3); /延时三个时钟周期,使得ADCONTR能及时写入 temp=get_AD_result(7); /P1.7为 A/D 当前通道, 测量并发送结果 display(temp); /*/*/void main(void) timer0_init(); /定时器每50ms中断一次 while(1) ADtongdao();/ PCON=0x01; /*/void time0(void) interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; led1=led

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论