📄 rt12864.c
字号:
#define uchar unsigned char
#define uint unsigned int
#define CS_12864 OC4//RS
#define SID_12864 OC5//RW
#define CLK_12864 OC6//E
#define PSB_12864 OC7
#define CS_12864_io RC4
#define SID_12864_io RC5
#define CLK_12864_io RC6
#define PSB_12864_io RC7
#define SID_12864_r IC5
#define CS_12864_1() {CS_12864_io=1;asm("nop");CS_12864=1;}
#define CS_12864_0() {CS_12864_io=1;asm("nop");CS_12864=0;}
#define SID_12864_1() {SID_12864_io=1;asm("nop");SID_12864=1;}
#define SID_12864_0() {SID_12864_io=1;asm("nop");SID_12864=0;}
#define CLK_12864_1() {CLK_12864_io=1;asm("nop");CLK_12864=1;}
#define CLK_12864_0() {CLK_12864_io=1;asm("nop");CLK_12864=0;}
#define PSB_12864_1() {PSB_12864_io=1;asm("nop");PSB_12864=1;}
#define PSB_12864_0() {PSB_12864_io=1;asm("nop");PSB_12864=0;}
//串行写法第一字节
#define CM_rdata 0xfe
#define CM_rcomm 0xfc
#define CM_wdata 0xfa
#define CM_wcomm 0xf8
/***********************************************
函数名:delay_ms
子函数:无
输 入:n
输 出:无
功 能:延迟nMS子程序
------------------------------------------------
************************************************/
void RT12864delay_ms(unsigned int n)
{
unsigned int i=2280;
for(;n>0;n--)
{
while(i--);
i=2280;
}
}
//*************函数部分***************/
/* 名字:sentbyte_12864() */
/* 功能:把一字节送到RT12864M */
/* 局部变量:sentbyte */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void sentbyte_12864(uchar sentbyte)
{
uint i;
CLK_12864_0();
for(i=0;i<8;i++)
{
if(sentbyte&0x80){SID_12864_1();}
else {SID_12864_0();}
asm("nop");
CLK_12864_1();
sentbyte<<=1;
CLK_12864_0();
asm("nop");
}
}
//*************函数部分***************/
/* 名字:readbyte_12864() */
/* 功能:读RT12864M */
/* 局部变量:readtype */
/* 全局变量:无 */
/* 返回值: temp */
//************************************/
uchar readbyte_12864(uchar readtype)
{
uchar tmp1=0,tmp2=0,temp=0;
uint i;
sentbyte_12864(readtype);
SID_12864_io=0;
CLK_12864_0();
for(i=0;i<8;i++)
{
asm("nop");
CLK_12864_1();
if(SID_12864_r)tmp1|=0x01;
tmp1<<=1;
CLK_12864_0();
}
for(i=0;i<8;i++)
{
asm("nop");
CLK_12864_1();
if(SID_12864_r)tmp2|=0x01;
tmp2<<=1;
CLK_12864_0();
}
temp=(tmp1&0xf0)|((tmp2&0xf0)>>4);
return (temp);
}
//*************函数部分***************/
/* 名字:busywait_12864() */
/* 功能:检测RT12864M是否忙 */
/* 局部变量:无 */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void busywait_12864(void)
{
uchar bf;
loop:
bf=readbyte_12864(CM_rcomm);
if(bf&0x80)goto loop;
}
//*************函数部分***************/
/* 名字:writecomm_12864() */
/* 功能:写命令进RT12864M */
/* 局部变量:command */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void writecomm_12864(uchar command)
{
busywait_12864();
CS_12864_1();
sentbyte_12864(CM_wcomm);
sentbyte_12864(command&0xf0);
sentbyte_12864((command<<4)&0xf0);
}
//*************函数部分***************/
/* 名字:writedata_12864() */
/* 功能:写数据写进RT12864M */
/* 局部变量:wrdata */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void writedata_12864(uchar wrdata)
{
busywait_12864();
CS_12864_1();
sentbyte_12864(CM_wdata);
sentbyte_12864(wrdata&0xf0);
sentbyte_12864((wrdata<<4)&0xf0);
}
//*************函数部分***************/
/* 名字:Init_12864() */
/* 功能:初始化RT12864M */
/* 局部变量:无 */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void Init_12864(void)
{
PSB_12864_0(); //选择串口通信
CLK_12864_0();
writecomm_12864(0x30);//功能设置 8位数据,基本指令
RT12864delay_ms(10);
writecomm_12864(0x0c);//显示状态 ON,游标OFF,反白OFF
RT12864delay_ms(10);
writecomm_12864(0x01);//清除显示
RT12864delay_ms(10);
writecomm_12864(0x02);//地址归位
}
//*************函数部分***************/
/* 名字:locatexy_12864() */
/* 功能:定位显示地址 */
/* 局部变量:x,y */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void locatexy_12864(uchar x,uchar y)
{
uchar addr=0;
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;
}
writecomm_12864(addr);
}
//*************函数部分***************/
/* 名字:disonechar_12864() */
/* 功能:显示一个字符 */
/* 局部变量:x,y,char1 */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void disonechar_12864(uchar x,uchar y,uchar char1)
{
locatexy_12864(x,y);
writedata_12864(char1);
}
//*************函数部分***************/
/* 名字:distwochar_12864() */
/* 功能:显示两个字符即一个汉字 */
/* 局部变量:x,y,char1,char2 */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void distwochar_12864(uchar x,uchar y,uchar char1,uchar char2)
{
locatexy_12864(x,y);
writedata_12864(char1);
writedata_12864(char2);
}
//*************函数部分***************/
/* 名字:dispstr_12864() */
/* 功能:显示汉字字组 */
/* 局部变量:x,y,*pstr */
/* 全局变量:无 */
/* 返回值: 无 */
//************************************/
void dispstr_12864(uchar x,uchar y,uchar *pstr)
{
locatexy_12864(x,y);
while(*pstr)
{
writedata_12864(*pstr);
x+=1;
if(x==16)
{
x=0;
y++;
if(y==4){y=0;}
locatexy_12864(x,y);
}
pstr++;
}
}
/*=========================================*/
/* 函数:drawpic(uchar *pdraw); */
/* 功能描述:画图形 */
/* 参数接口:pdraw,是存放图形数据的表 */
/*=========================================*/
void drawpic_12864(uchar *pdraw,uchar i)
{
uchar x,y;
long uint k=0;
uchar yaddr=0x80;
writecomm_12864(0x30);//功能设置---8BIT控制界面,绘图显示OFF
writecomm_12864(0x34);//功能设置---8BIT控制界面,扩充指令集
for(y=0;y<32;y++)
{
writecomm_12864(yaddr++);//设置绘图区的Y地址坐标
writecomm_12864(0x80); //设置绘图区的X地址坐标
for(x=0;x<i;x++)
{
writedata_12864(pdraw[k++]);
writedata_12864(pdraw[k++]);
}
}
yaddr=0x80;
for(y=0;y<32;y++)
{
writecomm_12864(yaddr++);//设置绘图区的Y地址坐标
writecomm_12864(0x88); //设置绘图区的X地址坐标
for(x=0;x<i;x++)
{
writedata_12864(pdraw[k++]);
writedata_12864(pdraw[k++]);
}
}
writecomm_12864(0x32);//功能设置---8BIT控制界面,绘图显示ON
writecomm_12864(0x36);//功能设置---8BIT控制界面,绘图显示OFF
//返回基本设置
RT12864delay_ms(10);
writecomm_12864(0x30);//功能设置 8位数据,基本指令
RT12864delay_ms(10);
writecomm_12864(0x0c);//显示状态 ON,游标OFF,反白OFF
writecomm_12864(0x02);//地址归位
}
//*************函数部分***************/
/* 名字:clear_12864() */
/* 功能:清屏 */
/* 局部变量:无 */
/* 全局变量:无 */
/* 返回值: 无 */
/*************************************/
/*void clear_12864(void)
{
writecomm_12864(0x30);//功能设置 8位数据,基本指令
RT12864delay_ms(10);
writecomm_12864(0x01);//清除显示
RT12864delay_ms(10);
writecomm_12864(0x02);//地址归
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -