微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC12C5A60S2的AD转换测电位器阻值,用数码管显示

STC12C5A60S2的AD转换测电位器阻值,用数码管显示

时间:10-02 整理:3721RD 点击:
不知道程序出什么问题?大家帮帮忙,先谢过各位了
#include<reg51.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
#define ADC_POWER 0x80         //ADC转换电源控制位
#define ADC_FLAG  0x10         //模数转换结束标志位
#define ADC_START 0x08         //模数转换启动控制启动位
#define SPEEDLL          0x00   //模数转换器控制位 540个时钟周期转化一次
#define SPEEDL          0x20         //360个时钟周期转化一次
#define SPEEDH          0x40         //180个时钟周期转化一次
#define SPEEDHH          0x60         //90个时钟周期转化一次
sfr ADC_CONTR=0xBC;                 //AD转换控制寄存器
sfr ADC_RES=0xBD;                 //AD转换寄存器高二位
sfr ADC_RESL=0xBE;                 //AD转换寄存器低八位
sfr P1ASF=0x9d;                         //AD转换通道
sbit D1=P2^0;      
sbit D2=P2^1;
sbit D3=P2^2;
sbit D4=P2^3;
uchar stm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                                                  
void delay(uint z)
{uint a,b;
for(a=z;a>0;a--)
for(b=600;b>0;b--)        ;
}
void display(int m)
{D1=1;
P0=~stm[m/1000];
delay(5);
D1=0;
D2=1;
P0=~stm[m/100%10];
delay(5);
D2=0;
D3=1;
P0=~stm[m/10%10];
delay(5);
D3=0;
D4=1;
P0=~stm[m%10];
delay(5);
D4=0;
}
uint AD_get(uchar ch)
{ADC_CONTR=0x88|ch;//开启AD转换,1000 1000,
_nop_(); //经过四个CPU时钟延时,转换值才进入ADC_CONTR
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&0x10)) ;//等待转换结束
ADC_CONTR&=~ADC_FLAG;          //Close ADC_CONTR
return (ADC_RES*4+ADC_RESL);//返回AD转换的十位值
}
float AD_work(uchar ch)
{float AD_val;
uchar i;
for(i=0;i<100;i++)
AD_val=AD_val+AD_get(ch);//利用AD_get()函数计算出转换的值
AD_val=AD_val/100;
AD_val=(AD_val*5)/256; //AD转换计算数值
return AD_val;//计算出模拟值
}
void seriat_init()
{SCON=0X50; //串口方式一,允许接收
TMOD=0x20;  //T1自动装填八位数据       
TH1=0xfd;        //设置波特率 9600
TL1=0xfd;
TR1=1;                //打开T1
}
void AD_init()
{P1ASF=0x04;//打开P1^2通道
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER|SPEEDLL;
delay(2);
}
void main()
{int m;
float n;
uchar i;
AD_init();
seriat_init();
while(1)
{for(i=0;i<8;i++)
{TI=1;
n+=AD_work(i);
TI=0;
delay(1000);
}
n=n/8;
m=(int)(n);
display(m);
}
}

你得先告诉大家,碰到什么现象了,别人才好有针对性的分析。

程序烧录到单片机中,根本什么都没有,我也正迷茫呢

你可以用官方的函数库里的程序先烧写一下看看,很容的,里边带有库函数,很好操作的

是否是烧录器有故障了

用串口助手烧录时,显示烧录成功了

换个烧录器试试看               

方法:1,先调试数码管,2,调试AD用串口来显示

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top