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

📄 lcd_backup.c

📁 基于跳转表的LCD目录跳转C程序
💻 C
字号:
#include<pic.h>    //Vo pin---Voltage about 0.6V is engough!!!
__CONFIG(0X3FF9);
void Delay1ms();
void DelayNms(unsigned int);
void Toggle();
unsigned char ReadBF();
void WRCommand(unsigned char);
void WRData(unsigned char);
unsigned char RDData();
void Init_LCD();
void DisplayChar(const unsigned char *str,unsigned char len,unsigned char x,unsigned char y);
void SetCGRAM(const unsigned char *,unsigned char);
void CursorScroll(unsigned char,unsigned char,unsigned char,unsigned char);
void ScreenScroll(unsigned char);
void ReturnHome();
void CleanScreen();
void HideCursor();
void Init_IO();

#define LEFT 0
#define RIGHT 1
struct Tree
{
	unsigned char mark[4];
	int value;
	unsigned char *TitleName;
};
const unsigned int delay=100;   //serve for function"Delay1ms"
const unsigned char string[11]={0x57,0x45,0x4c,0x43,0x4f,0x4d,0x45,0x20,0x59,0x4f,0x55};


/*MAIN*/
void main()
{
	DelayNms(1000);
	Init_IO();
	Init_LCD();
	CleanScreen();
	DisplayChar(string,11,1,1);
	DisplayChar(string,11,0,0);
	HideCursor();
	for(;;)ScreenScroll(RIGHT);
}
/*Build Title*/
void BuildTitle()
{
	Title 


/*delay 1ms*/
void Delay1ms()
{
	unsigned int d=delay;
	while(--d){;}
}
/*delay N ms*/
void DelayNms(unsigned int n)
{
	unsigned int i;
	for(i=n;i--;)
		Delay1ms();
}
/*Produce a SignalE Toggle */
void Toggle()
{
	RD7=1;      //E=1
	RD7=0;		//E=0
//	DelayNms(3);
}
/*Read the busy Flag*/
unsigned char ReadBF()
{
	unsigned char temp;
	TRISC=0XFF;
	while(1)
	{
		RD5=0;      //RS=0
		RD6=1;      //R/W=1
		RD7=1;      //E=1
		temp=PORTC;	//READ THE BF AND ADD
		RD7=0;      //E=0;
		if(RC7==0) break;
	}
	return temp;
}
/*Write command code*/
void WRCommand(unsigned char command)
{	
	ReadBF();
	TRISC=0;
	RD6=0;		//R/W=0
	PORTC=command;
	Toggle();
}
/*Write Display Data*/
void WRData(unsigned char data)
{
	ReadBF();
	TRISC=0;
	RD5=1;		//RS=1
	RD6=0;		//R/w=0	
	PORTC=data;
	Toggle();
}
/*Read display data */
unsigned char RDData()
{
	unsigned char data;
	ReadBF();
	RD5=1;		//RS=1
	RD6=1;		//R/W=1
	RD7=1;		//E=1
	data=PORTC;
	RD7=0;
	return data;
}
/*initial LCD*/
void Init_LCD()
{
	TRISC=0X00;
	PORTC=0X30;
	RD5=0;		//RS=0
	RD6=0;		//R/W=0
	Toggle();
	DelayNms(5);
	
	PORTC=0X30;
	RD5=0;		//RS=0
	RD6=0;		//R/W=0
	Toggle();
	Delay1ms();

	PORTC=0X30;
	RD5=0;
	RD6=0;
	Toggle();
	DelayNms(2);

	WRCommand(0x38);	//8-bit bus,2 line display,5*8 pixel
	WRCommand(0x08);	//Display Off
	WRCommand(0x01);	//Clean Screen
	DelayNms(20);
	WRCommand(0x06);	//pattern not move,cursor move right
	WRCommand(0x0F);	//display,cursor,blast
}
/*Display Character String*/
void DisplayChar(const unsigned char *str,unsigned char len,unsigned char x,unsigned char y)
{			//str--name of the array;len--length of array;x--x axis;y--y axis
			//if the output char contain CGRAM,must run SetCGRAM first
	unsigned char i,pointer=0x80+x+y*64;
	WRCommand(pointer);         
	for(i=0;i<len;i++)
		WRData(str[i]);
}
/*Build custom character model union*/
void SetCGRAM(const unsigned char *str,unsigned char len)
{
	unsigned char i;
	WRCommand(0x40);   //the beginning address of CGRAM
	for(i=0;i<len;i++)
		WRData(str[i]);
}
/*Move cursor*/
void CursorScroll(unsigned char direction,unsigned char x,unsigned char y,unsigned char len)
{
	unsigned char i,pointer=0x80+x+y*64;
	WRCommand(pointer);
	for(i=0;i<len;i++)
	{
		if(direction==LEFT) WRCommand(0x10);
		else WRCommand(0x14);
		DelayNms(200);
	}
}
/*Screen scroll*/
void ScreenScroll(unsigned char direction)  //circularly move
{
	while(1)
	{
		if(direction==LEFT) WRCommand(0x18); //Left scroll
		else WRCommand(0x1C); 				 //Right scroll
		DelayNms(600);
	}
}
/*Return to initial position*/
void ReturnHome()
{
	WRCommand(0x02);
}
/*clean screen*/
void CleanScreen()
{
	WRCommand(0x01);
}
/*hide cursor*/
void HideCursor()
{
	WRCommand(0x0c);
}
/*initial I/O PORTs*/
void Init_IO()
{
	TRISD=0X00;
	TRISC=0X00;
}

	


⌨️ 快捷键说明

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