C语言程序>>LCD12864

本文档详细介绍了如何使用C语言初始化LCD12864显示器,包括初始化程序、忙检测、写指令、写数据、读数据等功能。还提供了画点、画线、画矩形等图形操作的函数实现,以及清屏和GDRAM清空的函数。代码适用于嵌入式系统中对LCD12864的控制。
摘要由CSDN通过智能技术生成
 /*****************************************************************
程序说明CA12864K(ST7920)内核的点阵型LCD12864子程序
开始日期:2010-08-16
完成日期:2010-08-16
修改日期:
作者:蔡亚辉
引脚图
|-----------------------------------------------------------------------------------------------------|  
| 1  2 3     4     5     6    7   8   9  10  11  12  13  14  15  16  17 18    19  20     |  
|GND VCC V0 RS(CS) R/W(SID) E(CLK) DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 PSB NC RESET VOUT BLA(5V) BLK(0V)  |
|-----------------------------------------------------------------------------------------------------|
PSB H-并行,L-串行              
注:(1)单片机:AT89S52晶振Fosc:11.0592MHz编程软件:Keil uVision2;
 (2)显示芯片:CA12864K 控制器:ST7920
 (3)LCM的接口方式:并行方式,PSB接高;
 (4)液晶复位端 悬空 上电清屏时要延时
 (5)每次清屏时要延时 否则会在第一位出现乱码
 (6)每次读/写LCD操作之前,应首先检测忙标志BF,确认BF=0后,访问过程才能进行;
 (7)绘图显示的步骤
  1 关闭绘图显示功能
  2 先将垂直的坐标(Y)写入绘图RAM地址
  3 再将水平的位元组坐标(X)写入绘图RAM地址
  4 将D15-D8写入RAM中
  5 将D7-D0写入到RAM中
  6 打开绘图显示功能
 (8)对于屏幕上面任意一个点,如果我们想要点亮它,必须先读出此点的状态,然后再修改该点,最后送出去,即 读----修改----写 
******************************************************************/
//-----------------------------------------------------------------
// 头文件包含
//-----------------------------------------------------------------
#include<at89x52.h>
#include<lcd12864.h>
//-----------------------------------------------------------------
// 数据类型宏定义
//-----------------------------------------------------------------
#define uchar unsigned char 
#define uint  unsigned int   

//-----------------------------------------------------------------
// 片内常量(内RAM)
//-----------------------------------------------------------------
//为加速逻辑运算而设置的掩码表,这是以牺牲空间而换取时间的办法
//code uint MaskTab[]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,
//0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};

//-----------------------------------------------------------------
// 初始化程序区
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// void LCD12864_Init(void)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864初始化
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: void LCD12864_WriteCom(uchar cmd);Delay_100us(uint);    
// 注意事项: 在向液晶写完命令后,必须适当延时;
//-----------------------------------------------------------------
void LCD12864_Init(void)    
{
 Delay_100us(1500);            //上电复位
  LCD12864_WriteCom(FUN_MODE);     //选择基本指令集
   Delay_100us(100);               //延时10ms(7.5ms以上)
   LCD12864_WriteCom(FUN_MODE);        //选择8bit数据流
   Delay_100us(100);     //延时10ms(7.5ms以上)
    LCD12864_WriteCom(CLEAR_SCREEN);    //清屏指令:清屏且AC值为00H
  Delay_100us(100);     //延时10ms(7.5ms以上)
  LCD12864_WriteCom(DISPLAY_ON);      //显示开
  Delay_100us(2);      //延时2us
 LCD12864_WriteCom(CURSE_ADD);      //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
  Delay_100us(2);      //延时2us
}

//-----------------------------------------------------------------
// 功能程序区
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// void LCD12864_Busy(void)
//-----------------------------------------------------------------
//
// 函数功能: LCD12864忙检测
// 入口参数: 无
// 返回参数: 无
// 全局变量: 无
// 调用模块: 无    
// 注意事项:
//----------------------------------------------------------------- 
void LCD12864_Busy(void)    

 LCD12864_DIN=0xff;      //读单片机端口先写1
 LCD12864_RS=0;      //选中命令寄存器
 LCD12864_RW=1;       //E为H时,数据读到DB7-DB0(RW=H)
 LCD12864_E=1;         //高电平使能
 while((LCD12864_DIN&0x80)==0x80);
 LCD12864_E=0;      //禁止 
}

//-------------------------------------------------------------

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值