STC片内AD程序- /****************************************************
- P2口接4位数码管显示STC12C单片机AD转换电压值,
- 测P1 8个口任意一个口转换电压,
- 数码管为共阳管
- 电压为单片机电压:5v经2个10k电阻分压给单片机vref
- 提供2.5v基准电压
- 作者:苏义江
- ***********************************************/
- //#include<12c5a.h>
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint AV;
- sfr P1ASF = 0x9D; //P1口模数转换功能控制寄存器
- sfr ADC_CONTR = 0xBC; //AD转换控制寄存器
- sfr ADC_RES = 0xBD; //AD转换结果寄存器高位
- sfr ADC_RESL = 0xBE; //AD转换结果寄存器低位
- sfr AURX1 = 0xA2; //AD转换结果存储方式控制位
- sfr ADC_CONTER=0xc5; //ADC控制寄存器
- sfr ADC_DATA=0xc6;//ADC转换结果寄存器 高8位
- sfr ADC_LOW2 = 0xBE; //ADC转换结果寄存器 低8位
- sfr P1M0 =0x91;
- sfr P1M1 =0x92;
- sbit led =P0^0;
- sbit led1=P0^1;
- sbit wei =P0^6;
- sbit duan=P0^7;
- uint a, b, c, d,temp;
- uchar code SMG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- uchar code table1[]={0x04,0x9e,0x22,0x12,0x98,0x11,0x01,0x96,0x00,0x10};
- //带小数点字码表//
- uchar code table[]={0x44,0xde,0x62,0x52,0xd8,0x51,0x41,0xd6,0x40,0x50};
- //不带小数点字码表//
- void delay(uint z) //延时//
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- /****获取ADC转换结果*****/
- uint ADC() //设置AD转换口//
- {
- ADC_CONTER = ADC_CONTER|0x80;
- ADC_DATA=0x00;
- ADC_CONTER=0xe2;
- ADC_CONTER|=0x08;
- //查询ADC_FLAG位是否置1
- while ((0x10&ADC_CONTER)!=0x10);
- // ADC_CONTER = ADC_CONTER&0xe7;
- ADC_CONTER&=0xE7; //关闭AD 清除转换结束标志
- //单片机电源为5V,求的真实电压值
- AV=256*ADC_DATA/5;//公式换算成电压值//
- return (AV);
- }
- void main ()
- {
- //设置P1.2为 AD 输入口
- // P1M0=0X02 ;
- // P1M1=0X02;
- //把P1.0配置为ADC输入引脚
- // P1M0=0x01;
- // P1M1=0x00;
- //1111 1111 设置P1口为开漏模式,用来AD采集
- P1M0=0xFF;
- P1M1=0xFF;
- ADC_CONTER|=0x80;//打开ADC电源
- while(1)
- {
- temp=ADC();
- a=temp/1000;
- b=(temp-a*1000)/100;
- c=(temp-a*1000-b*100)/10;
- d=temp%10;
- wei=1;
- P2=0XFE;
- wei=0;
- duan=0;
- duan=1;
- P2=SMG[a];
- delay(10);
- P2=0XFf;
- wei=1;
- P2=0XFd;
- wei=0;
- duan=0;
- duan=1;
- P2=SMG[b];
- delay(10);
- P2=0XFf;
- wei=0;
- wei=1;
- P2=0XFb;
- duan=0;
- duan=1;
- P2=SMG[c];
- delay(10);
- P2=0XFf;
- wei=0;
- wei=1;
- P2=0XF7;
- duan=0;
- duan=1;
- P2=SMG[d];
- delay(10);
- P2=0XFf;
- if(AV>5.3)
- led=0;led1=1;
- if(AV<4.5)
- led=1;led1=0;
- if(AV<5.25&&AV>4.55)
- led=1;led1=1;
- }
- }
复制代码 |