搜索
bottom↓
回复: 7

64*32点阵屏测试视频,有问题求助

[复制链接]

出0入0汤圆

发表于 2015-8-25 00:10:31 | 显示全部楼层 |阅读模式
本帖最后由 zhou19852 于 2015-8-25 09:45 编辑

     最近没事想着做个点阵屏玩玩,以下为测试视频,程序模块化,基本每个C文件可以单独移植和使用,芯片驱动、字体等都独立,可以移植到其它如12864、oled等显示屏。前提是要有显存区和画点函数即可,这样做的好处就是你想干嘛就干嘛,翻页、各种移动都比较好处理,字体支持字库芯片和自定义字体,自定义字体可以直接在程序函数中写字符就可以,红外遥控,手机蓝牙可以直接控制和设置数据,手机蓝牙可以直接输入汉字存储并显示,还有多个分区移动、窗口剪切、频谱、表盘时钟、定制的语音芯片,报时,生日祝福,铃声都有,自动亮度调节。后面准备用黑茶色透光的亚克力做个外壳,不知哪里会有便宜的卖。各个程序和框架已经做好,就等细致处理了,其实菜单框架做好,每一个页面就相当于一个程序,这样可以写很多不同功能,根本不用担心单片机忙不过来,每个页面里面循环,返回的时候直接切换页面就好。
      现在有个问题需要解决一下,在是在流动显示信息的时候,有个问题需要解决,比如直接显示字符很容易,全是常量,关键是如显示:今天是2015年8月24日等等,中文字符是常量,日期、时间等动态信息是变量,函数入口就是个*String指针,常规的做法是定义一个数组,将中文字符赋值给相应位置,动态数据也更新到相应位置,然后把该数组的地址作为参数传给String就可以了,但是显示数据较多较长的话,该数组将非常的大,而且各个数据的位置不能变,这样不仅占内存还不那么灵活,不知道大家一般怎么处理的,有没有更好的办法?我试过用**p来做,将中文字符和变量的地址放到一个指针数组,通过指针数组来来连接这些数据,但是失败了。http://v.youku.com/v_show/id_XMTMxODM2NDc4NA==.html

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2015-8-25 09:32:44 | 显示全部楼层
LZ分区滚动怎么弄的啊?没思路。

出0入0汤圆

 楼主| 发表于 2015-8-25 09:57:16 | 显示全部楼层
本帖最后由 zhou19852 于 2015-8-25 10:03 编辑
jesen_2010 发表于 2015-8-25 09:32
LZ分区滚动怎么弄的啊?没思路。


分区移动:要想各个区域的移动互不干扰,那么移位程序就不能死循环,移动一个字的一位后必须跳出来,去执行下个区的移位。每个区的移位时间不同,所以每次进去以后先判断移位时间是否到,没到就跳出,这样移位程序的关键变量都要设置为static。同时,有几个区就得有几个移位函数,因为不能重入,试过KEIL的重入关键字,不能实现,不知道为什么。分区最好按整字节分区,这样处理方便,移位仅是将显示数据写到分区末字节的低位,然后移动,所以每次只需要一个字节获取即将写入的数据,将这个数据的高位写到分区末字节的低位,然后移动,至于颜色、移动暂停都比较好处理。上下移动一样的原理
对了,要是移位中途退出了,那么退出前必须再调用一下移位函数,进去主要是复位各个控制变量,不然下次进入的时候还保持上次的值,显示初期会乱。

出0入0汤圆

发表于 2015-8-25 10:28:50 | 显示全部楼层
zhou19852 发表于 2015-8-25 09:57
分区移动:要想各个区域的移动互不干扰,那么移位程序就不能死循环,移动一个字的一位后必须跳出来,去执 ...

我的显存是一个点对应一个字节,bit0用于控制显示与不显示,bit1-7 =0为黑色,=1为红色,=2为绿色,=3为橙色,  所以我如果要实现往左滚动的话,就不能移位,只能对缓冲区的数组进行处理,感觉不好处理,始终感觉这块弄复杂了。各分区独立移动用多任务处理。你是怎么定义一个点显示的呢?   

出0入0汤圆

 楼主| 发表于 2015-8-25 11:37:03 | 显示全部楼层
jesen_2010 发表于 2015-8-25 10:28
我的显存是一个点对应一个字节,bit0用于控制显示与不显示,bit1-7 =0为黑色,=1为红色,=2为绿色,=3为 ...

我个人觉得每个点的显示与关闭不应该在点的数据位上设置开关,应该以颜色控制,双色点阵能显示4种色,红绿黄黑,这里的黑就是关闭点了。你能每个点用一个字节,那么你单片机RAM肯定大,你多半用的STM的芯片。既然能显示4种色,那么2个BIT就可以控制一个点,8个点只要2个字节或者一个字就好了,每一位填什么颜色根据显示字符的数据来定。写点PrintDot(x,y,Color);你腰关闭,直接写入黑色。移位的话字符没移动移位,数据要移动两位才行。当然移位程序用写点来做的话比较慢,还是按字节来移动比较好。如果单片机速度快,可以改变字符串的显示坐标达到移动目的,而且很灵活。

出0入0汤圆

 楼主| 发表于 2015-8-25 11:38:17 | 显示全部楼层
jesen_2010 发表于 2015-8-25 10:28
我的显存是一个点对应一个字节,bit0用于控制显示与不显示,bit1-7 =0为黑色,=1为红色,=2为绿色,=3为 ...

我个人觉得每个点的显示与关闭不应该在点的数据位上设置开关,应该以颜色控制,双色点阵能显示4种色,红绿黄黑,这里的黑就是关闭点了。你能每个点用一个字节,那么你单片机RAM肯定大,你多半用的STM的芯片。既然能显示4种色,那么2个BIT就可以控制一个点,8个点只要2个字节或者一个字就好了,每一位填什么颜色根据显示字符的数据来定。写点PrintDot(x,y,Color);你腰关闭,直接写入黑色。移位的话字符没移动移位,数据要移动两位才行。当然移位程序用写点来做的话比较慢,还是按字节来移动比较好。如果单片机速度快,可以改变字符串的显示坐标达到移动目的,而且很灵活。

出0入0汤圆

 楼主| 发表于 2015-8-25 11:43:01 | 显示全部楼层
jesen_2010 发表于 2015-8-25 10:28
我的显存是一个点对应一个字节,bit0用于控制显示与不显示,bit1-7 =0为黑色,=1为红色,=2为绿色,=3为 ...

我个人觉得每个点的显示与关闭不应该在点的数据位上设置开关,应该以颜色控制,双色点阵能显示4种色,红绿黄黑,这里的黑就是关闭点了。你能每个点用一个字节,那么你单片机RAM肯定大,你多半用的STM的芯片。既然能显示4种色,那么2个BIT就可以控制一个点,8个点只要2个字节或者一个字就好了,每一位填什么颜色根据显示字符的数据来定。写点PrintDot(x,y,Color);你腰关闭,直接写入黑色。移位的话字符没移动移位,数据要移动两位才行。当然移位程序用写点来做的话比较慢,还是按字节来移动比较好。如果单片机速度快,可以改变字符串的显示坐标达到移动目的,而且很灵活。

出0入0汤圆

发表于 2015-9-4 18:42:09 | 显示全部楼层
zhou19852 发表于 2015-8-25 09:57
分区移动:要想各个区域的移动互不干扰,那么移位程序就不能死循环,移动一个字的一位后必须跳出来,去执 ...

keil要想用重入函数,必须在STARTUP.A51(好像是这个文件)作设置。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表