4008|2

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

新手求助12864lcdC语言编程 [复制链接]

编译没有问题,不显示。我是个新手大家帮我看看

程序如下:
//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;
}
此帖出自单片机论坛

最新回复

你可以仿真跟踪挨个量一下每个引脚是否能输出你的设置值,没看程序  详情 回复 发表于 2010-3-25 21:45
点赞 关注
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
硬件资料

未命名.jpg (83.59 KB, 下载次数: 3)

lcd的硬件连接

lcd的硬件连接

bk12864-30.pdf

751.5 KB, 下载次数: 4

lcd的资料

此帖出自单片机论坛
 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
你可以仿真跟踪挨个量一下每个引脚是否能输出你的设置值,没看程序
此帖出自单片机论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表