标题:
STC8A单片机AC转换问题
[打印本页]
作者:
eyven0519
时间:
2020-2-14 15:49
标题:
STC8A单片机AC转换问题
初学STC8A单片机,ADC转换用P10通道,无检测结果。接3.3V测试电压,
ADC_RES输出为0;请指教!
程序如下:
#include "stc8.h"
#define uchar unsigned char
unsigned char const z[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//7段数码管段码表共阳0,1,2,3,4,5,6,7,8,9,.
unsigned char code c[]={0x08,0x10,0x20,0x40};//数码管扫描
unsigned char smgduan[4]={0x3f,0x80,0x3f,0x3e};
sbit LSA=P0^0;
sbit LSB=P0^1;
sbit LSC=P0^2;
int e;
void smg(void)
{
unsigned char i;
while(1)
{
for(i=0;i<4;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0; break;//???0?
case(1):
LSA=1;LSB=0;LSC=0; break;//???1?
case(2):
LSA=0;LSB=1;LSC=0; break;//???2?
case(3):
LSA=1;LSB=1;LSC=0; break;//???3?
}
P2=smgduan[i]
delay(100);
P2=0x00;
}
}}
uint GetADCResult()
{
ADC_CONTR = ADC_POWER|ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
ADC_RES=0;
while(!(ADC_CONTR & 0x20));
ADC_CONTR &= ~ADC_FLAG;
return (ADC_RES*4+ADC_RESL);
}
void main(void)
{
uint V;
P1M0 = 0X00;
P1M1 = 0X00;
ADC_CONTR=0x80;
ADCCFG=0x00;
ADC_RES=0;
ADC_RESL=0;
while(1)
{
V=GetADCResult()*10;
smgduan[0]=z[V/10];
smgduan[2]=z[V%10];
smg();
}
}
复制代码
作者:
wulin
时间:
2020-2-15 07:13
楼主程序不完整,寄存器配置不当,给你补充并注释,你试试。
#include "stc8.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
unsigned char const z[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//7段数码管段码表共阴0,1,2,3,4,5,6,7,8,9,.
//unsigned char code c[]={0x08,0x10,0x20,0x40};//数码管扫描
unsigned char smgduan[4];//显示缓存
sbit LSA=P0^0;
sbit LSB=P0^1;
sbit LSC=P0^2;
//int e;
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
for(j=1150;j>0;j--);//12T/j=110
}
void smg(void)
{
static uchar i=0;
P2=0x00;//消隐
switch(i)//送位码
{
case(0):
LSA=0;LSB=0;LSC=0;i++; break;//???0?
case(1):
LSA=1;LSB=0;LSC=0;i++; break;//???1?
case(2):
LSA=0;LSB=1;LSC=0;i++; break;//???2?
case(3):
LSA=1;LSB=1;LSC=0;i=0; break;//???3?
}
P2=smgduan[i];//送段码
delay(1);
}
uint GetADCResult(uchar ch)
{
ADC_CONTR = ADC_POWER|ADC_START|ch;//
_nop_();
_nop_();
_nop_();
_nop_();
// ADC_RES=0;
while(!(ADC_CONTR & 0x20));
ADC_CONTR &= ~ADC_FLAG;
return ADC_RES<<8|ADC_RESL;
}
void main(void)
{
uint V;
P1M0 = 0x00;//P1.0高阻模式
P1M1 = 0x01;//P1.0高阻模式
ADC_CONTR=0x80;//开ADC电源
ADCCFG=0x2f;//保存结果格式1/速度512时钟
ADC_RES=0;//清以前结果
ADC_RESL=0;//清以前结果
while(1)
{
V=GetADCResult(0);//通道P1.0结果0~4095
smgduan[0]=z[V/1000%10];
smgduan[1]=z[V/100%10];
smgduan[2]=z[V/10%10];
smgduan[3]=z[V%10];
smg();
}
}
复制代码
作者:
eyven0519
时间:
2020-2-15 18:35
wulin 发表于 2020-2-15 07:13
楼主程序不完整,寄存器配置不当,给你补充并注释,你试试。
谢谢指导!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1