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

📄 lcd_display.c

📁 万年历代码
💻 C
字号:
//************以下为液晶与凌阳SPCE061A的接线图******************
//
//              VDD|--------------------|VCC
//             LED+|--------------------|VCC
//             LED-|--------------------|GND
//              VSS|--------------------|GND
//          DB0~DB7|--------------------|PA.0~PA.7
//               RS|--------------------|PA.8
//               RW|--------------------|PA.9
//                E|--------------------|PA.10

//              RST|--------------------|PA.11
//
//***********以下为各控制端口与单片机的对应关系****************

#include "SPCE061A.H"
#define		uint		unsigned int

#define	set_RS	*P_IOA_Data|=0x0100		//数据RS=1
#define	clr_RS	*P_IOA_Data&=0xfeff		//指令RS=0

#define	set_RW	*P_IOA_Data|=0x0200		//读RW=1
#define	clr_RW	*P_IOA_Data&=0xffdf		//写RW=0

#define	set_E	*P_IOA_Data|=0x0400		//有效E=1
#define	clr_E	*P_IOA_Data&=0xfbff		//无效E=0


//*************************************************************
//本文件为液晶DM12232F的Drive文件,包含初始化,写数据,写指令程序
//
//		void wr_comm(uint comm)
//		void wr_data(uint data)
//		void LCD_init()
//		void chk_busy()
//
//山东大学曹香鹏
//文件最后维护时间:2007.07.20
///////////////////////////////////////////////////////////////////////////////////////////


extern unsigned int ascNow[14];

//******************************测试忙信号程序***************
void chk_busy()
{
	*P_IOA_Dir&=0xff7f;
	
	clr_RS;
	set_RW;
	set_E;
	
	while(*P_IOA_Data&0x0080)*P_Watchdog_Clear=1;
	
	*P_IOA_Dir|=0x0080;
	
}
//***************************向LCD写入指令**********************
void wr_comm(uint comm)
{//comm为待写入的指令
	
	chk_busy();
	*P_IOA_Data=comm;//写入的数据
	set_E;//E=1
	__asm("nop");//nop
	clr_E;//E=0
//	delay(200);//延时以防BUSY
}
//***************************向LCD写入字符**********************
void wr_data(uint data)
{		//字符得一次写入
 		//汉字则要求分两次写入
 	chk_busy();
	*P_IOA_Data=0x0100;//RW=0 RS=1
	*P_IOA_Data+=data;
	set_E;//E=1
	__asm("nop");//nop
	clr_E;//E=0
	
}
//***************************LCD初始化程序************************
void LCD_init()	
{//LCD_init
	
	unsigned char* year="年";
	unsigned char* month="月";
	unsigned char* date="日";
	unsigned char* day="星期";
	
	wr_comm(0x0030);//功能设置:一次送8位数据,基本指令集
//	delay(100);
	wr_comm(0x0006);//点设定:显示字符/光标从左到右移位,DDRAM地址加1
	wr_comm(0x000c);//显示设定:开显示,显示光标,当前显示位反白闪动
	wr_comm(0x0001);//清DDRAM
	wr_comm(0x0002);//DDRAM地址归位
	wr_comm(0x0080);//把显示地址设为0X80,即为第一行的首位
		
	//以下显示时,分,秒,星期,年,月,日,
	wr_comm(0x81);wr_data(year[0]);wr_data(year[1]);//XX年
	wr_comm(0x83);wr_data(month[0]);wr_data(month[1]);//XX月
	wr_comm(0x85);wr_data(date[0]);wr_data(date[1]);//XX日
	wr_comm(0x91);wr_data(':');	wr_data(' ');wr_data(' ');wr_data(':');//XX时XX分XX秒
	wr_comm(0x94);wr_data(day[0]);wr_data(day[1]);wr_data(day[2]);wr_data(day[3]);//星期XX
	
	//写入自己的信息,哈哈哈哈
	wr_comm(0x86);wr_data(' ');wr_data('x');wr_data('p');
	
	
}



//以下写计时程序
void wr_year()
{//写年
	wr_comm(0x80);
	wr_data(ascNow[12]);
	wr_data(ascNow[13]);
}
void wr_month()
{//写月
	wr_comm(0x82);
	wr_data(ascNow[8]);
	wr_data(ascNow[9]);
}
void wr_date()
{//写日
	wr_comm(0x84);
	wr_data(ascNow[6]);
	wr_data(ascNow[7]);
}


void wr_hour()
{//写时	
	wr_comm(0x90);
	wr_data(ascNow[4]);
	wr_data(ascNow[5]);
}
void wr_minute()
{//写分
	wr_comm(0x91);
	wr_data(':');
	wr_data(ascNow[2]);
	wr_data(ascNow[3]);
}
void wr_second()
{//写秒
	wr_comm(0x93);
	wr_data(ascNow[0]);
	wr_data(ascNow[1]);
}

void wr_day()
{//写上星期
	int i;
	unsigned char* day7="日一二三四五六";
	
	i=ascNow[11]-0x30;
	wr_comm(0x96);
	wr_data(day7[2*i]);
	wr_data(day7[2*i+1]);		
	
}



//以下写LCD每半秒的刷新程序
void flash_LCD()
{
	wr_year();
	wr_month();
	wr_date();
	wr_hour();
	wr_minute();
	wr_second();
	wr_day();
}

⌨️ 快捷键说明

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