专栏首页单片机爱好者指针在液晶屏显示中的用法(一)

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

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

这天,老板给了一个任务,给他们公司的产品增加一个液晶屏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同理。

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

未完………

本文分享自微信公众号 - 单片机爱好者(mcucoder),作者:MCU启航

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大学生完成电子设计全过程

    作为一名在读本科生,自己不能奢望从课堂上学到太多实践的知识。但我还是看到身边有很多热衷于电子设计的同学,虽然自己在电子线路设计的学习过程中一路磕磕绊绊,但...

    MCU起航
  • ESP8266_10 ESP8266的STATION模式

    从这一节开始,聊聊8266的联网功能,首先是它的几个工作模式:station,soft-ap,station+ soft-ap。这一节主要说它...

    MCU起航
  • 电解电容为什么会爆炸?一文看明白!

    电解电容是通过电解质作用在电极上形成的氧化层作为绝缘层的电容,通常具有较大的容量。电解质是液体、胶冻状富含离子的物质,大多数电解电容都是有极性的,也就是在工作时...

    MCU起航
  • phantomjs小试

    简单来说,phantomjs就是一个运行在node上的webkit内核,支持DOM渲染,css选择器,Canvas,SVG等,在浏览器上能做的事情,理论上,ph...

    IMWeb前端团队
  • phantomjs小试

    简单来说,phantomjs就是一个运行在node上的webkit内核,支持DOM渲染,css选择器,Canvas,SVG等,在浏览器上能做的事情,理论上,ph...

    IMWeb前端团队
  • [网站搭建]实战win2003搭建asp网站

    Youngxj
  • 反-反爬虫:用几行代码写出和人类一样的动态爬虫

    本文将从 Phantomjs 动态爬虫介绍起,用3行代码傻瓜式完成基于 Casper 的动态爬虫来绕过对抗策略获取页面数据。

    T4erg
  • Go 语言并发编程系列(十三)—— sync 包系列:sync.WaitGroup 和 sync.Once

    在介绍通道的时候,如果启用了多个子协程,我们是这样实现主协程等待子协程执行完毕并退出的:声明一个和子协程数量一致的通道数组,然后为每个子协程分配一个通道元素,在...

    学院君
  • 学习前端的思路问题

    image.png 今天在群视频中分享了我自己写的PPT《学习前端的思路问题》,这个PPT主要讲了以下四个问题: 一,前端的核心是学什么? html、js、cs...

    web前端教室
  • 使用BigDecimal 进行浮点值的精确计算

    输出打印为: b1=>7.2882 b2=>7.1 7.22-7.0=0.1882

    Dream城堡

扫码关注云+社区

领取腾讯云代金券