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