微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 会TFT128*160彩色显示屏的进来看看

会TFT128*160彩色显示屏的进来看看

时间:10-02 整理:3721RD 点击:
本人最近正在研究TFT液晶显示屏,弄了半天终于能显示图片了,可是到了显示汉字的时候就懵了,根本不知道怎么下手,希望哪位大侠能给具体讲解一下,越详细越好,本人有点小白!谢谢

汉字的显示和图片是一样的,就是每个汉字对应一个点阵,把每个点都显示出来就是汉字了。

恩,现在我有点明白了。
void TFT_SHOW_HZ()
{
        uchar x,y,i,flag,t1;
        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++)
                        {
                                t1=hz12[num];
                                flag=t1&0x01;
                                t1=t1>>1;
                                i++;
                                if(flag==0X01)
                                        TFT_WR_DOUB_DAT(0xF800);
                                else
                                        TFT_WR_DOUB_DAT(0x001F);
                                if(i==7)
                                        {
                                                i=0;
                                                num++;
                                        }                                                       
                        }
                                               
                }                       
}
程序中的t1为什么总是不变呢?

#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色/
        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的值总是跟着要写入的地址一样,求大神给解答一下,小弟现在此谢过了!急急急

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top