⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 这是用于lpc2106的自带ADC功能的演示,利用KEIL FOR ARM 开发,可以参考学习.
💻 C
字号:
// 智林Z2101/03开发板试验程序 
// ADC试验 
// 刘笑然
// 智林测控技术研究所 
// www.the0.net
// 2006.12.1

#include <stdio.h>

// 引入相关芯片的头文件 
#include <LPC2103.H>
#include "PCF8833.h"


/*----------------------------------------------------------*\
 | TYPE DEFINE                                              |
\*----------------------------------------------------------*/
typedef char               S8;
typedef unsigned char      U8;
typedef short              S16;
typedef unsigned short     U16;
typedef int                S32;
typedef unsigned int       U32;
typedef long long          S64;
typedef unsigned long long U64;
typedef unsigned char      BIT;
typedef unsigned int       BOOL;

/*----------------------------------------------------------*\
 | nuber to string                                          |
\*----------------------------------------------------------*/
void DecStr(char *s,int d) {
	signed char t[20],i=0,l=0;
	if(d==0) 
	{
		s[0]='0';s[1]=0;return;
	}
	while(d>0) {
		t[i++]=d%10;
		d/=10;
		}
	s[i--]=0;
	for(;i>=0;i--) {
		s[i]=t[l++]+'0';
		}
	}
/*----------------------------------------------------------*\
 | Delay ns                                                 |
\*----------------------------------------------------------*/
void DelayNS (U32 dly) {
	U32 i;
	
	for ( ; dly>0; dly--)
		for (i=0; i<5000; i++);
	}
/*----------------------------------------------------------*\
 | ADC Initial                                              |
\*----------------------------------------------------------*/
void  ADCInit(void) {
	PINSEL1 |= 3 << 12;		// P0.22连接到AD0.0
	}
/*----------------------------------------------------------*\
 | MAIN:                                                    |
\*----------------------------------------------------------*/
int main(void) {
	U32 ADC_Data;
	char s[20];

	PCF8833Init();
	ADCInit();

	LCD_Clear_Screen();

	/* 进行ADC模块设置 */
	ADCR = (1 << 0)						|	// SEL=8,选择通道1 
			((60000000 / 1000000 - 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,正常工作模式
			(1 << 24)						|	// START=1,直接启动ADC转换
			(0 << 27);						 	// 直接启动ADC转换时,此位无效
	DelayNS(10);
	ADC_Data = ADGDR;		// 读取ADC结果,并清除DONE标志位

	for(;;) {
		ADCR |= 1 << 24;					// 进行第一次转换
		while ((ADGDR & 0x80000000) == 0);	// 等待转换结束
		ADCR |= 1 << 24;					// 再次启动转换
		while ((ADGDR & 0x80000000) == 0);	// 等待转换结束
		ADC_Data = ADGDR;					// 读取ADC结果
		ADC_Data = (ADC_Data >> 6) & 0x3ff;
		ADC_Data = ADC_Data * 3300;			// 参考电压3.3v 
		ADC_Data = ADC_Data / 1024;

		PutString(1,0,"LCD Backlight",0xF800,0xFFE0);
		PutString(1,16,"LED Currunt:",0xF800,0xFFE0);
		sprintf(s, "V:%4d mV", ADC_Data);
		//DecStr(s,ADC_Data);
		PutString(1,32,s,0xF800,0xFFE0);
		sprintf(s, "I:%4d mA", ADC_Data/120);
		PutString(1,48,s,0xF800,0xFFE0);
		}
	}
/*----------------------------------------------------------*\
 | END OF FILE                                              |
\*----------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -