/****************************************Copyright (c)**************************************************
** 深圳市优龙科技有限公司
**
**
**
** http://www.Ucdragon.com
**
********************************************************************************************************/
/***********************************************************************************
* File:ADC_Test
* 功能:读取ADC转换结果
* 说明:
************************************************************************************/
//头函数
#include "..\inc\LPC2103.h"
#include "..\inc\Lib_LPC2103.h"
#define ESC_KEY 0x1b
/*************************************************************************
* Function Name: UART0_Init
* Parameters: Which_Uart DevNum
*
* Return: int
*
*
* Description:
*
*************************************************************************/
void UART0_Init () //串口0配置
{
U0LCR = 0x83; // DLAB = 1,可设置波特率
U0DLL = 0x11;
U0DLM = 0x00;
U0LCR = 0x03;
}
/*************************************************************************
* Function Name: UART0_PutChar
* Parameters:
* char ch
* Return: void
*
*
* Description: Send character by polling LSR register
*
*************************************************************************/
void UART0_PutChar ( U32 data)
{
U0THR = data; // 发送数据
while( (U0LSR&0x40)==0 ); // 等待数据发送完毕
}
/***********************************************************************************
* Function Name: Get_Key
* Parameters: none
* Return: Rcv_Data
* Description:
*
************************************************************************************/
U8 Get_Key(void)
{
U8 Rcv_Data;
Rcv_Data=U0RBR;
return(Rcv_Data);
}
/*************************************************************************
* Function Name: UART0_PutString
* Parameters:
* char *Buf
* Return: int :
*
*
* Description: Send a string by using polling method
*
*************************************************************************/
void UART0_PutString(char *str)
{
while(*str !='\0')
{
UART0_PutChar(*str++);
}
}
/***********************************************************************************
* Function Name: ADC_Measure
* Parameters: none
* Return: AdcResult
* Description: ADC第0通道进行转换,返回转换的数据
*
************************************************************************************/
void Delay ( )
{
U8 dly=0;
for(;dly<250;dly++);
}
/***********************************************************************************
* Function Name: ADC_Init
* Parameters: Adc_Clk
* Return: none
* Description: 模数转换初始化,输入ADC的转换频率
*
************************************************************************************/
void ADC_Init( U32 Adc_Clk )
{
PINSEL1 |= (3<<12); //管脚配置,P0.22管脚为Ain0
AD0CR = ( 1 << 0 ) | // SEL = 1 ,选择通道0
( ( Fpclk / Adc_Clk - 1 ) << 8 ) | // CLKDIV = Fpclk / 1000000 - 1 ,即转换时钟为1MHz
( 0 << 16 ) | // BURST = 0 ,软件控制转换操作
( 0 << 17 ) | // CLKS = 0 ,使用11clock转换
( 1 << 21 ) | // PDN = 1 , 正常工作模式(非掉电转换模式)
( 0 << 22 ) | // TEST1:0 = 00 ,正常工作模式(非测试模式)
( 0 << 24 ) ; // START = 0 ,没有启动ADC转换
}
/***********************************************************************************
* Function Name: ADC_Measure
* Parameters: none
* Return: AdcResult
* Description: ADC第0通道进行转换,返回转换的数据
*
************************************************************************************/
U32 ADC_Measure( void )
{
U32 Adc_Data;
AD0CR|=(0x1<<24); //START位为1 ,启动ADC转换
Delay( ); //延时
Adc_Data = AD0DR0; //读取AD0DR0
while ( ( Adc_Data & 0x80000000 ) == 0 ); //读取AD0DR0里面的转换数值
Adc_Data = ( Adc_Data >> 6 ) & 0x3ff;
return Adc_Data; //返回转换结果
}
/***********************************************************************************
* Function Name: ADC_Test
* Parameters: none
* Return: none
* Description: ADC第0通道进行转换,通过串口发送ADC转换结果,按ESC按键退出ADC测试
*
************************************************************************************/
void main ( void )
{
U32 i,Adc_Result;
PINSEL0 = 0x00000005; // 设置I/O连接到UART0, P0.4,P0.5,P0.6,P0.7,P0.8为输出,用来控制LED.
PINSEL1 = 0x00000000;
UART0_Init(); //UART0初始化
Delay( );
ADC_Init( 200000 ) ; //输入ADC的转换频率
while ( Get_Key() != ESC_KEY )
{
Adc_Result = ADC_Measure( );
for(i=10;i>0;i--) //显示Adc_Result的值,即是ADC转换结果
{
if( (Adc_Result&(1<<(i-1))) > 0 ) UART0_PutChar('1');
else UART0_PutChar('0');
Delay( ); //延时
}
UART0_PutChar('\n'); //换行
}
}
评论0