智能车制作

标题: TFT屏模块问题!51的程序改造为飞思卡尔时codewarrior不认.... [打印本页]

作者: dessertfox    时间: 2013-2-10 10:11
标题: TFT屏模块问题!51的程序改造为飞思卡尔时codewarrior不认....
[attach]40778[/attach][attach]40777[/attach]
首先解释下:本人第一次使用TFT屏。看完了网上流传较多的王伟民视频,只有一点点基础。在此请各路大侠多多指教哈~
第二介绍下我的触摸屏和单片机开发板的型号;触摸屏:主控芯片ILI9325,触摸芯片XPT2046(我就用显示和触摸)。
我的单片机开发板是飞思卡尔MCS08J60CLD。

其次说下我遇到的问题:
1、从sbit 定义开始,每一行sbit都报错,//掉一行,下一行报错。但sbit是有的啊;
2、那个unsigned char zifu code[]的一段也说不符合语法;去掉之后还是不能生成obj

求各路大神指点小弟迷津啊......新年各种快乐啊.......



作者: glacier0    时间: 2013-2-10 11:25
飞思卡尔可以sbit么?。

作者: lsdoo·    时间: 2013-2-10 13:36
没有sbit吧……zifu code中间的空格干什么的…………
作者: suebillt    时间: 2013-2-10 14:08
灰丝卡尔用define吧
作者: qurrer    时间: 2013-2-10 15:09
一个一个子函数编译一下,一下编译太多找错很麻烦
作者: dessertfox    时间: 2013-2-10 15:33
glacier0 发表于 2013-2-10 11:25
飞思卡尔可以sbit么?。

我好像在头文件里搜到了sbit(我的是v10.1),那请问应该用哪个咧哈?

作者: dessertfox    时间: 2013-2-10 15:38
suebillt 发表于 2013-2-10 14:08
灰丝卡尔用define吧

是#define宏定义吗?谢谢
作者: dessertfox    时间: 2013-2-10 15:39
lsdoo· 发表于 2013-2-10 13:36
没有sbit吧……zifu code中间的空格干什么的…………

额.....好像是的.....谢谢哈~


作者: dessertfox    时间: 2013-2-10 15:45
qurrer 发表于 2013-2-10 15:09
一个一个子函数编译一下,一下编译太多找错很麻烦

哦好的谢谢,但还有一个问题我在另一个TFT彩屏程序采用调用驱动程序的方法来编程。但用include头文件时总是报错。我已经把LCM(驱动程序)和GUI(用户界面)的头文件和.c程序都拷到目录下了,刷新也都显示了,但最后#include头文件时报错说找不到头文件(我的是codewarrior v10.1)。这个困扰我好久了,谢谢大神求指点啊.....
作者: qurrer    时间: 2013-2-10 18:30
dessertfox 发表于 2013-2-10 15:45
哦好的谢谢,但还有一个问题我在另一个TFT彩屏程序采用调用驱动程序的方法来编程。但用include头文件时总 ...

由于你的错误类型不清楚只能猜测,可能是头文件重复包含了试用这种语句写头文件#ifndef X   //X为标识符,保持唯一,一般比如 #ifndef _INCLUDE_XXXXXX_H_
#define X

//这里是你的头文件

#endif
作者: dessertfox    时间: 2013-2-10 21:16
qurrer 发表于 2013-2-10 18:30
由于你的错误类型不清楚只能猜测,可能是头文件重复包含了试用这种语句写头文件#ifndef X   //X为标识符, ...

[attach]40782[/attach]大神,我已经按照您的建议一点一点调试了,把所有子程序、头文件都写在一个main.c里面,没有错误。但上电之后,屏幕只是亮,并未因程序产生任何动作,下面是我的代码。请见附件。谢谢


作者: suebillt    时间: 2013-2-10 23:34

作者: 机遇    时间: 2013-2-11 13:50
初始化函数你注销了最后一行   是不是不能注销的 ?
作者: bcmissrain    时间: 2013-2-11 15:29
hello,今天又看了下关于白屏的问题,有两个帖子有些参考价值:
1.TFT在上电后,电压有一个稳定过程,如果TFT供电电压没有稳定,MCU就和他通信,就会出现问题。
解决方法:初始化前增加延时。具体内容参见http://www.amobbs.com/thread-5465737-1-1.html
2.对于单片机的晶振的要求较高,详见http://www.amobbs.com/thread-4021187-1-1.html的21楼,另外,34楼有提示注意的连接。
希望这些内容能有所帮助~


作者: qurrer    时间: 2013-2-11 16:44
dessertfox 发表于 2013-2-10 21:16
大神,我已经按照您的建议一点一点调试了,把所有子程序、头文件都写在一个main.c里面,没有错误。但上电 ...

你的程序我看了,显示函数之后直接进入死循环了,是不是应该把显示函数放在死循环里面。

作者: dessertfox    时间: 2013-2-11 17:16
qurrer 发表于 2013-2-11 16:44
你的程序我看了,显示函数之后直接进入死循环了,是不是应该把显示函数放在死循环里面。

放过,也是一个效果......
作者: dessertfox    时间: 2013-2-11 17:33
bcmissrain 发表于 2013-2-11 15:29
hello,今天又看了下关于白屏的问题,有两个帖子有些参考价值:
1.TFT在上电后,电压有一个稳定过程,如果 ...

谢谢,我这就去试试!
作者: dessertfox    时间: 2013-2-12 09:59
机遇 发表于 2013-2-11 13:50
初始化函数你注销了最后一行   是不是不能注销的 ?

这个....必须注释,那个函数有两个形参...........
作者: sdlibin007@qq.c    时间: 2013-2-12 17:43
呵呵,要是CW能识别sbit,那就逆天了,至少目前我还没发现啊
作者: dessertfox    时间: 2013-2-12 21:31
sdlibin007@qq.c 发表于 2013-2-12 17:43
呵呵,要是CW能识别sbit,那就逆天了,至少目前我还没发现啊

饿....的确是不行.....谢谢.....但现在问题是全白屏不知道为啥.....写什么代码都是白屏一个....

作者: 机遇    时间: 2013-2-12 22:30
void ssd1289_init(void)
{
          CS=1;
          LCD_RD=1;
          delayms(5);
           RES=0;
          delayms(15);
    RES=1;
    delayms(5);

          delayms(100);//可以适当调整延时,保障稳定显示
          
          Write_Cmd_Data(0x0000,0x0001);    delayms(1);  //打开晶振
    Write_Cmd_Data(0x0003,0xA8A4);    delayms(1);   //0xA8A4
    Write_Cmd_Data(0x000C,0x0000);    delayms(1);   
    Write_Cmd_Data(0x000D,0x080C);    delayms(1);   
    Write_Cmd_Data(0x000E,0x2B00);    delayms(1);   
    Write_Cmd_Data(0x001E,0x00B0);    delayms(1);   
    Write_Cmd_Data(0x0001,0x2B3F);    delayms(1);   //驱动输出控制320*240  0x6B3F  0x2b3f
    Write_Cmd_Data(0x0002,0x0600);    delayms(1);
    Write_Cmd_Data(0x0010,0x0000);    delayms(1);
    Write_Cmd_Data(0x0011,0x6070);    delayms(1);        //0x4030           //定义数据格式  16位色
    Write_Cmd_Data(0x0005,0x0000);    delayms(1);
    Write_Cmd_Data(0x0006,0x0000);    delayms(1);
    Write_Cmd_Data(0x0016,0xEF1C);    delayms(1);
    Write_Cmd_Data(0x0017,0x0003);    delayms(1);
    Write_Cmd_Data(0x0007,0x0233);    delayms(1);        //0x0233      
    Write_Cmd_Data(0x000B,0x0000);    delayms(1);
    Write_Cmd_Data(0x000F,0x0000);    delayms(1);        //扫描开始地址
    Write_Cmd_Data(0x0041,0x0000);    delayms(1);
    Write_Cmd_Data(0x0042,0x0000);    delayms(1);
    Write_Cmd_Data(0x0048,0x0000);    delayms(1);
    Write_Cmd_Data(0x0049,0x013F);    delayms(1);
    Write_Cmd_Data(0x004A,0x0000);    delayms(1);
    Write_Cmd_Data(0x004B,0x0000);    delayms(1);
    Write_Cmd_Data(0x0044,0xEF00);    delayms(1);
    Write_Cmd_Data(0x0045,0x0000);    delayms(1);
    Write_Cmd_Data(0x0046,0x013F);    delayms(1);
    Write_Cmd_Data(0x0030,0x0707);    delayms(1);
    Write_Cmd_Data(0x0031,0x0204);    delayms(1);
    Write_Cmd_Data(0x0032,0x0204);    delayms(1);
    Write_Cmd_Data(0x0033,0x0502);    delayms(1);
    Write_Cmd_Data(0x0034,0x0507);    delayms(1);
    Write_Cmd_Data(0x0035,0x0204);    delayms(1);
    Write_Cmd_Data(0x0036,0x0204);    delayms(1);
    Write_Cmd_Data(0x0037,0x0502);    delayms(1);
    Write_Cmd_Data(0x003A,0x0302);    delayms(1);
    Write_Cmd_Data(0x003B,0x0302);    delayms(1);
    Write_Cmd_Data(0x0023,0x0000);    delayms(1);
    Write_Cmd_Data(0x0024,0x0000);    delayms(1);
    Write_Cmd_Data(0x0025,0x8000);    delayms(1);
    Write_Cmd_Data(0x004f,0);        //行首址0
    Write_Cmd_Data(0x004e,0);        //列首址0
          Write_Cmd(0x00,0X22);       
       
}

作者: 机遇    时间: 2013-2-12 22:33
最后一行代码是 Write_Cmd (0x00,0x22);//LCD_WriteCMD(GRAMWR); 不能注销的 你可以这样写的
void Write_Cmd(unsigned char DH,unsigned char DL)
{
  
       

        CS=0;
        RS=0;

        P2=DH;


        P0=DL;
       
        RW=0;
        RW=1;
        CS=1;
}
作者: 机遇    时间: 2013-2-12 22:49
typedef union {
    byte Byte;
    struct {
      byte DATA0       :1;                                       
      byte DATA1       :1;                                       
      byte DATA2       :1;                                    
      byte DATA3       :1;                                       
      byte DATA4       :1;                                       
      byte DATA5       :1;                                      
      byte DATA6       :1;                                    
      byte DATA7       :1;                                       
    } Bits;
  }SPI_DATA;
  SPI_DATA  _DATA;  
  #define  DATA                                 _DATA.Byte
  #define  DATA_DATA0                           _DATA.Bits.DATA0
  #define  DATA_DATA1                           _DATA.Bits.DATA1
  #define  DATA_DATA2                           _DATA.Bits.DATA2
  #define  DATA_DATA3                           _DATA.Bits.DATA3
  #define  DATA_DATA4                           _DATA.Bits.DATA4
  #define  DATA_DATA5                           _DATA.Bits.DATA5
  #define  DATA_DATA6                           _DATA.Bits.DATA6
  #define  DATA_DATA7                           _DATA.Bits.DATA7

操作 8位数据的每一位的方法
unsigned  char  code   是写ROM
CW  要用到 const
作者: dessertfox    时间: 2013-2-13 00:27
机遇 发表于 2013-2-12 22:49
typedef union {
    byte Byte;
    struct {

多谢大神!!!我这就试试!!!
作者: dessertfox    时间: 2013-2-13 00:51
机遇 发表于 2013-2-12 22:33
最后一行代码是 Write_Cmd (0x00,0x22);//LCD_WriteCMD(GRAMWR); 不能注销的 你可以这样写的
void Write_ ...

不过.........您这个屏的程序是16位的?要用两组I/O口控制?
作者: dessertfox    时间: 2013-2-13 01:39
dessertfox 发表于 2013-2-12 21:31
饿....的确是不行.....谢谢.....但现在问题是全白屏不知道为啥.....写什么代码都是白屏一个....

另外请问这一段
void write_data_u16(unsigned int dat)
{
unsigned char m,n;
m=dat>>8;
n=dat;
write_data(m,n);
}
中“ n=dat;”强制取低八位行吗?

现在改过的程序依然使TFT白花花一片........程序如下烦请斧正,谢谢!
附件:[attach]40802[/attach]

作者: 欲望~控♂    时间: 2014-7-23 17:37
不知道楼主是否已经搞定该tft屏幕,小弟也正在尝试,还望楼主发个程序参考,参考。1029321980@qq.com




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2