📄 adc.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 + -