lcdp.c

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

C
141
字号
/*--------------------------------
  lcd display 16x2 chinese
  driver chip st7920
  2002.12.28
----------------------------*/
#include <stdlib.h>
#include <ctype.h>
#include <intrins.h>
#include <AT89X52.H>
#include <absacc.h>
#include "charger.h"
//---------------------------------------
//define signal connection 
//---------------------------------------
#define   LCDRS       T0
#define   LCDRW       P1_7
#define   ENABLE      T1
#define   DATABUS     XBYTE[0x6000]

extern void delay(unsigned int i);
static void isBusy(void);


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

void WD_LCD(unsigned char ch)
{
 	isBusy();
  LCDRS=1;
	_nop_();
	_nop_();
	_nop_();
  LCDRW=0;
	_nop_();
	_nop_();
	_nop_();
  DATABUS=ch;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ENABLE=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
  ENABLE=0;
	_nop_();
	_nop_();
}
//---------------------------------
//write lcd controll register
void WC_LCD (unsigned char command)
{
 	isBusy();
	LCDRS=0;
	_nop_();
	LCDRW=0;
	_nop_();
	_nop_();
	DATABUS=command;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ENABLE=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	ENABLE=0;
}
//----------------------------------------------
//LCD busy check ,check busy flag,read acc
//#pragma DISABLE

static void isBusy(void)
{
unsigned char data i;
for(i=100;i--;);
RESET_DOG;

 /*
 unsigned char data i;
 i=ACC;
 P8255D=0x90;//AiBoCo;
 P0=0x0ff;
 _nop_();
 LCDRS=0;
 LCDRW=1;
 _nop_();
 ENABLE=1;
 _nop_();
do { ACC=DATABUS;  } while(BUSYFLAG);
 ENABLE=0;
 P8255D=0x80;//AoBoCo;
	ACC=i;
	*/
}
//------------------------------------------------
//init lcd

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


//---------------------------
//display string

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

⌨️ 快捷键说明

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