原创 1.8寸TFT程序

2011-7-8 15:58 2394 4 5 分类: MCU/ 嵌入式
我这段程序调试了好久老是报错,我就是看不出问题在哪里。
File main.c
#include<avr/io.h>
#include"SPITFT.h"
int main(void)
{
OSCCAL = 0xa4;
DDRB |= 0xff;
PORTB |= 0xff;
intspiinit();  //配置内部SPI接口
TFT_INI();
Setsingle(0x02,0x01,0xf800);
while(1);
}
File SPITDT.H
#ifndef __SPITFT_h__
#define __SPITFT_h__

/*****************************************************
*
* DEFINE  AREA
*
*****************************************************/

#define SET_SS() PORTB |= (1<<_BV(PB0))
#define CLR_SS() PORTB &= ~(1<<_BV(PB0))

#define SET_SCK() PORTB |= (1<<_BV(PB1))
#define CLR_SCK() PORTB &= ~(1<<_BV(PB1))

#define SET_SDA() PORTB |= (1<<_BV(PB2))
#define CLR_SDA() PORTB &= ~(1<<_BV(PB2))

#define SET_RS() PORTB |= (1<<_BV(PB3)) //数据/命令选择
#define CLR_RS() PORTB &= ~(1<<_BV(PB3))

#define SET_RST() PORTB |= (1<<_BV(PB4)) //复位脚
#define CLR_RST() PORTB &= (1<<_BV(PB4))

/*****************************************************
*
* FUNCTION  STATAMENT
*
*****************************************************/

void TFT_INI(void);
void intspiinit(void);
void Senddata(unsigned char data);
void LCD_data(uint16_t colornum);
void Sendcommand(unsigned char cmd);
void Setsingle(unsigned int x_start,unsigned int y_start,uint16_t color);

#endif

File TFTISP.c
#include "SPITFT.h"

#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>


#define uint unsigned int
void intspiinit(void)
{

/* 设置MOSI和SCK为输出,其他为输入 */
DDRB = (_BV(PB0))|(_BV(PB1))|(_BV(PB2));
/* 使能SPI主机模式,设置时钟速率为fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);//高位在前
/* 设置ss为高电平*/
SET_SS();

}

void Senddata(unsigned char data)
{
unsigned char i;
CLR_SS();
SET_RS();
CLR_SCK();
for(i=8; i>0; i--)
{
if((data&0x80)==0x80)
{
SET_SDA();
}
else
{
CLR_SDA();
}
data = data<<1;
SET_SCK();
}
SET_SS();   //写完一个直接数据把SS置位
}

void Sendcommand(unsigned char cmd)
{
unsigned char i;
CLR_SS();
CLR_RS(); //写命令时置0
CLR_SCK();
for(i=8; i>0; i--)
{
if((cmd&0x80)==0x80)
{
SET_SDA();
}
else
{
CLR_SDA();
}
cmd = cmd<<1;
SET_SCK();
}
SET_SS();   //写完一个直接数据把SS置位
}

void LCD_data(uint16_t colornum)
{
unsigned char i;
CLR_SS();
SET_RS();
CLR_SCK();
for(i=16; i>0; i--)
{
if((colornum&0x8000)==0x8000)
{
SET_SDA();
}
else
{
CLR_SDA();
}
colornum = colornum<<1;
SET_SCK();
}
SET_SS();   //写完一个直接数据把SS置位
}

void TFT_INI(void)
{
/**************复位***************/
CLR_RST(); //低电平有效
_delay_ms(300);
SET_RST(); //通信时处于高电平
_delay_ms(300);
/**************Sleep out***************/
Sendcommand(0x11); //退出睡眠
_delay_ms(300); //切换指令延时不低于120ms
/**************GAMMA SET***************/
Sendcommand(0x26); //设置伽马曲线
_delay_ms(300);
Senddata(0x08); //设置GC3
/**************DISPLAY ON***************/
Sendcommand(0x29); //开显示
_delay_ms(300);
}

void Setsingle(unsigned int x_start,unsigned int y_start,uint16_t color)
{
Sendcommand(0x2A);  //0<XS[15:0]<XE[15:0]<127(007Fh))  MV=0
_delay_ms(300);
    Senddata(0x00);
    Senddata(x_start);//列地址
Sendcommand(0x2B);  //0<YS[15:0]<YE[15:0]<159(009Fh))  MV=0
_delay_ms(300);
    Senddata(0x00);
    Senddata(y_start);//行地址
Sendcommand(0X2C);
LCD_data(color); //SINGLE RED
}

这段程序有什么问题,请指教。
  qq:1526429990






PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1632368 2011-7-8 16:01

我用的是MCUZONE的1.8寸TFT彩屏。
相关推荐阅读
用户1632368 2011-07-30 19:52
EFM32G230最小系统板
不要官方昂贵的开发套件也能掌握“EFM32”,全球最低功耗系列。  推荐超值EFM32G200/230最小系统板,工程师为你解答学习中遇到的困难。 点击连接:http://item.taobao.co...
用户1632368 2011-07-07 08:01
1.8寸TFT彩屏显示原理
1,概述 TFT-LCD是指薄膜晶体液晶显示器,利用薄膜晶体管(TFT)产生电压控制液晶分子转向的显示器,其结构是上下两层玻璃之间夹着液晶,形成平行板电容器,称之为Clc,实际应用中这个电容并无法将...
用户1632368 2011-07-06 08:03
开博啦
刚刚开通博客,本博客致力于记录学习过程、调试记录、技术文档共享。    by www.mcuzone.com...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条