armot 发表于 2009-10-2 09:55:22

大家帮忙看看一下tft程序在硬件上没显示什么问题

在ICC编译没问题,可在320 240的彩屏上没有任何反应
#include<iom32v.h>
#include<macros.h>

#define uchar unsigned char
#define uint unsigned int

//--------------------------端口定义----------------------------

#define nop asm("NOP")
#define LCD_CSPD0
#define LCD_WRPD1
#define LCD_RSPD3
#define LCD_RDPD4
#define LCD_RST PD2

#define LCD_CON_PORTPORTD
#define LCD_CON_DDR   DDRD

#define CS_H LCD_CON_PORT|=(1<<LCD_CS)
#define CS_L LCD_CON_PORT&=~(1<<LCD_CS)

#define WR_H LCD_CON_PORT|=(1<<LCD_WR)
#define WR_L LCD_CON_PORT&=~(1<<LCD_WR)

#define RS_H LCD_CON_PORT|=(1<<LCD_RS)
#define RS_L LCD_CON_PORT&=~(1<<LCD_RS)

#define RD_H LCD_CON_PORT|=(1<<LCD_RD)
#define RD_L LCD_CON_PORT&=~(1<<LCD_RD)

#define RST_H LCD_CON_PORT|=(1<<LCD_RST)
#define RST_L LCD_CON_PORT&=~(1>>LCD_RST)


#define DATA_L PORTA
#define DATA_H PORTB

void MUC_Init();
void LCD_Init();
void LCD_WR_REG(uchar index,uint val);
void LCD_WR_Start();
void LCD_WR_Data(uint val);
void LCD_WR_End();
void LCD_test();

uint color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};
/************************************************
*函数名称: void Delayms(unsigned char MS)
*入口参数: unsigned MS,延时的毫秒数
*出口参数: 无
*函数功能: 延时指定毫秒(8M晶振)
*创建时间: 2009-09-11
*修改说明:
/************************************************/
void Delay_ms(unsigned int MS)
{
        unsigned int i,j;
        for( i=0;i<MS;i++)
                for(j=0;j<1141;j++);        //1141是在8MHz晶振下,通过软件仿真反复实验得到的数值
}


voidmain ()
{
// uchar px,py;
   
   MUC_Init();
   LCD_Init();
   LCD_test();
   
   while (1);
}

void MUC_Init()
{
   DDRD=0xff;
// PORTD=0xff;
   DDRA=0xff;
// PORTA=0xff;
   DDRB=0xff;
// PORTB=0xff;
}

void LCD_Init()
{
   RST_H;
    Delay_ms(70);
   RST_L;
        Delay_ms(200);
          RST_H;
    Delay_ms(100);
       
        //initializing funciton 1
        LCD_WR_REG(0xe5,0x8000);
        LCD_WR_REG(0x00,0x0001);
        LCD_WR_REG(0x2b,0x0010);
       
        LCD_WR_REG(0x01,0x0100);
        LCD_WR_REG(0x02,0x0700);
        LCD_WR_REG(0x03,0x1030);
        LCD_WR_REG(0x04,0x0000);
       
        LCD_WR_REG(0x08,0x0202);
        LCD_WR_REG(0x09,0x0000);
        LCD_WR_REG(0x0a,0x0000);
        LCD_WR_REG(0x0c,0x0001);
        LCD_WR_REG(0x0d,0x0000);
        LCD_WR_REG(0x0f,0x0002);
       
        LCD_WR_REG(0x10,0x0000);
        LCD_WR_REG(0x11,0x0007);
        LCD_WR_REG(0x12,0x0000);
        LCD_WR_REG(0x13,0x0000);
        Delay_ms(200);
       
       
        LCD_WR_REG(0x10,0x17b0);
        LCD_WR_REG(0x11,0x0227);
        Delay_ms(50);
       
        LCD_WR_REG(0x12,0x0139);
        Delay_ms(50);
       
        LCD_WR_REG(0x13,0x1a00);
        LCD_WR_REG(0x29,0x0018);
        Delay_ms(50);
       
        LCD_WR_REG(0x20,0x0000);
        LCD_WR_REG(0x21,0x0000);
       
        //initializing function 2

        LCD_WR_REG(0x30,0x0004);
        LCD_WR_REG(0x31,0x0506);
        LCD_WR_REG(0x32,0x0305);
        LCD_WR_REG(0x35,0x0005);
        LCD_WR_REG(0x36,0x0e00);
        LCD_WR_REG(0x37,0x0404);
        LCD_WR_REG(0x38,0x0403);
        LCD_WR_REG(0x39,0x0407);
        LCD_WR_REG(0x3c,0x0303);
        LCD_WR_REG(0x3d,0x0e0a);
    Delay_ms(50);
       
       
        LCD_WR_REG(0x50,0x0000);
        LCD_WR_REG(0x51,0x00ef);
        LCD_WR_REG(0x52,0x0000);
        LCD_WR_REG(0x53,0x013f);
        LCD_WR_REG(0x60,0x2700);
        LCD_WR_REG(0x61,0x0001);
        LCD_WR_REG(0x6a,0x0000);
       
       
        LCD_WR_REG(0x80,0x0000);
        LCD_WR_REG(0x81,0x0000);
        LCD_WR_REG(0x82,0x0000);
        LCD_WR_REG(0x83,0x0000);
        LCD_WR_REG(0x84,0x0000);
        LCD_WR_REG(0x85,0x0000);
       
        LCD_WR_REG(0x90,0x0010);
        LCD_WR_REG(0x92,0x0000);
        LCD_WR_REG(0x93,0x0003);
        LCD_WR_REG(0x95,0x0110);
        LCD_WR_REG(0x97,0x0000);
        LCD_WR_REG(0x98,0x0000);

        //开显示
        LCD_WR_REG(0x07,0x0173);
       
}

void LCD_WR_REG(uchar index,uint val)
{
        RD_H;
        CS_L;
        RS_L;
        WR_L;
        DATA_L=index;
        DATA_H=0;
        WR_H;
        CS_H;
       
        nop;
        nop;
        RD_H;
        WR_H;
        RS_H;
        WR_L;
        DATA_L=(uchar)val;
    DATA_H=(uchar)(val>>8);       
       
        nop;
        nop;
        WR_H;
        CS_H;
}

void LCD_WR_Start()
{
        CS_L;
        RS_L;
       
        DATA_L = 0x22;
        DATA_H = 0x00;
        WR_L;
        nop;
        nop;
        WR_H;
        RS_H;
}

void LCD_WR_Data(uint val)
{
        DATA_L = (uchar)val;
        DATA_H = (uchar)(val>>8);
        WR_L;
        nop;
        nop;
        WR_H;
}

void LCD_WR_End()
{
        CS_H;
}

void LCD_test()
{
        uint temp,num;
        uchar n;
       
        //LCD_WR_REG(0x20,0);      //0-239
        //LCD_WR_REG(0x21,0);      //0-319
       
        LCD_WR_Start();
        for(n=0;n<8;n++)
       {
          temp=color;
                for(num=40*240;num>0;num--)
                  LCD_WR_Data(temp);
       }
        LCD_WR_End();
}

csclz 发表于 2009-10-2 10:50:57

呵呵,以为armok,硬件没问题吧
页: [1]
查看完整版本: 大家帮忙看看一下tft程序在硬件上没显示什么问题