高级会员
- 积分
- 963
- 威望
- 476
- 贡献
- 283
- 兑换币
- 294
- 注册时间
- 2013-10-30
- 在线时间
- 102 小时
- 毕业学校
- 广东海洋大学寸金学院
|
6#
楼主 |
发表于 2013-11-19 22:00:38
|
只看该作者
℡单身旅行 发表于 2013-10-30 13:54
AD就是采集你给的电压值,因为是5V的,如果是八位的话,就把5平均分成256份,再按照你给的电压值,然后显 ...
#include "derivative.h"
#include <stdio.h>
#include <string.h>
#include"OLED.h" //液晶
int AD_wValue;//AD转换结果
void delay(int n) \
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<2670;j++);
}
//-----时钟初始化程序--------//
void PLL_Init(void)
{
REFDV=1;
SYNR=2;
while(!(CRGFLG&0x08));
CLKSEL=0x80;
}
//--------------总线时钟=48/2=24MHz------------//
//-----ATD初始化程序--------//
void AD_Init(void)
{
ATD0CTL1=0x00; //00000000 选择AD0通道为外部触发,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 禁止数字输入
}
//-----读取AD转换结果--------//
void AD_GetValue(int *AD_wValue)
{
*AD_wValue=ATD0DR0; //读取结果寄存器的值
}
//-----主函数--------//
void main(void)
{
double a=23,b=32;
char c[20] ;
PLL_Init();
AD_Init();
DDRM=0XFF;
LCD_Init();
delay(2);
EnableInterrupts;
for(;;)
{
while(!ATD0STAT2_CCF0); // 等待转换结束while(ATDOSTAT2_CCF0==1)
AD_GetValue(&AD_wValue); // 读取转换结果
a = (double)AD_wValue; // 在B口显示转换值
/******************液晶显示*************************/
sprintf (c, "%f", a);
LCD_Print(0,2,c);
/******************************************/
delay(1000);
}
}
运行之后,当AD0什么都不接时,液晶显示的数值在160附近跳变,当插上杜邦线之后,不管杜邦线接5V还是GND,液晶显示一直是从0逐渐跳变到255,然后又循环从0跳变到255,请为什么会这样子呢?
|
|