首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指针在液晶屏显示中的用法(一)

指针在液晶屏显示中的用法(一)

作者头像
MCU起航
发布2020-06-29 11:03:49
1.9K0
发布2020-06-29 11:03:49
举报
文章被收录于专栏:单片机爱好者单片机爱好者

张三是一位刚参加工作不久的单片机工程师,就职于能力有限公司。

这天,老板给了一个任务,给他们公司的产品增加一个液晶屏LCD1602,显示五个页面,可通过上下按键进行切换。

张三心想,这简单啊。于是定义了五个2*16的二维数组A、B、C、D、E,同时定义了一个变量page,按一下+键,page加一,按一下-键,page减一。page值最大到4,最小为0.

0对应数组A,1对应数组B,依次类推。例如,数组A如下:

uint8_t A[2][16] = {

{"nengliyouxian "},

{"chanpinniubi "},

};

显示函数如下:

if(page == 0)

{

for(i=0;i<4;i++)

{

Lcd1602A_SetPoint(i+1,0);

Lcd1602A _DisplayString(16,A[i]);

}

}

else if(Page == 1)

{

for(i=0;i<4;i++)

{

Lcd1602A _SetPoint(i+1,0);

Lcd1602A _DisplayString(16,B[i]);

}

}

……………..

代码很快写完了,很顺利。但是老板是个想法很多的人,时不时的会让张三调整显示的顺序,或者增加一个页面,又或者减少一个页面。

于是张三经常要调整page值和数组的对应关系,增加或减少显示页面的函数。

这时保洁阿姨过来,看了一眼,说:

你定义一个指针数组,把这几个页面数组的首地址按顺序存下来,显示页面的时候通过页面数组的首地址来显示就行了,显示函数就不用写那么麻烦了。调整页面顺序的话,修改指针数组里的顺序就行了!

张三说:阿姨,我不太会用指针………….

阿姨:很简单,RAM其实和单元楼很像,变量地址就是门牌号A-1-301,变量名就是这个地址里住的人的姓名。通过变量名取值就是通过姓名获取这个人对应的年龄,通过地址取值就是通过地址获取这里住的人的年龄。例如:

unsigned char a = 0;

unsigned char *p;

p = &a;

定义变量的时候,前面加个*,就是指针变量。给指针变量赋值的时候,两者必须是同类型,都是char、int。变量前面加个&,表示获取这个变量的地址,然后就存进p里了。

张三:所以p里面现在是个地址?那怎么得到这个地址对应的变量值?

阿姨:很简单,定义一个同类型变量b,b = * p; 就完了。

张三:这么简单?

阿姨:就这么简单!小伙子没事别老坐着,多爬爬楼就懂了。

所以程序改成了这样,首先是指针数组(存储指针的数组):

uint8_t *page_p[5]; //5个页面

然后给数组赋初值:

page_p[0] = A[0]; //A0表示二维数组A的首地址

page_p[1] = B[0];

page_p[2] = C[0];

page_p[3] = C[0];

page_p[3] = E[0];

再 然后是显示函数:

void display_page(uint8_t *page_num)

{

Lcd1602A _SetPoint(1,0);

Lcd1602A _DisplayString(16,page_num);

Lcd1602A _SetPoint(2,0);

Lcd1602A _DisplayString(16,page_num + 16);

}

如果要显示页面A,只需要给i赋值0:

display_page(page_p[i]);

B、C、D、E同理。

从此,张三变成了一个爱爬楼的单片机工程师。

未完………

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 单片机爱好者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档