相对来说,低性能的嵌入式竖李用 framebuffer 更好。如果性能好可以用 X 服务实现图形显示。前者基于内核的显示驱动,后者肆纤轮看 X 服务的驱动了。
X 服务可以跑很多软件不需要重新开发,但 c/s 架构效率不是很好。
framebuffer 是软件直接 *** 作硬件的存储器,性能实现比较好。但很多功能都要自己写代码实现。
显裂信示图片在 fb 里面我要是没记错,就是把图片解码成你的软件支持的格式,之后把这部分数据写入 fb 内存。
怎么弄就别找我了。建议看看相关的开发文章。
还有就是 QT 库本身就有直接 fb 输出的函数库,GTK 似乎也有,但目前好像还不是完全可用。用他们作为过渡函数库还不错的。但要注意他们的软件协议!
楼主可以参考这个程序,只要稍微修改一下端口或参考一些函数即可,希望对您有用,有什么问题的话可以问我~~#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//这三个引脚参考资料
sbit E=P2^7 //1602使能引脚
sbit RW=P2^6 //1602读写引脚
sbit RS=P2^5 //1602数据/命令选择引脚
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为140US。拆厅
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay()
{
int i,j
for(i=0i<=100i++)
for(j=0j<=20j++)
}
/********************************************************************
* 名称 : enable(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void enable(uchar del)
{
P0 = del
RS = 0
RW = 0
E = 0
delay()
E = 1
delay()
}
/********************************************************************
* 名称 : write(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入旅宏隐1602的绝御数据
* 输出 : 无
***********************************************************************/
void write(uchar del)
{
P0 = del
RS = 1
RW = 0
E = 0
delay()
E = 1
delay()
}
/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)
{
enable(0x01)
enable(0x38)
enable(0x0c)
enable(0x06)
enable(0xd0)
}
/********************************************************************
* 名称 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a
if(hang == 1) a = 0x80
if(hang == 2) a = 0xc0
a = a + lie - 1
enable(a)
write(sign)
}
/********************************************************************
* 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef")
* 输入 : 行,列,需要输入1602的数据
* 输出 : 无
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
uchar a
if(hang == 1) a = 0x80
if(hang == 2) a = 0xc0
a = a + lie - 1
enable(a)
while(1)
{
if(*p == '\0') break
write(*p)
p++
}
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
uchar i = 48
L1602_init()
L1602_char(1,5,'b')
L1602_string(1,1," 0123456789 ")
L1602_string(2,1," ABCDEDGHIJ ")
while(1)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)