ZigBee学习笔记_HalDriverInit()_3
2013-01-21 10:18
363 查看
HalDriverInit()终于快要看完了,这次查看的是按键初始化函数HalKeyInit()函数
首先是一个halKeySaveKeys变量,注释上说是先前的按键状态在上拉模式下,宏定义如下
前面说过一次按键配置,有关中断的配置,这次初始化的还是这两个按键,首先将他们设置为通用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的数据手册了,是一些基本设置,如下
![](http://img.my.csdn.net/uploads/201301/21/1358733793_9830.png)
下面看下板子与LCD的线路
![](http://img.my.csdn.net/uploads/201301/21/1358733882_1401.png)
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;
else LCD_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()函数就查看到这吧。
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的数据手册了,是一些基本设置,如下
![](http://img.my.csdn.net/uploads/201301/21/1358733793_9830.png)
下面看下板子与LCD的线路
![](http://img.my.csdn.net/uploads/201301/21/1358733882_1401.png)
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;
else LCD_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()_2
- ZigBee学习笔记_HalDriverInit()_1
- ZigBee学习笔记_HAL_BOARD_INIT()
- Zigbee 之SerialApp HalDriverInit()
- ZigBee学习笔记_zmain_ram_init()
- ZigBee学习笔记_osal_nv_init()
- selenium(webdriver)学习笔记2--打开指定路径的firefox
- Python学习笔记之__init__.py文件的作用
- Selenium学习笔记之005:第一个selenium+python+webdriver脚本
- object-c学习笔记:new vs alloc init
- 《ZigBee Wireless Networking》学习笔记【1】
- [XBee] ZigBee学习笔记
- selenium(webdriver)学习笔记6--Alert/Confirm/Prompt的处理(Java版)
- MSDN Kernel-Mode Driver Architecture学习笔记(3)——Device Objects and Device Stacks (3)
- zigbee学习笔记1——基本概念
- 深入安卓JNI,INIT,ZYGOTE——极客学院学习笔记
- Android深度探索:HAL与驱动开发学习笔记--中断
- 20171013学习笔记Selenium 2 第四章WebDriver API 4.6获得验证消息 4.7设置元素等待
- linux内核学习初笔记(4)u-boot的board_init()函数clk_power与gpio妙用
- ZigBee 学习笔记(JN5139)