打印
[新手园地]

【第四批】Metalor笔记3 - LCD1602(附艳照,代码有更新)

[复制链接]
2420|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Metalor|  楼主 | 2011-11-20 17:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Metalor 于 2011-11-21 20:43 编辑

在开发板上“缝缝补补”之后,之前用过的一块1602成功移植~~(注意原理图的修改,开发板自带的LCD无法运行的哦亲)


简单往屏上写了些东西,再顺手搞了个简单时钟详情请见艳照:




本来可以和之前写好的流水灯一起运行在裸奔框架的,只可惜硬件上有冲突,4个LED和1602共用了GPA口,只能作罢。
C语言还不太过关,想往屏上写字符串没能成功,暂时只是一个数据一个数据地写,研究中。

LCD1602 By Metalor_1.rar

1.6 MB

相关帖子

沙发
Metalor|  楼主 | 2011-11-20 21:03 | 只看该作者
不能显示字符串的问题已解决。
疏忽了。。字库是自己定义的,发字符串的时候发成了标准的PC上的字库码。。
即:我定义了A为0x11,B为0x12,而发的时候却发的是数组xx[]={"AB"};,正确应该是xx[]={A,B};
太疏忽,习惯成自然了。。

使用特权

评论回复
板凳
Metalor|  楼主 | 2011-11-20 21:13 | 只看该作者
还发现一个问题:
我定义了数组:uint8_t const Metalor[] = {M,e,t,a,l,o,r};
                     uint8_t const Lynn[]     = {L,y,n,n,};
                     uint8_t const _21ic[]    = {tt,kg,2,1,i,c};
函数:void vWriteString(uint8_t add,uint8_t const *pData)  //在1602显示字符串
        {
        vWriteCom(0x80+add);
        while(*pData != '\0')
        {
                vWriteData(0x30 + *pData);
                pData++;
        }
        }
当执行 vWriteString(15,Metalor)时,三个数组的数据都被显示。
当执行 vWriteString(15,Lynn)时,后两个数组的数据都被显示。
当执行 vWriteString(15,_21ic)时,只显示_21ic[]数组的数据。
也就是说,在编译时这三个数组被编译成了一个数组!!!
因为我们知道每个数组的最后都默认有一个'\0’表示数组结束,我在函数里设置了数组结尾的判断,但没有效,函数一直执行直到第三个数组结束才停止(才遇到'\0'),只能说三个数组被编译成了一个数组才解释的通!!!
我只有在数组末尾手动加上'\0'函数才被正确执行!
即数组改为:  uint8_t const Metalor[] = {M,e,t,a,l,o,r,'\0'};
                     uint8_t const Lynn[]     = {L,y,n,n,'\0'};
                     uint8_t const _21ic[]    = {tt,kg,2,1,i,c};

使用特权

评论回复
地板
Metalor|  楼主 | 2011-11-20 21:15 | 只看该作者
不知是否编译器对新唐不够支持??不会被我抓到Bug吧?

使用特权

评论回复
5
watch186| | 2011-11-21 09:07 | 只看该作者
牛人就是牛人啊  很是速度……

使用特权

评论回复
6
hotpower| | 2011-11-21 09:10 | 只看该作者
奇怪,你的数组是字符吧,为何没信号?手机看不清楚。

使用特权

评论回复
7
Metalor|  楼主 | 2011-11-21 11:56 | 只看该作者
奇怪,你的数组是字符吧,为何没信号?手机看不清楚。
hotpower 发表于 2011-11-21 09:10


菜农是没引号吧
没引号是因为数组里面的字母是我自己定义的
头文件里有:#define 0x11 A
每个字母都有定义

使用特权

评论回复
8
Metalor|  楼主 | 2011-11-21 11:57 | 只看该作者
他其实就是一个数,而不是字符

使用特权

评论回复
9
Metalor|  楼主 | 2011-11-21 11:58 | 只看该作者
牛人就是牛人啊  很是速度……
watch186 发表于 2011-11-21 09:07


每天上班,都没时间
这没什么难的啊,之前51用过,驱动移植一下就好了,花不了多少时间

使用特权

评论回复
10
Metalor|  楼主 | 2011-11-21 12:11 | 只看该作者
有点乱
其实这个问题最终的原因还是因为我犯2,搞出一些不该出现的诡异事情

再说一遍:
比如我定义0x11为A,当我要在LCD显示字符A时发个0x11过去就行了,此时0x11就是A,A就是0x11
然而还有个东西叫‘A’,加了引号的A,大家都明白‘A’代表的数据是0x41
我的问题就是我把我自己定义的A和系统中的‘A’搞混了。。。
不知大家有没有明白

说来说去还是引用以前写的驱动的问题,自己回去改改就可以通用了,不用搞出两个A。。

使用特权

评论回复
11
Metalor|  楼主 | 2011-11-21 12:12 | 只看该作者
楼上是对之前无法显示字符串的解释,希望对大家有益

但是数组的问题依旧没有答案。。。求解释

使用特权

评论回复
12
hotpower| | 2011-11-21 14:44 | 只看该作者
刚看明白,字符数组是不会有结尾的,字符串是自动加结尾的。故本题应该手动加结尾符。

使用特权

评论回复
13
Metalor|  楼主 | 2011-11-21 16:09 | 只看该作者
这样啊~~还真不了解~
谢菜农!

使用特权

评论回复
14
Metalor|  楼主 | 2011-11-21 20:45 | 只看该作者
综合这两天的努力,代码优化了不少。。已重新在1L添加附件
1. 优化LCD驱动,发送字符串方法更简洁。
2.加入流水灯功能,虽有硬件冲突,但还算能正常运行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

224

帖子

1

粉丝