ZigBee学习笔记_HalDriverInit()_3
来源:互联网 发布:淘宝男装潮流店铺 编辑:程序博客网 时间:2024/05/22 11:47
HalDriverInit()终于快要看完了,这次查看的是按键初始化函数HalKeyInit()函数
void HalKeyInit( void ){ /* Initialize previous key to 0 */ halKeySavedKeys = 0; HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT); /* Set pin function to GPIO */ HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT); /* Set pin direction to Input */ HAL_KEY_SW_7_SEL &= ~(HAL_KEY_SW_7_BIT); /* Set pin function to GPIO */ HAL_KEY_SW_7_DIR &= ~(HAL_KEY_SW_7_BIT); /* Set pin direction to Input */ // HAL_KEY_JOY_MOVE_SEL &= ~(HAL_KEY_JOY_MOVE_BIT); /* Set pin function to GPIO */// HAL_KEY_JOY_MOVE_DIR &= ~(HAL_KEY_JOY_MOVE_BIT); /* Set pin direction to Input */ /* Initialize callback function */ pHalKeyProcessFunction = NULL; /* Start with key is not configured */ HalKeyConfigured = FALSE;}
首先是一个halKeySaveKeys变量,注释上说是先前的按键状态在上拉模式下,宏定义如下
#define HAL_KEY_SW_6_SEL P0SEL#define HAL_KEY_SW_6_DIR P0DIR#define HAL_KEY_SW_7_SEL P0SEL#define HAL_KEY_SW_7_DIR P0DIR#define HAL_KEY_SW_6_BIT BV(5)#define HAL_KEY_SW_7_BIT BV(4)
前面说过一次按键配置,有关中断的配置,这次初始化的还是这两个按键,首先将他们设置为通用I/O口并且是输入引脚,回调函数设置为空,按键的配置为FALSE。
就剩下最后一个LCD初始化了,进入HalLcdInit()函数
void HalLcdInit(void){ delay_us(10000); P1DIR |= 0xFC; P2DIR |= 0x01; P0DIR |= 0x02; P1_2 = 0;delay_us(100);WriteLCD(COMMAND , 0xE2);//复位delay_us(100);WriteLCD(COMMAND , 0xA3);delay_us(100);WriteLCD(COMMAND , 0xA0);delay_us(100);WriteLCD(COMMAND , 0xC8);delay_us(100);WriteLCD(COMMAND , 0x24);delay_us(100);WriteLCD(COMMAND , 0x81);delay_us(100);WriteLCD(COMMAND , 0x14);delay_us(100);WriteLCD(COMMAND , 0x2F);delay_us(100);WriteLCD(COMMAND , 0x40);//从第一列开始显示delay_us(100);WriteLCD(COMMAND , 0xB0);delay_us(100);WriteLCD(COMMAND , 0x10);delay_us(100);WriteLCD(COMMAND , 0x00);delay_us(100);WriteLCD(COMMAND , 0xAF);WriteLCD(COMMAND , 0x81);WriteLCD(COMMAND , 0x1b); delay_us(100); SetContrast(iIntRegValuea,ContrastValue);ClearScreen(); // HalLcdWriteString("IEEE:",1); // HalLcdWriteString("Init lcd",2); // HalLcdWriteString("Init lcd",3); // PrintCh8(30,30,'O',1);}
这些个指令得看OCM12864-9的数据手册了,是一些基本设置,如下
下面看下板子与LCD的线路
P1_2口是LCD的背光口,置低即可。可以看到51芯片并不是直接控制LCD模块,而是通过一个串口转并口来控制,节省了接口资源,WriteLCD()函数的实现就设计到LCD模块的时序以及串行转并行模块时序(看代码貌似是595模块),
void WriteLCD(uint8 fs, uint8 da){delay1(2);LCD_CS1 = 0;LCD_RW = 0;//写操作//delay1(0);if(fs){LCD_RS = 1;}else{LCD_RS = 0;} // delay1(0); Write595(da);LCD_E = 1;// = 1; delay1(2);LCD_E = 0;// = 0;//delay1(0);LCD_CS1 = 1;}
首先是判断写命令还是写数据,然后是通过串行转并行,输出数据到LCD模块上
void Write595(uint8 dat){uint8 ii;for(ii = 0 ; ii < 8; ii++){if(dat & 0x80) LCD_595_DAT = 1;elseLCD_595_DAT = 0;dat <<= 1;LCD_595_CK = 1;LCD_595_CK = 0;}LCD_595_LD = 1;LCD_595_LD = 0;}
对LCD设置完成之后,有个清屏操作,
void ClearScreen(void){ uint8 x,y;for(x = 0;x < 8 ;x++){ SetRamAddr(x , 0); for(y = 0 ; y < 128 ; y++){ WriteLCD(DATA , 0x00);}}}
更多LCD操作还是看下他给的基础例程结合QCM12864-9数据手册即可,HalDriverInit()函数就查看到这吧。
- ZigBee学习笔记_HalDriverInit()_3
- ZigBee学习笔记_HalDriverInit()_1
- ZigBee学习笔记_HalDriverInit()_2
- EasyUI学习笔记_3
- zigbee networks 学习笔记
- zigbee学习笔记---入门
- ZigBee学习笔记_osal_int_disable()
- ZigBee学习笔记_HAL_BOARD_INIT()
- ZigBee学习笔记_zmain_vdd_check()
- ZigBee学习笔记_zmain_ram_init()
- ZigBee学习笔记_osal_nv_init()
- ZigBee学习笔记
- zigbee学习笔记
- zigbee 学习笔记
- ZigBee学习笔记(1)
- ZigBee学习笔记1
- 机器学习笔记_ 降维_3:SVD
- JavaSE学习笔记_3:Java面向对象
- 《Effective STL》读书笔记八:Item 15:意识到string的不同实现 Item 16:如何将vector和string的数据传给老的API函数
- C#不安装Oracle Client时连接Oracle及“无法加载DLL: OraOps10.dll”错误
- 利用SQOOP将数据从数据库导入到HDFS
- AspNet上传文件的几个控件(downmoon收集)
- C#.NET GB2312编码转化为中文
- ZigBee学习笔记_HalDriverInit()_3
- centos 5.5如何配置vnc,开启linux远程桌面教程
- C#启动命令行进程,重定向标准输出流、標準輸入流和标准错误流
- Win7下Emacs间歇性变慢的问题
- APEX 发送邮件
- 配置
- Oracle补丁集的补丁号Patch ID/Number速查
- POJ 3273 Monthly Expense
- CentOS 5.4 安装高亮vim编辑工具