⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 use_12864_driver.c

📁 MSP430z_f247.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************
*   函数库名称:12864液晶驱动函数库                              *
*   版本:      v0.01                                            *
*   作者:      I ROBOT                                          *
*   创建日期:  Copyright (C) 2008年10月14日                     *
*----------------------------------------------------------------*
*   [支持库]                                                     *
*   支持库名称:USE_12864.h(12864液晶驱动配置库)                 *
*   支持库版本:v0.01                                            *
*   支持库说明:配置AVR端口与12864的数据和控制端口相匹配         *
*----------------------------------------------------------------*
*   [版本更新]                                                   *
*   更新:      I ROBOT                                          *
*   更新日期:                                                    *
*   版本:                                                       *
*----------------------------------------------------------------*
*   [版本历史]                                                   *
*        v0.01  创建版本,12864基本驱动函数                      *
*----------------------------------------------------------------*
*   [使用说明]                                                   *
*            1.直接调用库中的驱动函数                            *
*****************************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "USE_12864_Driver.h"
/********************
*   系 统 宏 定 义  *
********************/

/*------------------*
*   常 数 宏 定 义  *
*------------------*/

/*------------------*
*   动 作 宏 定 义  *
*------------------*/
                                                             
/********************
*  模块结构体定义区 *
********************/

/********************
*   函 数 声 明 区  *
********************/
void _12864_Hardware_Configure(void);

static void MCU_Register_Configure(void);

static void MCU_Port_Configure(void);

static void Is_Busy_12864(void);

static void Write_CMD_12864(UINT8 chCommand);

static void Write_Data_12864(UINT8 chData);


BOOL Dot_Is_Exist_12864(UINT8 chx,UINT8 chy);

void LCD_Init_12864(void);

void Clear_LCD_12864(void);

void Draw_Dot_12864(UINT8 chx,UINT8 chy);

void Clear_Dot_12864(UINT8 chx,UINT8 chy);

/********************
*   模块函数声明区  *
********************/

/********************
*   模块变量声明区  *
********************/

/********************
*   全局变量声明区  *
********************/
static UINT8 LCD_Buffer[8][128] = {0};
/******************************************************************
*                       函  数  定  义  区                        *
******************************************************************/

/****************************************
*  函数说明: 12864硬件配置函数          *
*  输入    :无                         *
*  输出    :无                         *
*  调用函数: 无                       *
****************************************/

void _12864_Hardware_Configure(void)
{
    //TODO:在这里添加12864硬件配置代码
    MCU_Register_Configure();
	
    MCU_Port_Configure();
    LCD_Init_12864();
    Delay_nMS(1);
    Clear_LCD_12864();
    Delay_nMS(1);
}

/****************************************
*  函数说明: MCU寄存器配置函数          *
*  输入    :无                         *
*  输出    :无                         *
*  调用函数: 无                       *
****************************************/

static void MCU_Register_Configure(void)
{
    //TODO:在这里添加MCU寄存器配置代码
}
/****************************************
*  函数说明: MCU端口配置函数            *
*  输入    :无                         *
*  输出    :无                         *
*  调用函数: 无                       *
****************************************/

static void MCU_Port_Configure(void)
{
    //TODO:在这里添加MCU端口配置代码
    P3DIR |= BIT0| BIT1| BIT2;			//CS1,CS2,RET
	P3OUT |= BIT0| BIT1| BIT2;
	
	P1DIR |= BIT5| BIT6| BIT7;			//RS,RW,E
	P1OUT |= BIT5| BIT6;
	P1OUT &= ~BIT7; 
	
	P2DIR &= 0x00;						//DB0-DB7
	P2OUT |= 0xff;
}

/****************************************
*  函数说明: 12864忙状态检测函数       *
*  输入    :无                         *
*  输出    :无                         *
*  调用函数: 无                       *
****************************************/

static void Is_Busy_12864(void)
{   

    WRITE_12864_E_LOW;               
    //E = LOW,释放总线,防止误操作
    WRITE_12864_RS_LOW;               
    WRITE_12864_RW_HIGH;             
    //设置地址为读状态
    WRITE_12864_E_HIGH;              
    //使能总线,高电平读取状态
    DATA_FROM_12864;             
    //设置AVR端口为读 
    NOP_DELAY;                  
    //延时等待AVR端口稳定     
    while (READ_12864_DATA_ & _12864_BUSY);
    //忙状态  
    WRITE_12864_E_LOW;               
    //释放总线
    
}
/****************************************
*  函数说明: 12864写指令函数            *
*  输入    :12864指令码                *
*  输出    :无                         *
*  调用函数: Is_Busy_12864()            *
****************************************/
static void Write_CMD_12864(UINT8 chCommand)
{
    Is_Busy_12864();         
    //检测忙状态
    WRITE_12864_E_LOW;
    //释放总线
    WRITE_12864_RS_LOW;             
    WRITE_12864_RW_LOW;              
    //设置地址为写指令
    _12864_DATA_FROM_MCU;            
    //设置AVR端口为写
    NOP_DELAY;                  
    //延时等待AVR端口稳定
    WRITE_12864_DATA_ = chCommand; 
    //填写指令  
    WRITE_12864_E_HIGH;               
    WRITE_12864_E_LOW;               
    //下降沿写指令,释放总线 
}

/****************************************
*  函数说明: 12864写数据函数            *
*  输入    :12864显示数据              *
*  输出    :无                         *
*  调用函数: Is_Busy_12864()            *
****************************************/
static void Write_Data_12864(UINT8 chData)
{
    Is_Busy_12864();            
    //检测忙状态
    WRITE_12864_E_LOW;               
    //释放总线
    WRITE_12864_RS_HIGH;              
    WRITE_12864_RW_LOW;              
    //设置地址为写数据
    _12864_DATA_FROM_MCU;           
    //设置AVR端口为写
    NOP_DELAY;                  
    //延时等待AVR端口稳定,一个指令周期的延时
    WRITE_12864_DATA_ = chData;    
    //填写数据
    WRITE_12864_E_HIGH;             
    WRITE_12864_E_LOW;               
    //下降沿写数据*/
}

/****************************************
*  函数说明: 点存在检测函数             *
*  输入    :(chx,chy)(点XY)            *
*  输出    :TRUE/FALSE                 *
*  调用函数:                            *
****************************************/

BOOL Dot_Is_Exist_12864(UINT8 chx,UINT8 chy)
{
    UINT8 chPage_index = 0;             
    //页面偏移              
    UINT8 chDot_Bit = 0;                
    //点所在位
    chDot_Bit = BIT(7-(chy&(BIT(3)-1)));    
    //计算数据点所在字节的位
    chPage_index = 7-(chy>>3);     
	
    return (LCD_Buffer[chPage_index][chx]&chDot_Bit);
}

/****************************************
*  函数说明: 液晶初始化函数             *
*  输入    :无                         *
*  输出    :无                         *
*  调用函数: Write_CMD_12864()          *
*            Self_Delay_Adjust_12864()  *
****************************************/
void LCD_Init_12864(void)
{
  	UINT8 chx = 0,chy = 0;
	for (chy = 0;chy < 8;chy++)
	{
		for(chx = 0;chx < 128;chx++)
		{
		  	LCD_Buffer[chy][chx] = 0;
		}
	}
    WRITE_12864_RESET_LOW;                  
    //复位LCD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -