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

📄 lcd3310.c

📁 使用单片机STC89C52驱动NOKIA3310
💻 C
字号:
//定义液晶数据信号
sbit	SCLK		= P1^4;			//时钟
sbit	SDIN		= P1^3;			//数据
sbit	D_C		= P1^2;			//1写数据,0写指令
sbit	SCE		= P1^1;			//片选
sbit	RES		= P1^0;			//0复位

void Init_Lcm(void);								//LCM初始化
void yuyin(uchar);								//语音
void Lcm_Writebyte(uchar,uchar);						//写一字节
void WriterDOT_M_N(uchar,uint,uchar,uchar,uchar,uchar);				//写骰子数据
void DeleteDOT_M_N(uchar,uchar,uchar,uchar);					//清除骰子显示数据
void shz_xzh(uchar,uchar);							//两骰子全屏旋转
void Lcm_Clr(void);								//清全屏

//LCM初始化
void Init_Lcm(void)
{
	RES=0;							//0复位
	_delay_ms(50);
	RES=1;
	SCE=0;							//使能LCD
	Lcm_Writebyte(0x21,0);					//初始化Lcd,功能设定使用扩充指令
	Lcm_Writebyte(0xC8,0);					//设定液晶偏置电压(高--低)
	Lcm_Writebyte(0x06,0);					//设定温度系数
	Lcm_Writebyte(0x15,0);					//1:24,设置屏幕亮度
	Lcm_Writebyte(0xD0,0);					//设定Vop,设置屏幕亮度
	Lcm_Writebyte(0x20,0);					//使用基本指令
	Lcm_Writebyte(0x0C,0);					//设定显示模式,正常显示
} 
//写一字节 mod=0,命令模式
void Lcm_Writebyte(uchar datatemp,uchar mod)
{
	uchar i=8;
	D_C=mod;
	while(i--)
	{
		SDIN=datatemp&0x80;
		SCLK=0;
		SCLK=1;
		datatemp<<=1;
	}
}
/************************************************
写数据
n=数据偏移量,dot_y=行地址,dot_x=列地址,fan=0时取反
*************************************************/
void WriterDOT_M_N(uchar fan,uint n,uchar dot_y,uchar dot_x,uchar M,uchar N)
{
	uchar i,j,k=0,ramtemp;
	for(i=0;i<M;i++)							//输出M行
	{
		Lcm_Writebyte(((i+dot_y)|0x40),0);
		Lcm_Writebyte((dot_x|0x80),0);
		for(j=0;j<N;j++)						//输出N列
		{
			ramtemp=BMP_Bytes[j+k*N+n];
			if(fan)
				ramtemp=~ramtemp;
			Lcm_Writebyte(ramtemp,1);
		}
		k++;
	}
}
/**********************************************
清除显示数据
n=数据偏移量,dot_y=页地址,dot_x=列地址
***********************************************/
void DeleteDOT_M_N(uchar dot_y,uchar dot_x,uchar M,uchar N)
{
	uchar i,j;
	for(i=0;i<M;i++)							//输出M页
	{
		Lcm_Writebyte(((i+dot_y)|0x40),0);
		Lcm_Writebyte((dot_x|0x80),0);
		for(j=0;j<N;j++)						//输出N个字节
		{
			Lcm_Writebyte(0,1);
		}
	}
}
/*********************************************
两骰子全屏旋转
i,j分别为两骰子显示点数
**********************************************/
void shz_xzh(uchar h,uchar g)
{
	uchar i;
	for(i=8;i<46;i+=37)
	{
		WriterDOT_M_N(0,h*90,0,i,3,30);				//1:第0行右移,2:第3行左移
		WriterDOT_M_N(0,g*90,3,(53-i),3,30);
		_delay_ms(650);
		DeleteDOT_M_N(0,i,3,30);
		DeleteDOT_M_N(3,(53-i),3,30);
	}

	WriterDOT_M_N(0,h*90,2,53,3,30);				//1:第53列下移,2:第0列上移
	WriterDOT_M_N(0,g*90,2,0,3,30);
	_delay_ms(650);
	DeleteDOT_M_N(2,53,3,30);
	DeleteDOT_M_N(2,0,3,30);

	for(i=8;i<46;i+=37)
	{
		WriterDOT_M_N(0,h*90,3,(53-i),3,30);		//1:第3行左移,2:第0行右移
		WriterDOT_M_N(0,g*90,0,i,3,30);
		_delay_ms(650);
		DeleteDOT_M_N(3,(53-i),3,30);
		DeleteDOT_M_N(0,i,3,30);
	}

	WriterDOT_M_N(0,h*90,2,0,3,30);					//1:第0列上移,2:第53列下移
	WriterDOT_M_N(0,g*90,2,53,3,30);
	_delay_ms(650);
	DeleteDOT_M_N(2,0,3,30);
	DeleteDOT_M_N(2,53,3,30);
}
//清全屏
void Lcm_Clr(void)
{
	uchar m,n;
	Lcm_Writebyte(0x40,0);
	Lcm_Writebyte(0x80,0);
	for(m=0;m<6;m++)
	{
		for(n=0;n<84;n++)
		{
			Lcm_Writebyte(0,1);
		}
	}
}

⌨️ 快捷键说明

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