|
编译没有问题,不显示。我是个新手大家帮我看看
程序如下:
//lcdportconfig.h
#ifndef _LCDPORT_CONFIG_
#define _LCDPORT_CONFIG_
#include
//硬件端口连接设置
#define CS PA3 //PA3设为片选信号端口
#define CS_OUT (DDRA|=(1<
#define SET_CS (PORTA|=(1<
#define CLR_CS (PORTA&=~(1<
#define RS PA7 //PA7设为命令数据选择端口
#define RS_OUT (DDRA|=(1<
#define SET_RS (PORTA|=(1<
#define CLR_RS (PORTA&=~(1<
#define WR PC7 //PC7设为写使能端口
#define WR_OUT (DDRC|=(1<
#define SET_WR (PORTC|=(1<
#define CLR_WR (PORTC&=~(1<
#define RD PC6 //PC6设为读使能端口
#define RD_OUT (DDRC|=(1<
#define SET_RD (PORTC|=(1<
#define CLR_RD (PORTC&=~(1<
#define RST PD6 //PD6设为重启端口
#define RST_OUT (DDRD|=(1<
#define SET_RST (PORTD|=(1<
#define CLR_RST (PORTD&=~(1<
#define DATA_DDR (DDRB) //PB端口设为数据端口
#define DATA_PORT (PORTB)
#define DATA_PIN (PINB)
#define IN (0x00)
#define OUT (0xFF)
#endif
****************************************************
//lcd_12864_drive.h
#ifndef _LCD_12864_DRIVE_
#define _LCD_12864_DRIVE_
#include"lcdportconfig.h"
//检测lcd是否处于忙状态
extern void CheckBusy();
//设定lcd相连控制端口的方向为输出,重启端不使能
extern void LcdPortInit();
//向lcd中写入一个字节:dat rs_flag=1表示是数据,否则表示指令
extern void LcdWrite(unsigned char dat,unsigned char rs_flag);
//从lcd中读出一个数据
extern unsigned char LcdRead();
#endif
**********************************************************************************
//lcd_init.h
#ifndef _LCD_INIT_
#define _LCD_INIT_
extern void LcdInit();
#endif
***************************************************
//lcd_user.h
#ifndef _LCD_USER_
#define _LCD_USER_
#include "lcdportconfig.h"
#include "lcd_12864_drive.h"
#include "lcd_init.h"
//显示图片
extern void LcdShowPicture(unsigned char pic[]);
//lcd 清屏
extern void LcdClean();
#endif
*********************************************************
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//lcd_12864_drive.c
#include
#include
#include "lcd_12864_drive.h"
/******************************************
函数名称:CheckBusy
功能说明:检测lcd是否处于忙状态
入口参数:无
返回值:unsigned char busy:1表示忙 0表示空闲
******************************************/
void CheckBusy()
{
DATA_DDR=IN;
CLR_RS;
CLR_CS;
SET_WR;
CLR_RD;
SET_RD; //产生一个上升沿
while(DATA_PIN&0x80);
DATA_DDR=OUT;
}
/*****************************************
函数名称:LcdPort_Init
功能说明:设置于lcd相连的控制端为输出
入口参数:无
返回值:无
*****************************************/
void LcdPortInit()
{
RS_OUT;
CS_OUT;
RD_OUT;
WR_OUT;
RST_OUT;
SET_RST;
}
/******************************************
函数名称:LcdWrite
功能说明:向Lcd中写入一个字节的数据或指令
入口参数:unsigned char dat:待写入的数据或命令,rs_flag:1表示数据,0表示命令
*******************************************/
void LcdWrite(unsigned char dat,unsigned char rs_flag)
{
CheckBusy();
if (rs_flag)
SET_RS;
else
CLR_RS;
CLR_CS;
SET_RD;
CLR_WR;
DATA_DDR=OUT;
DATA_PORT=dat;
_delay_us(1);
SET_WR;
SET_CS;
}
/******************************************
函数名称:LcdRead
功能说明:从lcd相应位置读出一个字节的数值
入口参数:无
返回值:unsigned char data:读到的数值
******************************************/
unsigned char LcdRead()
{
unsigned char data;
DATA_DDR=IN;
SET_RS;
CLR_CS;
SET_WR;
CLR_RD; //空读一次
SET_RD;
CLR_RD;
SET_RD;
data=DATA_PIN;
SET_CS;
DATA_DDR=OUT;
return data;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//lcd_init.c
#include
#include
#include"lcdportconfig.h"
#include"lcd_user.h"
/*********************************************
函数名称:Lcd_Init
功能说明:实现lcd的初始化
入口参数:无
返回值:无
*********************************************/
void LcdInit(void) /*初始化LCM*/
{
CLR_RST; //硬复位
_delay_ms(1);
CLR_RST;
LcdWrite(0xe2,0); /*软件复位*/
_delay_ms(1);
LcdWrite(0xa3,0); /*LCD BIAS=1/9*/
LcdWrite(0xa0,0); /*列地址移动方向:ADC=0(SEG1->SEG132)*/
LcdWrite(0xc0,0); /*行扫描方向:SHL=1(COM64->COM1)*/
LcdWrite(0x2f,0); /*电源控制模式:VC,VR,VF=111*/
LcdWrite(0x20,0); /*内部调整电阻比率:R2,R1,R0=111 0x20-0x27*/
//------------------------------------
LcdWrite(0x81,0); /*对比度寄存器模式*/
LcdWrite(50,0); /*对比度寄存器值 修改这个值就可以调节对比度了 0--63*/
//------------------------------------
LcdWrite(0x40,0); /*起始行*/
LcdWrite(0xe0,0); /*写入数据时列地址自动加1,但读时不变*/
// ReverseDisplay(1); /*打开反显 0:正常显示 1:反显*/
LcdWrite(0xaf,0); /*开显示*/
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//lcd_user.c
#include
#include
#include"lcd_user.h"
/****************************************
函数名称:LcdShowPicture
功能说明:lcd显示一幅图片
入口参数:unsigned char *pic:图片的首指针
返回值:无
****************************************/
void LcdShowPicture(unsigned char pic[])
{
unsigned char i=0;
unsigned char Page = 0;
unsigned char Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<128;Col++)
{
LcdWrite(pic,1);
i++;
}
}
}
void LcdClean()
{
unsigned char Page = 0;
unsigned char Col = 0;
for(Page=0;Page<8;Page++)
{
for(Col=0;Col<128;Col++)
{
LcdWrite(0x00,1);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//12864.c
/************************************************
文件名:12864.c
文件描述:利用12864液晶显示文字或图片
编译环境:Gcc
************************************************/
#include
#include
#include"lcdportconfig.h" //lcd端口配置
#include"lcd_12864_drive.h"
#include"lcd_user.h"
#include"lcd_init.h"
unsigned char pic[]={ //字节倒序
//-- 调入了一幅图像:
//8页*128列
数据略};
int main()
{
LcdPortInit();
LcdInit();
while(1)
{
LcdClean();
LcdShowPicture(pic);
_delay_ms(100);
}
return 0;
}
|
|