找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

uc1698u芯片驱动160*160屏 请教各位帮忙看下为啥第一位数据是错的?

查看数: 2909 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-6-25 18:14

正文摘要:

驱动个160*160的黑白屏,用的uc1698u芯片,采用16位彩色数据格式,必须两个8位才能驱动三个像素点,想让屏显示一个160*160的图片,网上找了很久没有找到相关程序,只能自己啃手册 程序如下: static unsigned ...

回复

ID:1010435 发表于 2023-6-26 20:19
xxxevery 发表于 2023-6-26 16:27
问题应该就出在 picdata = (pic[0]

你这个方法是对的,我用的Keil5,加上(unsigned long)后正常了。
ID:1010435 发表于 2023-6-26 16:55
人中狼 发表于 2023-6-26 16:35
void data8bit(unsigned char dat)有问题,而且你好像没搞清楚pic[]数组和2字节颜色数据的关系,看你的描述 ...

这个data8bit函数我是验证过的,给data8bit函数赋值0x00~0x07 屏幕上三个像素点按000 001 010 011 100 101 110 111(1代表亮,0代表灭)分别能正常显示。
ID:384109 发表于 2023-6-26 16:35
void data8bit(unsigned char dat)有问题,而且你好像没搞清楚pic[]数组和2字节颜色数据的关系,看你的描述也没描述清楚
ID:1010435 发表于 2023-6-26 16:30
Hephaestus 发表于 2023-6-26 15:39
如果是unsigned显然会是0。

有鉴于你没有写unsigned,高8位是符号扩展,如果char最高位是0,那么高八 ...

明白了 我再试试
ID:59202 发表于 2023-6-26 16:27
问题应该就出在 picdata = (pic[0] << 16) | (pic[1] << 8) | pic[2]; 这一行程序上,pic[0]、pic[1]是一个8位无符号数,你把它左移16和8位,本身就是一个非常规操作,不同编译器会有不同的解释操作,非常容易得到不是你想象的结果。你可以试试改成这样
picdata = ((unsigned long)pic[0] << 16) | ((unsigned long)pic[1] << 8) | pic[2];
ID:883242 发表于 2023-6-26 15:39
mtt661 发表于 2023-6-26 12:59
另外再请教一下,8位的单片机,
如果变量
char a=0xff;

如果是unsigned显然会是0。

有鉴于你没有写unsigned,高8位是符号扩展,如果char最高位是0,那么高八位全0;如果char最高位是1,那么高八位全1,表示负数。随便举个栗子,char类型0xfe表示-2,那么扩展到int类型就是0xfffe,同样表示-2。
ID:1010435 发表于 2023-6-26 12:59
另外再请教一下,8位的单片机,
如果变量
char a=0xff;
int b;
b=a;
这个时候b应该是两个字节,那么b的高八位全是0吗?
ID:1010435 发表于 2023-6-26 12:53
yzwzfyz 发表于 2023-6-26 11:12
走单步慢慢调试吧。也不知道【显示不正常】长什么样子。

这样说pic[0],pic[1],pic[2],每个字节8位,控制了3*8=24个像素点的亮和灭,上面的程序只能让9~24位置的像素点正常显示,而1~8位显示时乱的,不是p[0]的值。
ID:123289 发表于 2023-6-26 11:12
走单步慢慢调试吧。也不知道【显示不正常】长什么样子。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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