注册会员
- 积分
- 37
- 威望
- 24
- 贡献
- 9
- 兑换币
- 11
- 注册时间
- 2015-3-20
- 在线时间
- 2 小时
- 毕业学校
- 铁路小学
|
5贡献
AD转换问题困扰了我三天了。我用xs128的内置ad端口,输出到PA口的LCD1602.单片机自带AD测试端口。硬件操作是用短接帽把1,9两口短接,用计算机给芯片供电。也测试过ad端口和地之间有电压。
但是软件中while(!ATD0STAT2L_CCF0);会死在里面。永远到不了后面的LCD输出。若用字符串输出,在第四位后还会继续输出p1中的元素。用单个字符输出可以将输出的东西控制在前四位,但是改变电阻值没有效果。
跪求大神帮忙解决。
AD端口的电路图:
程序是:
/****************显示单个字符函数*******************************************/
void Display_char(unsigned char x,unsigned char y,unsigned char data)
{
y&=0x01;
x&=0x0f;//限制x不能大于15,y不能大于1
//设置光标位置
if(y==1)
x+=0x40;
x+=0x80;
LCD_WriteCommand(x);
//显示单个字符
LCD_WriteData(data);
}
/****************显示字符串函数*******************************************/
void Display_string(unsigned char x,unsigned char y,unsigned char *s)
{
y&=0x01;
x&=0x0f;//限制x不能大于15,y不能大于1
//设置光标位置
if(y==1)
x+=0x40;
x+=0x80;
LCD_WriteCommand(x);
//显示字符串
while(*s)
{
LCD_WriteData(*s);
s++;
}
}
/****************AD初始化*******************************************/
void AD_Init(void)
{
ATD0CTL1=0x00; //00000000 选择AD 通道为外部触发,8 位精度,采样前不放电
ATD0CTL2=0x40; //01000000 标志位自动清零,禁止外部触发, 禁止中断
ATD0CTL3=0x88; //10001000 右对齐无符号,每次转换1 个序列, No FIFO, Freeze 模式下继续转
ATD0CTL4=0x01; //00000001 采样时间为4 个AD 时钟周期,PRS=1,ATDClock=24/(2*(1+1))=6MHz
ATD0CTL5=0x20; //00100000 特殊通道禁止,连续转换,单通道转换,输入通道为0
ATD0DIEN=0x00; //00000000 禁止数字输入}
}
void InitPLL()
{
CLKSEL_PLLSEL = 0;
PLLCTL_PLLON = 1;
SYNR = 0xc0|0x09; //总线频率是80MHZ
REFDV = 0x80|0x01; //
POSTDIV = 0;
PLLCTL_PLLON = 1;
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1))
{
;
}
CLKSEL_PLLSEL =1 // 超频至80M
/****************AD转换*******************************************/
//-----读取AD转换结果--------//
void AD_GetValue(word *AD_wValue)
{
*AD_wValue=ATD0DR0; //读取结果寄存器的值
}
/*****液晶显示函数*********************************************************/
void main(void)
{
uchar b,c=0;
uchar k[4];
unsigned char p1[]="Current Temp is:" ;
LCD_RW=0;
Init_PLL();
IO_Init();
LCD_Init();
EnableInterrupts;
PORTA_PA7=~PORTA_PA7;
for(;;)
{
Display_string(0,0,p1);
while(!ATD0STAT2L_CCF0);{; } // 等待转换结束while(ATDOSTAT2_CCF0==1)
AD_GetValue(&AD_wValue); // 读取转换结果
b=b*2;
c=b/100;
k[0]=KeyTable[c];
b=b-b/100*100;
c=b/10;
k[1]=KeyTable[c];
c=b-b/10*10;
k[2]='.';
k[3]=KeyTable[c];
// Display_string(0,1,k);
Display_char(0,1,k[0]);
Display_char(1,1,k[1]);
Display_char(2,1,k[2]);
Display_char(3,1,k[3]);
Display_char(5,1,0xdf);
Display_char(6,1,'C');
Delay_ms(5000);
}
}
|
附件: 您需要 登录 才可以下载或查看,没有帐号?注册
|