会TFT128*160彩 {MOD}显示屏的进来看看

2019-07-15 19:03发布

本人最近正在研究TFT液晶显示屏,弄了半天终于能显示图片了,可是到了显示汉字的时候就懵了,根本不知道怎么下手,希望哪位大侠能给具体讲解一下,越详细越好,本人有点小白!谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
来自远方
2019-07-16 06:27
#include<reg52.h>
#include"MN.h"
#include"hz.h"
//#include"chinese.h"
#define TFT_DAT P0
#define uchar unsigned char

sbit TFT_CS = P2^1;
sbit RS = P2^2;
sbit EN = P2^3;
sbit RD1 = P2^4;

void  delay(unsigned int t)
{
       
        unsigned int n,m;
        for(n=0;n<t;n++)
                for(m=0;m<127;m++);
}

void TFT_WR_SING_COMM(uchar n1)//写入单字节命令
{
        RS = 0;//低电平写入的为命令

        TFT_CS = 0;//选中TFT显示屏
        TFT_DAT = n1;

        EN = 0;                        //WR的上升沿写入数据

        EN = 1;
        TFT_CS = 1;                       
}

void TFT_WR_DOUB_COMM(uchar x1,uchar y1) //写入两个字节的命令
{
        TFT_WR_SING_COMM(x1);
        TFT_WR_SING_COMM(y1);
}

void TFT_WR_SING_DAT(uchar dat)
{

        RS = 1;//高电平写入的为数据
        TFT_CS = 0;//选中TFT显示屏
        TFT_DAT = dat;       
        EN = 0;                        //WR的上升沿写入数据
        EN = 1;
        TFT_CS = 1;               
}

void TFT_WR_DOUB_DAT(unsigned int dat)
{
        RS = 1;//高电平写入的为数据
        TFT_CS = 0;//选中TFT显示屏
        TFT_DAT = (uchar)(dat);       
        EN = 0;                        //WR的上升沿写入数据
        EN = 1;
        TFT_CS = 1;
       
        RS = 1;//高电平写入的为数据
        TFT_CS = 0;//选中TFT显示屏
        TFT_DAT = (uchar)(dat>>8);       
        EN = 0;                        //WR的上升沿写入数据
        EN = 1;
        TFT_CS = 1;                       
}

void TFT_INIT(void)                   //初始化TFT显示屏
{

        TFT_WR_SING_COMM(0X2C);//待命模式OFF
        TFT_WR_DOUB_COMM(0x02,0x01); //设置TFT显示屏晶振
        TFT_WR_DOUB_COMM(0X10,0X26);//设置TFT显示屏输出扫描方式
        TFT_WR_DOUB_COMM(0X18,0X00);//设置TFT显示屏的显示信号....................
        TFT_WR_DOUB_COMM(0X20,0X0F);// 电源模式DC-DC
        TFT_WR_DOUB_COMM(0X22,0X11);//偏离设置............
        TFT_WR_DOUB_COMM(0X24,0X01);//时钟分频设置                         
                         
        TFT_WR_DOUB_COMM(0X26,0X0F);//放大器升压
        TFT_WR_DOUB_COMM(0X28,0X00);//温度补偿斜率
        TFT_WR_DOUB_COMM(0X2A,0X9F);//对比度1..............
        TFT_WR_DOUB_COMM(0X2B,0X98);//对比度2...........
        TFT_WR_DOUB_COMM(0X30,0X0D);//选择65535 {MOD}/
        TFT_WR_DOUB_COMM(0X32,0X0E);//行矢量设置...........
        TFT_WR_DOUB_COMM(0X34,0X05);//N-BLOCK INVERSATION SET.....
        TFT_WR_DOUB_COMM(0X36,0X00);//框架频率设置
        TFT_WR_DOUB_COMM(0X40,0X00);//总线模式/

        TFT_WR_DOUB_COMM(0X53,0X00);//TFT显示模式
        TFT_WR_DOUB_COMM(0X32,0X00);//行矢量设置...........

        TFT_WR_SING_COMM(0x42);//设置X地址
        TFT_WR_DOUB_COMM(0X00,0X9F);
        TFT_WR_SING_COMM(0x43);//设置Y地址
        TFT_WR_DOUB_COMM(0X04,0X83);

        TFT_WR_SING_COMM(0X51);//开TFT显示屏
}

void TFT_SHOW_PIC()        //显示图片
{
        uchar x,y;
        unsigned int num;
        for(x=0;x<160;x++)
                {
                        for(y=0;y<128;y++)
                        {
                                TFT_WR_SING_DAT(gImage_a[num]);
                                TFT_WR_SING_DAT(gImage_a[num+1]);
                                num=num+2;                       
                        }
                                               
                }
}

void TFT_SHOW_HZ()
{
        uchar x,y,i,flag,x1;
        unsigned int num = 0;
        TFT_WR_SING_COMM(0x42);//设置X地址
        TFT_WR_DOUB_COMM(0X32,0X3E);
        TFT_WR_SING_COMM(0x43);//设置Y地址
        TFT_WR_DOUB_COMM(0X0A,0X16);

        for(x=50;x<62;x++)
                {
                        for(y=10;y<22;y++)
                        {
                                x1=hz12[num];
                                flag=x1&0x01;
                                x=x>>1;
                                i++;
                                if(flag==0X01)
                                        TFT_WR_DOUB_DAT(0xF800);
                                else
                                        TFT_WR_DOUB_DAT(0x001F);
                                if(i==7)
                                        {
                                                i=0;
                                                num++;
                                        }                                                       
                        }
                                               
                }                       
}
这是整个程序,但是不知道为什么t1和flag的值总是跟着要写入的地址一样,求大神给解答一下,小弟现在此谢过了!!急急急

一周热门 更多>