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

📄 lcm.c

📁 LCM1601A的驱动程序 由CCS3.1开发
💻 C
字号:
/*=========================================
Title:	 Lcm_C
Author:	DAI,daihj07@mails.tsinghua.edu.cn,DME@THU
Date:	Dec 20,2007
version: v1.0
funciton:带字库液晶显示模块LCM1601A
===========================================*/

/*=========================================
07.12.25
Show_Left;Show_right edited
ShowLine added
===========================================*/
#include "lcm.h"
#include "LF2407REGS.h"

void	ReadDB(int bDat)
{//输入
//	*PBDATDIR&=0x000FF;
//	bDat=(*PBDATDIR&0x00FF);

}
void WriteDB(int bDat)
{//输出
	*PBDATDIR&=0xFFF0;
	*PBDATDIR|=(bDat&0x000F);
	*PEDATDIR&=0xFFF0;
	*PEDATDIR|=((bDat>>4)&0x000F);
}


void lcm_Delay(int ms)
{
	int i=5000;//5000;
	for(;ms>0;ms--)
	{
	for(;i>0;i--)
	{
	asm("     nop  ");
	}
	}
}

void LcmWrCmd(unsigned long comm)
{
	int dat;

	//关中断
	asm("	setc	INTM");//禁止所有中断

	CLR_RW;
	CLR_RS;
	WriteDB(comm);
	lcm_Delay(100);
	SET_E;
	lcm_Delay(100);
	CLR_E;
	lcm_Delay(100);
	asm("	clrc	INTM");//开中断
}

//写数据到数据寄存器
void LcmWrData(unsigned long data)
{
	//关中断
	
	SET_RS;
	CLR_RW;	
	asm("	setc	INTM");//禁止所有中断
	CLR_E;
	WriteDB(data);
	lcm_Delay(100);
	SET_E;
	lcm_Delay(100);
	CLR_E;
	asm("	clrc	INTM");//开中断
	lcm_Delay(100);
	
} 

void LcmIoInitial()//
{
//		#define LCM_RS  _PADATDIR.bit7
	_MCRA.bit7=0;
	_PADATDIR.bit15=1;
	_PADATDIR.bit7=0;
//		#define LCM_RW _PEDATDIR.bit4
	_MCRC.bit4=0;
	_PEDATDIR.bit12=1;
	_PEDATDIR.bit4=0;
//		#define LCM_E  _PADATDIR.bit6
	_MCRA.bit6=0;
	_PADATDIR.bit14=1;
	_PADATDIR.bit6=0;
//定义IOPB0-3;IOPE0-3输出
	*MCRA&=0xF0FF;
	*PBDATDIR|=0x0F00;
	*MCRC&=0xFFF0;
	*PEDATDIR|=0x0F00;
}

void LcmInitial()
{

	LcmIoInitial();
	lcm_Delay(4000);//>40ms
//	LcmWrCmd(0x38);
	LcmWrCmd(0x38);	//1100=C
	//设置工作方式8bit, 2line, 5*10dots	function set, db2(F):1 display on
	//DB3(N)	1:2-line	0,1 line
	//DB4	1	DB5 1
	
	//写过ox38后,显示屏变暗?
	lcm_Delay(1000);			
	LcmWrCmd(0x06);//设置输入方式0110	entry mode set, cursor moving direction increasment;
	lcm_Delay(1000);			
	LcmWrCmd(0x01);//清屏
	lcm_Delay(1000);			
	LcmWrCmd(0x0C);//设置显示方式1100	display on/off control set display
	lcm_Delay(1000);			
	LcmWrCmd(0x02);	//地址归零
	lcm_Delay(1000);	
	
}//Initial

	void DisLeft(unsigned long number[])
	{
	int i;
	LcmIoInitial();

		LcmWrCmd(0x80);
		for(i=0;i<8;i++)
		{
			LcmWrData(number[i]);
		}
	}

	void DisRight(unsigned long number[])
	{
		int i;
	LcmIoInitial();


		LcmWrCmd(0xC0);
		for(i=0;i<8;i++)
		{
			LcmWrData(number[i]);
		}
	}

⌨️ 快捷键说明

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