LPC824_VEML6075紫外检测模块学习笔记
文档编号 | TN_LPC824_VEML6075_NOTES_A0 |
关键字 | LPC824, VEML6073, 紫外检测 |
摘要 | 本技术笔记对LPC824_VEML6075紫外检测模块学习笔记进行说明 |
Mars4zhu
目 录
2.3 I2cm_polling紫外检测例程编译运行与代码分析 4
插图索引
表格索引
错误!未找到目录项。
1 总述
LPC824_VEML6075紫外检测模块学习笔记
2 例程编译运行与代码分析
2.1 打开项目并安装LPC800_DFP、编译库文件
例程在\Code_LPC824+UV Sensor Demo Board\applications\lpc8xx\keil_uvision_projects\nxp_lpcxpresso_824目录下打开Keil项目文件。如果没有安装Keil的LPC800支持包,则进入支持包安装器安装LPC800_DFP,如下图。
打开工程后,有4个项目,其中第1/2个项目是库工程,分别对应芯片支持库文件和板载支持库文件,第3个则是LED点灯例程,第4个则是紫外检测模块需要的紫外检测例程。
在刚开始打开项目时芯片支持库文件和板载外设支持库文件都没有编译,因此最底下的lib目录下的两个lib库文件都有一个黄色感叹号表示文件不存在。需要提前编译这两个库文件。
首先右键点击两个库文件项目并选择“Set As Active Project”设置为当前的活动项目,并选择Make后生成库文件。两个库文件编译成功后,可见库文件前面的黄色感叹号消失。
2.2 Blinky闪烁LED例程编译运行与代码分析
选择Blinky例程,点击Make编译成功并下载,按下正面的RESET按键后运行,可以看到模块背面红色的灯在不停地闪动。
从流程中看到执行完Startup启动代码后调用SystemInit--->Board_SystemInit初始化芯片时钟、引脚配置,然后进入main函数,调用Board_Init初始化板载外围设备,最后设置SysTick为0.1s一次中断,在中断中切换LED点亮状态,实现闪烁LED的效果。
2.3 I2cm_polling紫外检测例程编译运行与代码分析
选择i2cm_polling项目,编译成功并下载运行后,可以看到跟出厂的程序运行情况一样,显示屏模组显示Logo和启动信息后,不停地刷新紫外检测数值显示UVA和UVB。
其代码分析如下:
启动、初始化一直到main函数之前与blinky例程相同。
Main函数中,初始化后进入while无限循环。
/* Generic Initialization */
// 通用初始化,包括设置始终,板载设备初始化和显示屏LCM的初始化
SystemCoreClockUpdate();
Board_Init();
set_lcmGPIO();
/* Setup I2C pin muxing */
// 设置 I2C 引脚复用
Init_I2C_PinMux();
/* Allocate I2C handle, setup I2C rate, and initialize I2C clocking */
// 分配I2C句柄,设置I2C速率并初始化I2C始终?
setupI2CMaster();
/* Disable the interrupt for the I2C */、
// 禁止I2C中断
NVIC_DisableIRQ(I2C_IRQn);
// 显示屏LCM初始化,显示Logo,持续0.6s
LcmInit();
PUTImage(LOGO);
delay_Long(60000);
// 清除屏幕,显示欢迎信息,持续0.6s
LcmClear();
Welcome_on();
delay_Long(60000);
// 清楚屏幕,显示UV数据的文字说明
LcmClear();
UV_data();
// 初始化VEML6075,发送0x00命令,参数为0x40
txSize = 2;
rxSize = 0;
txData[0]=0x00;
txData[1]=0x40;//0x10;
SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
其中LCM各步骤在调试中逐步显示如下:
在完成UV传感器初始化后,进入无限循环,不断读取UVA和UVB的数值并显示。
while(1) {
sum_data=0;
txData[0]=0x07;
// 连续5次读取UVA数值并求平均
for (i=0; i<times; i++)
{
// 发送0x07命令,读取UVA_data寄存器的数值
SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
delay(delay_time);
LSB = rxData[0];
MSB = rxData[1];
last_Data = ((MSB << 8) + LSB);
sum_data += last_Data;
}
avr_data = sum_data/5;
// 清除原有显示并显示更新的数值
PUTchar8x16(4,11," ",0);
PUTNum( 4, 11,avr_data, 0);
txData[0]=0x09;
sum_data=0;
// 连续5次读取UVB数值并求平均
for (i=0; i<times; i++)
{
// 发送0x09命令,读取UVB_data寄存器的数值
SetupXferRecAndExecute(I2C_ADDR_7BIT, txData,txSize, rxData, rxSize);
delay(delay_time);
LSB = rxData[0];
MSB = rxData[1];
last_Data = ((MSB << 8) + LSB);
sum_data += last_Data;
}
// 清除原有显示并显示更新的数值
avr_data = sum_data/5;
PUTchar8x16(6,11," ",0);
PUTNum( 6, 11,last_Data, 0);
delay_Long(20000);
}
3 版本历史(Revision History)
版本号 | 发布时间 | 内容 |
A0 | 2017--03-16 | 初次编写 |