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

📄 main.c

📁 三星ARM的Linux系统下的LCD程序
💻 C
字号:
//******************************************************
//Beijing Winsilicon Technology LT.CO,
//File Name:	main.c
//Description: 	LCD Test
//Author:	JuGuang,Lee
//Date:		
//******************************************************
#include 	"char.h"

#define LCD_Base1_I	(*(volatile unsigned char *)0x03F00040) //LCD左半屏指令地址
#define LCD_Base1_D	(*(volatile unsigned char *)0x03F00044) //LCD左半屏数据地址
#define LCD_Base2_I	(*(volatile unsigned char *)0x03F00050) //LCD右半屏指令地址 
#define LCD_Base2_D	(*(volatile unsigned char *)0x03F00054) //LCD右半屏数据地址 

void Delay(unsigned int);
void LCDInit(void);
void LCDTest(unsigned char Data);
void DispData(unsigned char);
void SetPageAddress(unsigned char);
void SetY(unsigned char);
void DispChinese(unsigned char Data[],int Pos,int Line,int Index);

//*********************************************************
//函数名:	C_Entry();
//描述:	循环显示汉字信息;
//参数:	无;
//返回值:	0;
//*********************************************************
int  C_Entry()
{	
//LCD初始化;
	LCDInit(); 
	while(1)
		{
//显示第一行的信息;
		LCDTest(0x00);
		DispChinese(ChE,0,0,0);
		DispChinese(Ch2,0,0,1);

		DispChinese(Ch3,0,0,2);
		DispChinese(Ch4,0,0,3);
		DispChinese(Ch5,1,0,0);
		DispChinese(Ch6,1,0,1);
		DispChinese(ChE,1,0,2);
		DispChinese(ChE,1,0,3);
//显示第二行的信息;
		DispChinese(ChE,0,1,0);
		DispChinese(ChE,0,1,1);
		DispChinese(ChE,0,1,2);
		DispChinese(ChE,0,1,3);
		DispChinese(ChE,1,1,0);
		DispChinese(ChE,1,1,1);
		DispChinese(ChE,1,1,2);
		DispChinese(ChE,1,1,3);
//显示第三行的信息;
		DispChinese(ChE,0,2,0);
		DispChinese(Ch7,0,2,1);
		DispChinese(Ch8,0,2,2);
		DispChinese(Ch9,0,2,3);
		DispChinese(Ch10,1,2,0);
		DispChinese(Ch11,1,2,1);
		DispChinese(Ch12,1,2,2);
		DispChinese(Ch13,1,2,3);
//显示第四行的信息;
		DispChinese(ChE,0,3,0);
		DispChinese(ChE,0,3,1);
		DispChinese(ChE,0,3,2);
		DispChinese(ChE,0,3,3);
		DispChinese(ChE,1,3,0);
		DispChinese(ChE,1,3,1);
		DispChinese(ChE,1,3,2);
		DispChinese(ChE,1,3,3);

		Delay(500000);
		}
	return 0;	
}

//*********************************************************
//函数名:	Delay();
//描述:	软件延时;
//参数:	延时时间;
//返回值:	无;
//*********************************************************
void Delay(unsigned int x)
{
	int i;
	for(i=0;i<x;i++);	
}

//*********************************************************
//函数名:	DispChinese();
//描述:	在LCD屏的某个位置显示一个16×16点阵的汉字;
//参数:	汉字字模;左右半屏选择;行信息;列信息
//返回值:	无;
//*********************************************************
void DispChinese(unsigned char Data[],int Pos,int Line,int Index)
{
	int i;
	if(Pos==0)
		{SetPageAddress(0xB8+Line*2);
		SetY(0x40+16*Index);
		for(i=0;i<16;i++){
			LCD_Base1_D=Data[i];
			Delay(5000);
			}
	
		SetPageAddress(0xB9+Line*2);
		SetY(0x40+16*Index);
		for(i=16;i<32;i++){
			LCD_Base1_D=Data[i];
			Delay(5000);
			}
		}
	else
		{SetPageAddress(0xB8+Line*2);
		SetY(0x40+16*Index);
		for(i=0;i<16;i++){
			LCD_Base2_D=Data[i];
			Delay(5000);
			}
	
		SetPageAddress(0xB9+Line*2);
		SetY(0x40+16*Index);
		for(i=16;i<32;i++){
			LCD_Base2_D=Data[i];
			Delay(5000);
			}
		}

}

//*********************************************************
//函数名:	DispData();
//描述:	向显示缓冲区写入一个字符;
//参数:	写入的字符信息;
//返回值:	无;
//*********************************************************
void DispData(unsigned char Data)
{
	int i;
	for(i=0;i<64;i++){
		LCD_Base1_D=Data;
		Delay(1000);
		LCD_Base2_D=Data;
		Delay(1000);
		}
}

//*********************************************************
//函数名:	LCDInit();
//描述:	初始化LCD显示屏;
//参数:	无;
//返回值:	无;
//*********************************************************
void LCDInit()
{
//首先关闭左、右半屏		
	LCD_Base1_I=0x3E;
	Delay(5000);
	LCD_Base2_I=0x3E;
	Delay(5000);
//然后打开
	LCD_Base1_I=0x3F;
	Delay(5000);
	LCD_Base2_I=0x3F;
	Delay(5000);
//设置起始行数
	LCD_Base1_I=0xC0;
	Delay(5000);
	LCD_Base2_I=0xC0;
	Delay(5000);
//设置Y地址(Y=0)
	LCD_Base1_I=0x40;
	Delay(5000);
	LCD_Base2_I=0x40;
	Delay(5000);
	return;
}

//*********************************************************
//函数名:	LCDTest();
//描述:	向全屏发送同一个字符,用于测试;
//参数:	要发送的字符;
//返回值:	无;
//*********************************************************
void LCDTest(unsigned char Data)
{
	int i;
	for(i=0;i<8;i++)
		{SetPageAddress(0xB8+i);
		DispData(Data);}

}

//*********************************************************
//函数名:	SetY();
//描述:	设置Y地址;
//参数:	Y地址信息;
//返回值:	无;
//*********************************************************
void SetY(unsigned char YAddress)
{
	LCD_Base1_I=YAddress;
	Delay(5000);
	LCD_Base2_I=YAddress;
	Delay(5000);
}

//*********************************************************
//函数名:	SetPageAddress();
//描述:	设置页地址;
//参数:	页地址信息;
//返回值:	无;
//*********************************************************
void SetPageAddress(unsigned char PageAddress)
{
	LCD_Base1_I=PageAddress;
	Delay(5000);
	LCD_Base2_I=PageAddress;
	Delay(5000);
}

⌨️ 快捷键说明

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