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

📄 19264液晶屏演示程序2.c

📁 19264 KS0108 驱动程序 19264 KS0108 驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//连线表:  CPU=89C52                                                        *
//RS=P3.0     R/W=P3.1     E=P3.2     CS1=P3.3     CS2=P3.4                 *
//SysClock=12MHz           DB0-DB7=P0.0-P0.7       /Reset=InBoard           *
//***************************************************************************

#pragma  debug code small
#pragma  REGPARMS
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>
#include "D:\Program Files\KEIL\C51\INC\reg52.h"
#include <math.h>
#include <absacc.h>
#include <ctype.h>
#include "YDJ.H"

/********************引脚定义********************/

sbit RS  =P2^2; //数据指令
sbit RW  =P2^3; //读写
sbit E   =P2^6; //使能

sbit A12 =P2^4; //1片选
sbit A13 =P2^5; //2片选
sbit A15 =P2^7; //3片

unsigned char Page; //页 地址
unsigned char Col; //列 地址

unsigned char code BMP1[];
unsigned char code BMP2[];

void Delay(unsigned int MS);
void wtcom(void);

/***************************/
/*检查Busy                 */
/***************************/
void BusyL(void)
{
 A12= 0;
 A13= 0;
 A15= 1;
 wtcom();
}

void BusyM(void)
{
 A12= 0;
 A13= 1;
 A15= 1;
 wtcom();
}

void BusyR(void)
{
 A12= 1;
 A13= 0;
 A15= 1;
 wtcom();
}

void wtcom(void)
{
 RS = 0;  //指令
 RW = 1;
 P0 = 0xFF; //输出0xff以便读取正确
 E  = 1;
 _nop_();
 //while(P0 & 0x80); //Status Read Bit7 = BUSY
 E  = 0;
 _nop_();
}

/********************************************************/
/*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
/********************************************************/
void Locatexy(void)
{
 unsigned char x,y;
 switch (Col&0xc0) /*  col.and.0xC0 */
 {   /*条件分支执行  */
  case 0: {BusyL();break;}/*左区 */
  case 0x40: {BusyM();break;}/*中区 */
  case 0x80: {BusyR();break;}/*右区 */
 }
 x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/
 y = Page&0x07|0xB8; /* row.and.0x07.or.set Page */
 wtcom();  /* waitting for enable */
 RS = 0;   //指令
 RW = 0;   //写
 P0 = y;   //设置页面地址
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
 wtcom();  /*  waitting for enable */
 RS = 0;
 RW = 0;
 P0 = x;   //设置列地址
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

/***************************/
/*写指令                   */
/***************************/
void WriteCommandL( unsigned char CommandByte )
{
 BusyL();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

void WriteCommandM( unsigned char CommandByte )
{
 BusyM();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

void WriteCommandR( unsigned char CommandByte )
{
 BusyR();
 P0 = CommandByte;
 RS = 0;  //指令
 RW = 0;
 E  = 1;
 _nop_();
 E  = 0;
 _nop_();
}

/***************************/
/*读数据                   */
/***************************/
unsigned char ReadData( void )
{
 unsigned char DataByte;
 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 RS = 1;  /*数据输出*/
 RW = 1;  /*读入  */
 P0 = 0xFF;  //输出0xff以便读取正确
 E  = 1;  /*读入到LCM*/
 _nop_();
 DataByte = P0; /*数据读出到数据口P0 */
 E  = 0;
 _nop_();
 return DataByte;
}

/***************************/
/*写数据                   */
/***************************/
void WriteData( unsigned char DataByte )
{
 Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 RS = 1;  /*数据输出*/
 RW = 0;  /*写输出  */
 P0 = DataByte; /*数据输出到数据口 */
 E  = 1;  /*写入到LCM*/
 _nop_();
 E  = 0;
 _nop_();
}

void LcmClear( void )
{
 Page = 0;
 Col  = 0;
 for(Page=0;Page<8;Page++)
  for(Col=0;Col<192;Col++)
   WriteData(0);
}

void LcmInit( void )
{
 WriteCommandL(0x3f); //开显示
 WriteCommandM(0x3f);
 WriteCommandR(0x3f);

 WriteCommandL(0xc0); //设置起始地址=0
 WriteCommandM(0xc0);
 WriteCommandR(0xc0);

 WriteCommandL(0x3f); //开显示
 WriteCommandM(0x3f);
 WriteCommandR(0x3f);

 LcmClear();
 Col = 0;
 Page= 0;
 Locatexy();
}

void LcmPutDots( unsigned char DotByte )
{
 Page = 0;
 Col  = 0;
 for(Page=0;Page<8;Page++)
 {
  for(Col=0;Col<192;Col++)
  {
   WriteData( DotByte );
   DotByte = ~DotByte;
  }
 }
}

void LcmPutBMP( unsigned char *puts )
{
 unsigned int X=0;
 Page = 0;
 Col  = 0;
 for(Page=0;Page<8;Page++)
 {
  for(Col=0;Col<192;Col++)
  {
   WriteData( puts[X] );
   X++;
  }
 }
}

void LcmReverseBMP( void )
{
 unsigned char temp;
 Page = 0;
 Col  = 0;
 for(Page=0;Page<8;Page++)
 {
  for(Col=0;Col<192;Col++)
  {
   temp = ReadData(); //空读一次

⌨️ 快捷键说明

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