在线时间613 小时
UID252169
注册时间2010-12-5
NXP金币0
TA的每日心情 | 开心 2019-2-14 16:49 |
---|
签到天数: 296 天 连续签到: 1 天 [LV.8]以坛为家I
金牌会员
 
- 积分
- 4473
- 最后登录
- 2020-4-14
|
本帖最后由 zhjb1 于 2016-12-18 20:36 编辑
实验三 LPC824的2路ADC实验
采用实验二完成的LCD作为结果演示显示屏。
首先需要设计屏幕位置,此屏的宽是64点阵,ASCII吗是8X6,6像素宽的,因此一行能显示10个ASCII码;
12位ADC采样出来的结果是浮点:0~1的数,为了简单起见,换算成有效位0~999显示,一行2个,设计如下:
A0 XXXX A1 XXXX
在main前边写2个函数,一个是基本显示内容,不改变的:
void dispBase(void){
c2l(0,1,10);c2l(1,1,0);c2l(8,1,10);c2l(9,1,1);//A0,A1
}
为什么不从第1行[控制为0]开始呢?因为后边我们会加入程序执行计数器,检验宕机情况。
void dispMes(void){
c2l(3,1,int(val0*10)%10);c2l(4,1,int(val0*100)%10);c2l(5,1,int(val0*1000)%10);c2l(6,1,int(val0*10000)%10);
c2l(11,1,int(val1*10)%10);c2l(12,1,int(val1*100)%10);c2l(13,1,int(val1*1000)%10);c2l(14,1,int(val1*10000)%10);
}
简单介绍转换:int(val0*10)%10):val0*10——将小数点后第位设为各位,%10表示取0~9的有效数,当然前边的int取整函数可以不要,结果一样的。上述一行运行的结果:例如ADC0=0.12341234,显示结果:1234,以后的数丢掉了。
下边打开AnalogIn.h函数,实例代码如下:
* AnalogIn temperature(p20);
*
* int main() {
* while(1) {
* if(temperature > 0.5) {
* printf("Too hot! (%f)", temperature.read());
* }
* }
* }
分析此文档,可以得到定义对象后的类属性和方法就很简单了,下边尝试定义,在文件头部:
//Define ADC
AnalogIn adc0(P0_20);
AnalogIn adc1(P0_21);
分别用P0_20,P0_21两个GPIO口作为两路ADC的输入。再增加两个浮点的变量:
float val0,val1;
在循环语句中加入:
val0=adc0.read();
val1=adc1.read();
更改main程序为:
int main(){
lcdInit();
lcdClear();
dispBase();
while(true){
val0=adc0.read();
val1=adc1.read();
dispMes();
wait(0.5);
}
}
编译下载后,将电位器连接在P0_20,P0_21上分别调到A0显示3000,A1显示5000,电位器半圈的很难调,大概齐吧。结果见照片图31.
|
-
31-2路ADC
|