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

[复制链接]
3508|13
 楼主| Metalor 发表于 2011-11-20 17:38 | 显示全部楼层 |阅读模式
本帖最后由 Metalor 于 2011-11-21 20:43 编辑

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


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




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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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吧?
watch186 发表于 2011-11-21 09:07 | 显示全部楼层
牛人就是牛人啊  很是速度……
hotpower 发表于 2011-11-21 09:10 | 显示全部楼层
奇怪,你的数组是字符吧,为何没信号?手机看不清楚。
 楼主| Metalor 发表于 2011-11-21 11:56 | 显示全部楼层
奇怪,你的数组是字符吧,为何没信号?手机看不清楚。
hotpower 发表于 2011-11-21 09:10


菜农是没引号吧
没引号是因为数组里面的字母是我自己定义的
头文件里有:#define 0x11 A
每个字母都有定义
 楼主| Metalor 发表于 2011-11-21 11:57 | 显示全部楼层
他其实就是一个数,而不是字符
 楼主| Metalor 发表于 2011-11-21 11:58 | 显示全部楼层
牛人就是牛人啊  很是速度……
watch186 发表于 2011-11-21 09:07


每天上班,都没时间
这没什么难的啊,之前51用过,驱动移植一下就好了,花不了多少时间
 楼主| Metalor 发表于 2011-11-21 12:11 | 显示全部楼层
有点乱
其实这个问题最终的原因还是因为我犯2,搞出一些不该出现的诡异事情

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

说来说去还是引用以前写的驱动的问题,自己回去改改就可以通用了,不用搞出两个A。。
 楼主| Metalor 发表于 2011-11-21 12:12 | 显示全部楼层
楼上是对之前无法显示字符串的解释,希望对大家有益

但是数组的问题依旧没有答案。。。求解释
hotpower 发表于 2011-11-21 14:44 | 显示全部楼层
刚看明白,字符数组是不会有结尾的,字符串是自动加结尾的。故本题应该手动加结尾符。
 楼主| Metalor 发表于 2011-11-21 16:09 | 显示全部楼层
这样啊~~还真不了解~
谢菜农!
 楼主| Metalor 发表于 2011-11-21 20:45 | 显示全部楼层
综合这两天的努力,代码优化了不少。。已重新在1L添加附件
1. 优化LCD驱动,发送字符串方法更简洁。
2.加入流水灯功能,虽有硬件冲突,但还算能正常运行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

224

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部