#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
LCD12864经典驱动(详细注释)
最新推荐文章于 2024-12-06 10:26:07 发布