OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4068|回复: 2

ATmega16连接2.4寸TFT模块后只有白屏

[复制链接]

10

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2015-12-18
在线时间
73 小时
发表于 2016-3-28 15:23:05 | 显示全部楼层 |阅读模式
1金钱
搞了好几天了,液晶屏幕一直是白屏,程序就是给了一个基本的ILI9325控制和一个刷屏函数,至今不能实现刷屏,求大神帮助啊!!!以下是我的程序,硬件电路端口都借了10K的上拉电阻~~
#include <iom16v.h>  
#include <macros.h>
#include <TFT9325.h>

#define White          0xFFFF
#define Black          0x0000
#define Blue           0x001F
#define Blue2          0x051F
#define Red            0xF800
#define Magenta        0xF81F
#define Green          0x07E0
#define Cyan           0x7FFF
#define Yellow         0xFFE0

void delay_us(unsigned int n)
{
    while(n--)
          ;
}
void delay_ms(unsigned int n)
{
    unsigned int j;
        while(n--)
          for(j=0;j<1140;j++);
}

/*写一个命令到TFT控制器*/
void write_cmd(uchar CH,uchar CL)//CH,CL分别为命令字的高8位和低8位,指定要执行的命令。
{
        CS_0;
        RS_0;
        PORTA=CH;
        RW_0;
        RW_1;
        PORTA=CL;
        RW_0;
        RW_1;
        CS_1;
}
/*写一个数据到TFT控制器*/
void write_data(uchar DH,uchar DL)//DH,DL分别为数据字的高8位和低8位,指定要写入的数据
{
        CS_0;
        RS_1;
        PORTA=DH;
        RW_0;
        RW_1;
        PORTA=DL;       
        RW_0;
        RW_1;
        CS_1;
}
/*写命令数据到TFT控制器*/
void write_cmd_data (uchar cmd,uint dat)//cmd为要写入的命令字节;dat为要写入的16位数据。
{
        uchar m,n;
        m=dat>>8;
        n=dat;
        write_cmd(0x00,cmd);
        write_data(m,n);
}
void ILI9325_initial(void)
{
        CS_1;
        delay_ms(5);
        RST_0;
        delay_ms(5);
        RST_1;
        delay_ms(50);//可以适当调整延时,保障稳定显示
        write_cmd_data(0x0001,0x0100); //源扫描设置SS=0, 输出的移动方向是从S1到S720
        //(源扫描设置SS=1, 输出的移动方向是从S720到S1)
        //SM=0,逐行扫描(SM=1,隔行扫描)
        write_cmd_data(0x0002,0x0700); //B/C=1、EOR=1:行倒置(B/C=0:帧/场倒置)
        write_cmd_data(0x0003,0x1030); //AM=0,地址在水平方向自动加1
        //I/D[1:0] = 11:水平垂直方向均增加
        //BGR=1:采用BGR格式
        //TRI=0、DFM=*:8位机、两次数据传送
        write_cmd_data(0x0004,0x0000); //比例缩放设置:不缩放
        //显示控制
        write_cmd_data(0x0008,0x0207); //设置后边沿和前沿
        write_cmd_data(0x0009,0x0000);//设置非显示区时间间隔ISC[3:0]
        write_cmd_data(0x000A,0x0000); //帧标记功能
        write_cmd_data(0x000C,0x0000);//RGB显示接口控制1
        write_cmd_data(0x000D,0x0000);//帧标记位置
        write_cmd_data(0x000F,0x0000);//RGB显示接口控制2
        //电源配置
        write_cmd_data(0x0010,0x0000);   
        write_cmd_data(0x0011,0x0007);  
        write_cmd_data(0x0012,0x0000);  
        write_cmd_data(0x0013,0x0000);
        //vgh
        write_cmd_data(0x0010,0x1290);   
        write_cmd_data(0x0011,0x0227);
        //delayms(100);
        //vregiout
        write_cmd_data(0x0012,0x001d); //0x001b
        //delayms(100);
        //vom amplitude
        write_cmd_data(0x0013,0x1500);
        //delayms(100);
        //vom H
        write_cmd_data(0x0029,0x0018);
        write_cmd_data(0x002B,0x000D);
        //伽马校正
        write_cmd_data(0x0030,0x0004);
        write_cmd_data(0x0031,0x0307);
        write_cmd_data(0x0032,0x0002);//0006
        write_cmd_data(0x0035,0x0206);
        write_cmd_data(0x0036,0x0408);
        write_cmd_data(0x0037,0x0507);
        write_cmd_data(0x0038,0x0204);//0200
        write_cmd_data(0x0039,0x0707);
        write_cmd_data(0x003C,0x0405);//0504
        write_cmd_data(0x003D,0x0F02);
        //窗口设置
        write_cmd_data(0x0050,0x0000);//水平起始位置
        write_cmd_data(0x0051,0x00EF);//水平终止位置
        write_cmd_data(0x0052,0x0000);//垂直起始位置
        write_cmd_data(0x0053,0x013F);//垂直终止位置
        write_cmd_data(0x0060,0xA700);//门扫描设置,GS=1:从G320扫描到G1,320线
        write_cmd_data(0x0061,0x0001);
        write_cmd_data(0x006A,0x0000);
        write_cmd_data(0x0080,0x0000);
        write_cmd_data(0x0081,0x0000);
        write_cmd_data(0x0082,0x0000);
        write_cmd_data(0x0083,0x0000);
        write_cmd_data(0x0084,0x0000);
        write_cmd_data(0x0085,0x0000);
        write_cmd_data(0x0090,0x0010);
        write_cmd_data(0x0092,0x0600);
        write_cmd_data(0x0093,0x0003);
        write_cmd_data(0x0095,0x0110);
        write_cmd_data(0x0097,0x0000);
        write_cmd_data(0x0098,0x0000);
        write_cmd_data(0x0007,0x0133);
        //write_cmd_data(0x0022);               
}
/*写一个16位数据到TFT控制器*/
void write_data_u16(uint dat)//入口参数: dat为要写入的16位数据。
{
        uchar m,n;
        m=dat>>8;
        n=dat;
        write_data(m,n);
}
/*设置TFT模块的显示窗口*/
void LCD_setwindow(uchar x0,uint y0,uchar x1,uint y1)//入口参数: x0 y0,为显示窗口左上角坐标;x1,y1为显示窗口右下角坐标。
{
        write_cmd_data(WINDOW_XADDR_START,x0);//水平起始位置
        write_cmd_data(WINDOW_XADDR_END,x1);//水平终止位置
        write_cmd_data(WINDOW_YADDR_START,y0);//垂直起始位置
        write_cmd_data(WINDOW_YADDR_END,y1);//垂直终止位置
        write_cmd_data(GRAM_XADDR,x0);//设置X坐标位置
        write_cmd_data(GRAM_YADDR,y0);//设置Y坐标位置
        write_cmd(0x00,0x22);//LCD_WriteCMD(GRAMWR);
}
/*设定当前显示坐标*/
//说明:本函数实际上是LCD_setwindow函数的一个特例,显示窗口为最小,仅是一个像素点。
void LCD_setxy(uchar x,uint y)//x,y为当前显示坐标
{
        LCD_setwindow(x,y,x,y);       
}
/*清屏*/
void GUI_clearscreen(uint b_color)//b_color是背景颜色
{
uint i,j;
LCD_setwindow(0,0,240,320);
for (i=0;i<320;i++)
{
  for(j=0;j<240;j++)
  write_data_u16(b_color);
}
}

void main(void)
{
DDRA=0XFF;
DDRC|=0XF0;
ILI9325_initial();
delay_ms(20);
GUI_clearscreen(Blue);
while(1);
}

最佳答案

查看完整内容[请看2#楼]

先确认下屏是不是好的.
无话可说
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-3-28 15:23:06 | 显示全部楼层
先确认下屏是不是好的.
回复

使用道具 举报

10

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2015-12-18
在线时间
73 小时
 楼主| 发表于 2016-3-31 22:55:24 | 显示全部楼层
正点原子 发表于 2016-3-29 21:46
先确认下屏是不是好的.

换了一个果然好了
无话可说
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 11:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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