📄 jg12864m.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 + -