数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 5103|回复: 31

[C51] ILI9225主控芯片的176*220并口TFT/LCD彩屏C51驱动程序

[复制链接]
发表于 2022-11-27 17:11:05 | 显示全部楼层 |阅读模式
近来有空逛一下隔壁老王的淘宝店,发现了这么一个便宜的 TFT彩色屏幕,只要2块9一片。看着是有资料的。于是下手了几十片。


看资料知道这个屏幕尺寸是两英寸,分辨率是176×220。用的主控芯片是ILI9225。是20P1.0mm的焊接的引脚。宝贝介绍里面有引脚资料。


在隔壁老王的 QQ群里面有这个屏幕的驱动。但是下载的时候不知道为什么没有办法点亮屏幕。问了群友,他们说是正常的。后来花了一上午的时间仔细看了代码。发觉定位打点的函数有点问题。改正以后终于可以正常显示了。把资料上传到论坛上有个备份,以后找不到驱动了,可以在网站上下载。同时也分享给各位朋友,如果有需要的话,隔壁老王家的这个屏幕还是值得入手的。手慢就没有了。

我是用自己做的STC8H3K64S2- TTSOP20封装,20个管脚单片机33M主频来驱动的,并口的刷新速度还可以,只是要做产品的话,最少要用到3块5以上的32个管脚单片机的。驱动这个液晶屏,总共需要13个管脚。这个TTSOP20封装,20个管脚单片机有15个管脚,还剩余2个起不了什么作用。


总体来讲,这个便宜的显示器显示的颜色还算比较鲜艳。
只要改一下管脚资料,需要有一个完整的8位并口加5根任意io口。基本上大部分单片机都可以驱动。

首先显示一幅美女图片。


另外显示16×16汉字,各种颜色可以随意调节,比黑白屏的确好多了。


16×16 24×24.汉字显示。




单个ASCII字符显示。


英文字符串显示。


阿拉伯数字显示。


新鲜水果图片显示。一幅图片就差不多50K,对于64KB的单片机来讲有点吃力。如果需要引用驱动程序,请把图片数据去掉。



各种单纯的颜色刷屏。






画线画框画圆,测试。



不同颜色的文字,花里胡哨的效果。


虽然分辨率比较低,但是实际用眼看的效果是非常不错的,只是手机拍出来图片经过放大。拍成特写,就有很强的颗粒感。实际上在30公分以上看的话就没有颗粒感。

驱动下载:

本帖子中包含更多资源

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

x

打赏

参与人数 6家元 +267 收起 理由
q88888888 + 47 優秀文章
玛德陛下 + 20 謝謝分享
kkdkj + 20 謝謝分享
家睦 + 160
jpdd521 + 10 原創內容
nokia5320 + 10

查看全部打赏

发表于 2024-10-27 13:28:45 来自手机浏览器 | 显示全部楼层
lvgl搞起来
回复 支持 反对

使用道具 举报

发表于 2024-10-27 06:59:12 来自手机浏览器 | 显示全部楼层
深山老妖 发表于 2022-12-5 23:08
把你要写入的位置先读回来,再与你要写的内容进行或运算,然后再写进去。 ...

我也是这么想的,但是读出屏幕的程序,没有成功,就连读出屏幕ID,也没有成功,不知道什么原因。(屏幕是ILI9341的)
回复 支持 反对

使用道具 举报

发表于 2024-10-26 07:11:05 来自手机浏览器 | 显示全部楼层
2寸彩色屏幕做啥都好看
回复 支持 反对

使用道具 举报

发表于 2024-9-13 09:09:19 | 显示全部楼层
数控屏驱动,学习了,感谢分享
回复 支持 反对

使用道具 举报

发表于 2023-8-21 14:12:21 来自手机浏览器 | 显示全部楼层
手上有这个屏都没怎么用
回复 支持 反对

使用道具 举报

发表于 2023-8-18 15:26:29 | 显示全部楼层
xueyeteng 发表于 2023-8-18 15:21
是不是可以只修改字符所在像素的颜色?我记得一般彩屏驱动里都有这个功能。 ...

完全可以!
以下是原子的例程代码你对比一下就能明白(叠加方式还是非叠加方式):

//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{                                                            
    u8 temp,t1,t;
        u16 y0=y;
        u16 colortemp=POINT_COLOR;                                   
        //设置窗口                  
        num=num-' ';//得到偏移后的值
        if(!mode) //非叠加方式
        {
            for(t=0;t<size;t++)
            {   
                        if(size==12)temp=asc2_1206[num][t];  //调用1206字体
                        else temp=asc2_1608[num][t];                 //调用1608字体                                   
                for(t1=0;t1<8;t1++)
                        {                            
                        if(temp&0x80)POINT_COLOR=colortemp;
                                else POINT_COLOR=BACK_COLOR;
                                LCD_DrawPoint(x,y);       
                                temp<<=1;
                                y++;
                                if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
                                if((y-y0)==size)
                                {
                                        y=y0;
                                        x++;
                                        if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
                                        break;
                                }
                        }           
            }   
        }else//叠加方式
        {
            for(t=0;t<size;t++)
            {   
                        if(size==12)temp=asc2_1206[num][t];  //调用1206字体
                        else temp=asc2_1608[num][t];                 //调用1608字体                                   
                for(t1=0;t1<8;t1++)
                        {                            
                        if(temp&0x80)LCD_DrawPoint(x,y);
                                temp<<=1;
                                y++;
                                if(x>=lcddev.height){POINT_COLOR=colortemp;return;}//超区域了
                                if((y-y0)==size)
                                {
                                        y=y0;
                                        x++;
                                        if(x>=lcddev.width){POINT_COLOR=colortemp;return;}//超区域了
                                        break;
                                }
                        }           
            }     
        }
        POINT_COLOR=colortemp;                                          
}   
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-18 15:21:06 | 显示全部楼层
本帖最后由 xueyeteng 于 2023-8-18 15:27 编辑
深山老妖 发表于 2022-12-5 23:08
把你要写入的位置先读回来,再与你要写的内容进行或运算,然后再写进去。 ...

是不是可以只修改字符所在像素的颜色?我记得一般彩屏驱动里都有这个功能。

下边这段代码供参考
  1. for(pos=0;pos<size;pos++)
  2.                         {
  3. temp=asc2_1608[num][pos];                 //调用1608字体
  4.                                 for(t=0;t<size/2;t++)
  5.                                 {   
  6. if(temp&0x01)LCD_DrawPoint(x+t,y+pos,fc);//画一个点 LCD_DrawPoint在指定XY坐标处用fc颜色画点
  7.                                         temp>>=1;
  8.                                 }
  9.                         }
复制代码


回复 支持 反对

使用道具 举报

发表于 2023-8-18 09:54:50 | 显示全部楼层
lijn 发表于 2022-12-3 20:55
网上找的这个程序是汇编的,大神级别的就不用看了。我的想法是在背景显示图片的时候,字体加在上面,只显 ...

字符打点时,“1” 打上前景色,“0”不操作跳过,就不会有底色了。
回复 支持 反对

使用道具 举报

发表于 2023-6-11 18:33:19 来自手机浏览器 | 显示全部楼层
玩屏容易上瘾啊
回复 支持 反对

使用道具 举报

发表于 2023-1-4 20:49:34 | 显示全部楼层
真好,谢谢分享!!
回复 支持 反对

使用道具 举报

发表于 2023-1-2 08:26:38 | 显示全部楼层
我好象也有两片彩屏,看来也得弄出来折腾一下了
回复 支持 反对

使用道具 举报

发表于 2022-12-31 22:56:06 | 显示全部楼层
好功夫,谢谢分享
回复 支持 反对

使用道具 举报

发表于 2022-12-5 23:08:27 | 显示全部楼层
lijn 发表于 2022-11-30 22:00
如果背景是一张照片,要在照片上只显示字,不显示背景,怎么处理。

把你要写入的位置先读回来,再与你要写的内容进行或运算,然后再写进去。
回复 支持 反对

使用道具 举报

发表于 2022-12-4 14:27:00 | 显示全部楼层
2寸屏幕做啥都好看
回复 支持 反对

使用道具 举报

发表于 2022-12-4 11:39:02 | 显示全部楼层
好奇这个的使用场景是什么样的呀?
回复 支持 反对

使用道具 举报

发表于 2022-12-3 20:55:25 | 显示全部楼层
桃源客 发表于 2022-12-1 19:32
这个肯定你的驱动程序可以设显示背景的。你这个显示“测”字肯定是用了蓝字绿背景的。你要发驱动程序源码 ...

网上找的这个程序是汇编的,大神级别的就不用看了。我的想法是在背景显示图片的时候,字体加在上面,只显示字体,不显示字体的背景,如图所示。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2022-12-3 11:13:22 | 显示全部楼层
不知道怎么用它
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-20 00:56 , Processed in 0.249601 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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