lcdp.c

来自「一个充电控制器的完整单片机程序」· C语言 代码 · 共 122 行

C
122
字号
/*--------------------------------
  lcd display 16x2 chinese
  driver chip st7920
  2002.12.28
----------------------------*/
#include <stdlib.h>
#include <ctype.h>
#include <intrins.h>
#include <AT89X52.H>

#include "LCDP.H"

extern void delay(unsigned int i);
//---------------------------
//display string
static void isBusy(void);

void text(unsigned char sta,unsigned char *string)
{
	if(sta)WC_LCD(sta);
	while(*string)WD_LCD(*string++);
}

#pragma NOAREGS

//-------------------------------
//LCD display char,write data to LCD ram

#pragma DISABLE

void WD_LCD(unsigned char ch)
{
 	isBusy();
  LCDRS=1;
  LCDRW=0;
	_nop_();
	_nop_();
  P0=ch;
	_nop_();
	_nop_();
	ENABLE=1;
	_nop_();
	_nop_();
	_nop_();
  ENABLE=0;
	_nop_();
	_nop_();
}
//---------------------------------
//write lcd controll register

#pragma DISABLE

void WC_LCD (unsigned char command)
{
 	isBusy();
	LCDRS=0;
	_nop_();
	LCDRW=0;
	_nop_();
	_nop_();
	P0=command;
	_nop_();
	_nop_();
	ENABLE=1;
	_nop_();
	_nop_();
	_nop_();
	ENABLE=0;
	_nop_();
	_nop_();
}
//----------------------------------------------
//LCD busy check ,check busy flag,read acc

static void isBusy(void)
{
 unsigned char data i;
 i=ACC;
 P0=0x0ff;
 _nop_();
 LCDRS=0;
 LCDRW=1;
 _nop_();
 _nop_();
 ENABLE=1;
 _nop_();
 _nop_();
 _nop_();
 do{	ACC=P0;	} while(BUSYFLAG);
 _nop_();
 _nop_();
 ENABLE=0;
	_nop_();
	_nop_();
 ACC=i;
}
//------------------------------------------------
//init lcd

#pragma DISABLE

void clear(void)
{
	WC_LCD(0x18);//base command,8bit
 	isBusy();
	LCDRS=0;
	LCDRW=0;
	_nop_();
	_nop_();
	P0=0x1;
	_nop_();
	ENABLE=1;
	delay(4);
	ENABLE=0;
	_nop_();
	_nop_();
}

#pragma AREGS

⌨️ 快捷键说明

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