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

📄 jg12864m.c

📁 可编程彩色光频转换器TCS230在61单片机上的应用
💻 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	CS_12864_1() 	{*P_IOA_Data|=0x0010;}
#define	CS_12864_0() 	{*P_IOA_Data&=0xffef;}
#define	SID_12864_1() 	{*P_IOA_Data|=0x0020;}
#define	SID_12864_0() 	{*P_IOA_Data&=0xffdf;}
#define	CLK_12864_1() 	{*P_IOA_Data|=0x0040;}
#define	CLK_12864_0() 	{*P_IOA_Data&=0xffbf;}
#define	PSB_12864_1() 	{*P_IOA_Data|=0x0080;}
#define	PSB_12864_0() 	{*P_IOA_Data&=0xff7f;}*/

//接B口的B12--B15
/*#define	CS_12864_1() 	{*P_IOB_Data|=0x1000;}//rs
#define	CS_12864_0() 	{*P_IOB_Data&=0xefff;}
#define	SID_12864_1() 	{*P_IOB_Data|=0x2000;}//rw
#define	SID_12864_0() 	{*P_IOB_Data&=0xdfff;}
#define	CLK_12864_1() 	{*P_IOB_Data|=0x4000;}//e
#define	CLK_12864_0() 	{*P_IOB_Data&=0xbfff;}
#define	PSB_12864_1() 	{*P_IOB_Data|=0x8000;}
#define	PSB_12864_0() 	{*P_IOB_Data&=0x7fff;}*/

//接B口的B13--B15
/*#define	CS_12864_1() 	{*P_IOB_Data|=0x2000;}//rs
#define	CS_12864_0() 	{*P_IOB_Data&=0xdfff;}

#define	SID_12864_1() 	{*P_IOB_Data|=0x4000;}//rw
#define	SID_12864_0() 	{*P_IOB_Data&=0xbfff;}

#define	CLK_12864_1() 	{*P_IOB_Data|=0x8000;}//e
#define	CLK_12864_0() 	{*P_IOB_Data&=0x7fff;}*/

//#define	CS_12864_1() 	B0=1//rs
//#define	CS_12864_0() 	B0=0

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

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

//uint CGRAM[64][8];
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;
//CS_12864_1();
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)
//写指令
{
//CS_12864_1();
sendbyte_12864(CM_wcomm);
sendbyte_12864(command&0xf0);
sendbyte_12864((command&0x0f)<<4);
}

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

void Reset12864(void)
//初始化12864
{
//PSB_12864_0();
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);
}

/*void DrawWord(uint x,uint y,uint draw_data)
//画一条16位的线条
{

uint x1,y1;
if(x<0x88)
	{
	x1=x-0x80;
	y1=y-0x80;
	}
else 
	{
	x1=x-0x88;
	y1=y-0x80+32;
	}
CGRAM[y1][x1]=draw_data;

WriteCommand12864(0x30);//功能设置---8BIT控制界面,绘图显示OFF
WriteCommand12864(0x34);//功能设置---8BIT控制界面,扩充指令集
WriteCommand12864(y);//设置绘图区的Y地址坐标
WriteCommand12864(x);//设置绘图区的X地址坐标
WriteData12864((draw_data&0xff00)>>8);//线条数据
WriteData12864(draw_data&0xff);//线条数据
WriteCommand12864(0x32);//功能设置---8BIT控制界面,绘图显示ON
WriteCommand12864(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}

void DrawDot(uint x,uint y,uint bit)
//画点
//x:0~128
//y:0~64
{
uint Temp;
uint x1,x2;
x1=x/16;
x2=x%16;
Temp=CGRAM[y][x1];
Temp=Temp&(~(0x80>>x2));
Temp=Temp|(bit<<(15-x2));
if(y>31){x1=x1+0x88;y=y-32+0x80;}
else {x1=x1+0x80;y=y+0x80;}
DrawWord(x1,y,Temp);
}

void DrawPic(uint *pdraw)
//画静态图象
{uint x,y,k=0;
uint yaddr=0x80;
WriteCommand12864(0x30);//功能设置---8BIT控制界面,绘图显示OFF
WriteCommand12864(0x34);//功能设置---8BIT控制界面,扩充指令集
for(y=0;y<32;y++)
	{
	WriteCommand12864(yaddr++);//设置绘图区的Y地址坐标
	WriteCommand12864(0x80);//设置绘图区的X地址坐标
	for(x=0;x<8;x++)
		{
		WriteData12864(((pdraw[k])&0xff00)>>8);
		WriteData12864((pdraw[k++])&0xff);
		}
	}
yaddr=0x80;
for(y=0;y<32;y++)
	{	
	WriteCommand12864(yaddr++);//设置绘图区的Y地址坐标
	WriteCommand12864(0x88);//设置绘图区的X地址坐标
	for(x=0;x<8;x++)
		{
		WriteData12864(((pdraw[k])&0xff00)>>8);
		WriteData12864((pdraw[k++])&0xff);
		}
	}
WriteCommand12864(0x32);//功能设置---8BIT控制界面,绘图显示ON
WriteCommand12864(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}

void ClearDrawPanel()
//画图显示用的清屏函数
{int x,y;
uint yadrr=0x80;
WriteCommand12864(0x30);//功能设置---8BIT控制界面,绘图显示OFF
WriteCommand12864(0x34);//功能设置---8BIT控制界面,扩充指令集
for(y=0;y<32;y++)
	{ 
		WriteCommand12864(yadrr++);//设置绘图区的Y地址坐标
		WriteCommand12864(0x80);//设置绘图区的Y地址坐标
		for(x=0;x<16;x++)
		{
		WriteData12864(0x00);//线条数据
		}
	}
yadrr=0x80;
for(y=0;y<32;y++)
	{
		WriteCommand12864(yadrr++);//设置绘图区的Y地址坐标
		WriteCommand12864(0x88);//设置绘图区的x地址坐标
		for(x=0;x<16;x++)
		{
		WriteData12864(0x00);//线条数据
		}
	}
WriteCommand12864(0x32);//功能设置---8BIT控制界面,绘图显示ON
WriteCommand12864(0x36);//功能设置---8BIT控制界面,绘图显示OFF
}

uint CGRAM[64][8]=
{
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
};*/





⌨️ 快捷键说明

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