LCD12864经典驱动(详细注释)

#include "bsp.h"
/*
    RW = 1 :读数据
    RW = 0 : 写数据
    RS = 1 :数据D0-D7与显示RAM交互
    RS = 0 :数据D0-D7与指令寄存器交互
    E  = 1 :读写是能有效(即可以读写)操作的基础
    E :下降沿:锁定数据
    CS1 = 0:选择LCD的前64位显示
    CS2 = 0:选择LCD的后64位显示
*/



/*
 *LCD检测忙函数
 *在RS=0,RW=1模式下
*/
void chekbusy12864(void)
{
    uchar dat;            //定义uchar变量,接收数据
    EX0 = 0;              //禁止外部中断0
    LCD_RS_OUT = 0;       //指令模式 
    LCD_RW_OUT = 1;       //读数据
    do
    {
        P0 = 0x00;        //初始化数据端口
        LCD_E_OUT = 1;    //使能,此语句执行后可以对指令寄存器进行指定操作,此处执行后P0口已经读出了指令寄存器的内容
        dat = P0 & 0x80;  //判断P0的最高位数据(将最高为标为第8位即数据手册BF位,BF = 0空闲,BF=1忙)
        LCD_E_OUT = 0;    //E出现一个下降沿所存P0数据
    }while(dat != 0x00);  //如果dat != 0x00为真,继续do-while循环,也就是说P0的最高为不为1时,退出do-while循环
    EX0=1;                //允许外部中断0
}


/*
 *LCD选屏函数
 *输入参数为0时:选择左半屏
 *输入参数为1时:选择右半屏
 *输入参数为2时:选择双屏
*/
void CHOOSE_12864_SCREEN(uchar i)  /*i是要写的屏.0是左屏,1是右屏,2是双屏;*/
{                                  /*此处在硬件上运行时i的电平全部与程序相反;*/
    switch (i)                           
    {
        case 0: 
        {
            LCD_CS1_OUT=0;
            LCD_CS2_OUT=1;
        }break;                     //比如此处如果要在电路上运行则应该改为CS=1;LCD_CS2_OUT=0;   
        case 1: 
        {
            LCD_CS1_OUT=1;
            LCD_CS2_OUT=0;
        }break;
        case 2: 
        {
            LCD_CS1_OUT=0;
            LCD_CS2_OUT=0;
        }break;
        default: break; 
    }
}

/*
 *LCD写指令函数
 *在RS=0,RW=0模式下
*/
void LCD_12864_CMD(uchar cmd)                //写命令
{
    chekbusy12864();     //调用lcd
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值