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

📄 lcd.c

📁 15寸
💻 C
字号:
#include <at89x52.h>
#include "lcd.h"

sbit dc = 0x96;			//P1.6 LCD的RS  	pin7
sbit rw = 0x95;			//P1.5 LCD的R/W 	pin6
sbit cs = 0x94;			//P1.4 LCD的E   	pin5
sfr lcdbus = 0x80;		//P0   LCD的数据 D0 = P0.0

unsigned char displayPosition = 0;
unsigned char DDRAMAddress = 0;


void softNop(void){}

bit lcd_checkBusy(void)
{
	unsigned char lcdstate;
	dc = 0;
	rw = 1;
	cs = 1;
	softNop();
	lcdstate = lcdbus;
	cs = 0;
	return((bit)(lcdstate & 0x80));
}

void lcd_WCmd(unsigned char lcdCmd)	//write LCD command
{
	while(lcd_checkBusy());
	lcdbus = lcdCmd;
	dc = 0;
	rw = 0;
	cs = 1;
	softNop();
	cs = 0;
	lcdbus = 0xff;
}

void lcd_WData(unsigned char lcddata)
{
	while(lcd_checkBusy());
	lcdbus = lcddata;
	dc = 1;		//dc = 1 为数据,=0 为命令
	rw = 0;		//rw = 1 为读,=0 为写
	cs = 1;		//cs = 1 选通
	softNop();
	cs = 0;
	lcdbus = 0xff;
}

//---------------------------------------------------------
void lcd_setDDRAMAddress(unsigned char DDRAMaddr)
{
	DDRAMAddress = DDRAMaddr;
	lcd_WCmd(DDRAMaddr | 0x80);
   
}

void lcd_cls(void)
{
	lcd_WCmd(0x01);
}

void lcd_string16(unsigned char position,unsigned char *str)
{

    unsigned char i = 0;

	if(position >= 16) position = 0;
	if(position < 8)
	{
		lcd_setDDRAMAddress(position);
	}
	if(position >=8)
	{
		position = position - 8;
		position = position + 0x40;
		lcd_setDDRAMAddress(position);
	}

    DDRAMAddress = position;

	while (str[i] !=0)
	{
		if(DDRAMAddress == 8) lcd_setDDRAMAddress(0x40);
 	    if(DDRAMAddress == 0x48)
	    {
			lcd_setDDRAMAddress(0);
			DDRAMAddress = 0;
		}

		DDRAMAddress ++;
		lcd_WData(str[i]);
		i ++;
	}
}

void lcd_init(void)
{
	lcd_WCmd(0x38);	//8 bit,2 line 5*7
	lcd_WCmd(0x0c);	//
	lcd_WCmd(0x01);	//clear display
	displayPosition = 0;
	DDRAMAddress = 0;
}


⌨️ 快捷键说明

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