标题:
关于stc12a5c60s2中内部AD和DA的用法
[打印本页]
作者:
bai18736849064
时间:
2015-8-3 09:39
标题:
关于stc12a5c60s2中内部AD和DA的用法
求大神
作者:
腾飞的龙
时间:
2015-8-3 18:18
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;
}
}
复制代码
作者:
bai18736849064
时间:
2015-8-4 10:05
腾飞的龙 发表于 2015-8-3 18:18
STC片内AD程序
谢谢大神
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1