_zigbee led学习笔记。
今天来学习一下lcd,虽然我也认同在实际的项目中,lcd用得不多,但我肯定自己是必然要与lcd打交道的,所以我想了解一下别人对lcd是如何处理的。
05_zigbee led学习笔记。
**请注明出处 写于 2011-12-5
今天来学习一下lcd,虽然我也认同在实际的项目中,lcd用得不多,但我肯定自己是必然要与lcd打交道的,所以我想了解一下别人对lcd是如何处理的。到时候自己要用就可以借鉴借鉴。
我所使用的无线龙开发板使用了一个74hc595d对io口进行扩展,电路如下:
这样就必须对74hc595有所了解。这是一款具有锁存功能的串入并出芯片,真值表如下:
这里我们只是用到了3根信号线:si、sck、rck,其余接固定电平。当然不同文档名称可能会有不同。
今天直接进入lcd初始化函数。
int main( void
// initialze hal drivers
haldriverinit
/* lcd */
#if (defined hal_lcd) &hal_lcd ==true)
hallcdinit();
#endif
void hallcdinit(void)
delay_us(10000);
p1dir |=0xfc;
p2dir |=0x01;
p0dir |=0x02;
p1_2 = 0;
delay_us(100);
writelcd(command , 0xe2);/复位。
setcontrast(iintre**aluea,contrastvalue);
clearscreen();
hallcdwritestring("ieee:",1);
hallcdwritestring("init lcd",2);
// hallcdwritestring("init lcd",3);
printch8(30,30,'o',1);
那么我们今天的重点就是hal_文件。在初始化函数的开头设置io口为输出,大家都看得懂。延时函数从函数名上看就知道是微妙级延时,我们今天就不管它了。
下面我们要看的是writelcd(command , 0xe2)函数,这是一个数据命令复用的函数,由第一个参数来选择是数据还是命令。
void writelcd(uint8 fs, uint8 da)
delay1(2);
lcd_cs1 = 0片选。
lcd_rw = 0写操作。
//delay1(0);
if(fs)
elsedelay1(0);
write595(da);
lcd_e = 1;//1给时钟沿,写入数据。
delay1(2);
lcd_e = 0;//0
//delay1(0);
lcd_cs1 = 1;
其实这个if判断完全不必,直接写如下语句即可:
lcd_rs = fs;
由于我们使用的595进行io口扩展,所以我们会看到这样一个函数write595(da):
void write595(uint8 dat)
uint8 ii;
for(ii = 0 ; ii < 8; ii++)
lcd_595_ld = 1;
lcd_595_ld = 0;
该函数用来把一字节数据送到lcd并行数据口。如对该函数还不理解的可以对照595的真值表与时序图进行分析。剩下的操作就完全与595无关了。
在初始化函数中对函数writelcd()调用了很多次,这是用来初始化lcd的。用过lcd12864的都知道在初始化lcd时,需要写入一串命令对lcd进行初始化。具体这些命令都代表什么意思最好去查对应的数据手册,不同的lcd会有所不同。
函数setcontrast(iintre**aluea,contrastvalue)同样是向lcd写入了几条命令,虽然不知道这些命令具体的意思,但从函数名与其参数的注释中我们可以猜到这是通过调整内部电阻来调整对比度的。最后一个clearscreen()函数当然也能猜到是清屏的:
void clearscreen(void)
uint8 x,y;
for(x = 0;x < 8 ;x++)
这里出现了一个新的函数,一看就知道是用来设置写入的位置的。从这里也可以知道该lcd为8*8*128。
我们还是先来看下系统提供的lcd接口函数吧。打开hal_文件:
* initialize lcd service
extern void hallcdinit(void);
* write a string to the lcd
extern void hallcdwritestring ( char *str, uint8 option);
* write a value to the lcd
extern void hallcdwritevalue ( uint32 value, const uint8 radix, uint8 option);
* write a value to the lcd
extern void hallcdwritescreen( char *line1, char *line2 );
* write a string followed by a value to the lcd
extern void hallcdwritestrin**alue( char *title, uint16 value, uint8 format, uint8 line );
* write a string followed by 2 values to the lcd
extern void hallcdwritestrin**aluevalue( char *title, uint16 value1, uint8 format1, uint16 value2, uint8 format2, uint8 line );
* write a percentage bar to the lcd
extern void hallcddisplaypercentbar( char *title, uint8 value );
由此可见我们的系统提供了7个lcd接口函数。下面我们依次来看。
第一个是初始化函数,前面已经看过了。下面看的是第二个写入字符串函数void hallcdwritestring ( char *str, uint8 option):
void hallcdwritestring ( char *str, uint8 option)
unsigned char i;
uint8 lcdbuf[20];
osal_memcpy(lcdbuf,str,20);
i = strlen(str);
lcdbuf[i] =0';
switch (option)
这里hallcdclearline()函数是用来进行清除操作的,并且是清除一整行。代数式option%7是为了保证参数的正确性,前面讲过我们的屏为8*8*128即只有8行,行号为0—7。
整理06年投身社会暑期社会实习报告 x
最新整理06年投身社会暑期社会实习报告。在暑假前的两个月我就开始着手暑假期间社会实践的有关工作了,对于我们这些贫困生来说暑假期间意义重大,我想利用暑假来亲近社会了解社会有助于今后走向社会时不至于被动的看不清路,二来我作为特困生中的一员我并没有申请助学贷款,我想用我的假期时间来挣取学费,这是对我极大的...
06 2024年安徽卷
2017年安徽省初中学业水平考试。数学试题 含答案全解全析 第 卷 选择题,共40分 一 选择题 本大题共10小题,每小题4分,满分40分 每小题都给出a b c d四个选项,其中只有一个是正确的。1.的相反数是 a.b.c.2 d.2 2.计算 a3 2的结果是 b.a6 c.a5 3.如图,一个...
06医士类专业2024年考试大纲
2011年山西省中等职业学校对口升学考试大纲。医士类专业。本考纲是以中等职业学校医士专业教学指导方案为依据,以中等职业教育国家规划教材 预防医学 人民卫生出版社,1986年5月第一版 正常人体学基础 人民卫生出版社,2001年8月第一版 两本教材为基础,参考医士实践工作对从业人员的知识及技能要求制定...