初级会员

- 积分
- 171
- 金钱
- 171
- 注册时间
- 2013-4-25
- 在线时间
- 14 小时
|
5金钱
我自己根据时序图写了一个驱动,不过不好使,哪个大神帮我看看。资料说需要一个300Hz的背光,不过我看51的例子好像没有用到。下面是我的程序
#include <avr/io.h>
#include <string.h>
#include <stdio.h>
#include <avr/sfr_defs.h>//包含BV位操作符
#define F_CPU 7372800
#include <util/delay.h>
#define LCD_W 800
#define LCD_H 480
#define uchar unsigned char
#define uint unsigned int
#define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us)
#define delay_ms(x) _delay_ms(x)
#define LCD_DataPortH PORTA //高8位数据口
#define LCD_DataPortL PORTC //低8位数据口
#define SET_LCD_RS   ORTD|=_BV(PD1) //数据/命令切换
#define CLR_LCD_RS   ORTD&=~_BV(PD1)
#define SET_LCD_WR   ORTD|=_BV(PD2) //写控制
#define CLR_LCD_WR   ORTD&=~_BV(PD2)
#define SET_LCD_RD   ORTD|=_BV(PD3) //读控制
#define CLR_LCD_RD   ORTD&=~_BV(PD3)
#define SET_LCD_CS   ORTD|=_BV(PD4) //片选
#define CLR_LCD_CS   ORTD&=~_BV(PD4)
#define SET_LCD_REST   ORTD|=_BV(PD5) //复位
#define CLR_LCD_REST   ORTD&=~_BV(PD5)
//画笔颜色
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40 //棕色
#define BRRED 0XFC07 //棕红色
#define GRAY 0X8430 //灰色
#define DARKBLUE 0X01CF //深蓝色
#define LIGHTBLUE 0X7D7C //浅蓝色
#define GRAYBLUE 0X5458 //灰蓝色
#define LIGHTGREEN 0X841F //浅绿色
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色
#define LGRAYBLUE 0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE 0X2B12 //浅棕蓝色(选择条目的反色)
extern uint BACK_COLOR, POINT_COLOR; //背景色,画笔色
/*void LCD_Writ_Bus(uchar VH,uchar VL) //并行数据写入函数
{
LCD_DataPortH=VH;
LCD_DataPortL=VL;
CLR_LCD_WR;
SET_LCD_WR;
} */
#ifdef Bus_16 //条件编译-16位数据模式
void LCD_Writ_Bus(char VH,char VL) //并行数据写入函数
{
LCD_DataPortH=VH;
LCD_DataPortL=VL;
CLR_LCD_WR;
SET_LCD_WR;
}
#else //条件编译-8位数据模式
void LCD_Writ_Bus(char VH,char VL) //并行数据写入函数
{
LCD_DataPortH=VH;
CLR_LCD_WR;
SET_LCD_WR;
LCD_DataPortH=VL;
CLR_LCD_WR;
SET_LCD_WR;
}
#endif
void LCD_WR_DATA8(uchar VH,uchar VL) //发送数据-8位参数
{
SET_LCD_RS;
LCD_Writ_Bus(VH,VL);
}
void LCD_WR_DATA(uint da)
{
SET_LCD_RS;
LCD_Writ_Bus(da>>8,da);
}
void LCD_WR_REG(uint da)
{
CLR_LCD_RS;
LCD_Writ_Bus(da>>8,da);
}
//设置起始地址与结束地址
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
{
LCD_WR_REG(0x02);//开始y
LCD_WR_DATA(y1);
LCD_WR_REG(0x03);//开始x
LCD_WR_DATA(x1);
LCD_WR_REG(0x06);//结束y
LCD_WR_DATA(y2);
LCD_WR_REG(0x07);//结束x
LCD_WR_DATA(x2);
LCD_WR_REG(0x0f);
}
void Lcd_Init(void)
{
SET_LCD_RD;
SET_LCD_WR;
CLR_LCD_REST;
delay_ms(8); //此处保证要有5ms以上才能保证复位稳定,推荐8ms
SET_LCD_REST;
delay_ms(8); //此处保证要有5ms以上才能保证复位稳定,推荐8ms
CLR_LCD_CS; //打开片选使能
LCD_WR_REG(0x01); //打开背光
LCD_WR_DATA(16);
}
void LCD_Clear(uint Color) //清屏函数,Color:要清屏的填充色
{
uchar VH,VL;
uint i,j;
VH=Color>>8;
VL=Color;
Address_set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA8(VH,VL);
}
}
}
main()
{
DDRA=0XFF;
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
Lcd_Init(); //初始化
while(1)
{
LCD_Clear(RED);
delay_ms(1000);
LCD_Clear(GREEN);
delay_ms(1000);
LCD_Clear(BLUE);
delay_ms(1000);
}
}
|
|