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

📄 jg12864m.c

📁 SPCE061A 十六位DSP型单片机的12864液晶显示
💻 C
字号:
/*********************************************************
选择F_CPU=49.152M
对外接口函数:
void Reset12864(void);
*********************************************************/
#include <spce061a.h>
#include <MyBit.h>

#define		P_Watchdog_Clear		(volatile unsigned int *)0x7012

#define uint   unsigned int

//串行写法第一字节
#define CM_rdata	0xfe
#define CM_rcomm	0xfc
#define CM_wdata	0xfa
#define CM_wcomm	0xf8

//指令
#define ClearDDRAM	0x01
#define AddrBack	0x02
#define AddrBack_1	0xf8

#define uint unsigned int

#define	RST_12864_1() 	A2=1//rst
#define	RST_12864_0() 	A2=0

#define	SID_12864_1() 	A0=1//rw
#define	SID_12864_0() 	A0=0

#define	CLK_12864_1() 	A1=1//e
#define	CLK_12864_0() 	A1=0

uint DDRAM[4][16]=
{
	' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
	' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
	' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
	' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
};			//在指定位置显示字符的时候需要用到的缓冲区域

void delay10ms(void);
void sendbyte_12864(uint sendbyte);
void WriteCommand12864(uint command);
void WriteData12864(uint wrdata);
void Reset12864(void);
void LocateXY12864(uint x,uint y);
void DispTwoChar(uint x,uint y,uint char1,uint char2);
void DispWord(uint x,uint y,uint *pstr);

void delay10ms(void)
//延时10ms
{
delay_xms(177);
}

void delay1us(void)
//大约延时1.6us
{
delay_xus(10);
}

void sendbyte_12864(uint sendbyte)
//串行发送一字节
{
uint i;
CLK_12864_0();
delay1us();
for(i=0;i<8;i++)
	{
	if(sendbyte&0x80){SID_12864_1();}
	else {SID_12864_0();}
	delay1us();
	CLK_12864_1();
	sendbyte<<=1;
	CLK_12864_0();
	delay1us();
	}
}

void WriteCommand12864(uint command)
//写指令
{
sendbyte_12864(CM_wcomm);
sendbyte_12864(command&0xf0);
sendbyte_12864((command&0x0f)<<4);
}

void WriteData12864(uint wrdata)
//写数据
{
sendbyte_12864(CM_wdata);
sendbyte_12864(wrdata&0xf0);
sendbyte_12864((wrdata&0x0f)<<4);
}

void Reset12864(void)
//初始化12864
{
RST_12864_0();
delay10ms();
RST_12864_1();
delay10ms();
CLK_12864_0();//复位脉冲
WriteCommand12864(0x30);//功能设置 8位数据,基本指令
delay10ms();
WriteCommand12864(0x0c);//显示状态 ON,游标OFF,反白OFF
delay10ms();
WriteCommand12864(0x01);//清除显示
delay10ms();
WriteCommand12864(0x02);//地址归位
} 

void LocateXY12864(uint x,uint y)
//光标定位
{
uint addr;
switch(y)
	{
	case 0:addr=0x80+x;break;
	case 1:addr=0x90+x;break;
	case 2:addr=0x88+x;break;
	case 3:addr=0x98+x;break;
	default:break;
	}
WriteCommand12864(addr);
}

void DispTwoChar(uint x,uint y,uint char1,uint char2)
//显示两个字符
{
LocateXY12864(x,y);
WriteData12864(char1);
WriteData12864(char2);
}

void DispWord(uint x,uint y,uint *pstr)
{
uint i,t=0;
while(pstr[t]!='\0')t++;
for(i=0;i<(t-1);i++)
	{
	DispTwoChar(x,y,pstr[i],pstr[i+1]);
	i+=1;
	x+=1;
	if(x==8)
		{
		y+=1;
		x=0;
		if(y==4)y=0;
		}
	}

}

void DispChar(uint x,uint y,uint _char)
//x:0~15 y:0~3
{
	uint char1,char2;
	if((x%2)==0)
	{
		char1=DDRAM[y][x]=_char;
		char2=DDRAM[y][x+1];
	}
	else
	{
		char1=DDRAM[y][x-1];
		char2=DDRAM[y][x]=_char;
	}
	DispTwoChar(x/2,y,char1,char2);
}



⌨️ 快捷键说明

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