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

📄 rt12864.c

📁 用超声波来测量距离
💻 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 + -