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

📄 12864.h

📁 单片机控制GSM22来工作
💻 H
字号:
/***************************************************************************************************
                                       宏定义
****************************************************************************************************/

#define uchar	unsigned char
#define uint	unsigned int

//串行通信 
        
#define PORT    PORTA  //选择引脚口

#define setRS    PORT|=(1<<1)   //串行的片选信号
#define clearRS  PORT&=~(1<<1) 

#define setRW    PORT|=(1<<2)   //串行的数据口
#define clearRW  PORT&=~(1<<2)

#define setCKL   PORT|=(1<<3),delay_nus(1)  //串行的同步时钟
#define clearCKL PORT&=~(1<<3),delay_nus(1)
                    
#define Clear 	WriteCommand(0x01),delay_nms(5)  //清屏



/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
  }
void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/


//发送8位数据
void send_8bit(uchar ch)
{
 char i;
 for(i=0;i<8;i++)
 {  setCKL;
    if((ch<<i)&0x80)setRW;
	else clearRW; 
	clearCKL;
 }
}
//写数据
void WriteData(uchar data)//
{
  setRS;
  send_8bit(0xfa);
  send_8bit(data&0xf0);
  send_8bit(data<<4);
  clearRS;  
}
//写地址
void WriteCommand(uchar command)//
{ 
  setRS;
  send_8bit(0xf8);
  send_8bit(command&0xf0);
  send_8bit(command<<4);
  clearRS;
}
//光标开关,1开,0关
void guangbiao(uchar x) //
{
  if(x==1) WriteCommand(0x0c|0x03);
  else  WriteCommand(0x0c);
}

//  设置显示坐标:y行,x列
void Set_display_Adress(uchar y,uchar x)//
{
 uchar address;
 switch(y)
 {
 case 0:
	address=0x80+x;
	break;
 case 1:
	address=0x90+x;
	break;
 case 2:
	address=0x88+x;
	break;
 case 3:
	address=0x98+x;
	break;
	}
	WriteCommand(address);
}
//显示字符串
void display_String(uchar y,uchar x,uchar *s)   //
{
  uchar i=0;
  if(*s=='\0')return;
   for(i=0;;i++)
   {
      if(*(s+i)=='\0')break;
      if(!i%2)
	Set_display_Adress(y,x);
      WriteData(*(s+i));
      if(i%2)x++;
      if(x>7){y++,x=0;}
   }
}
//显示单个字符
void display_Char(uchar y,uchar x,char ch) 
{ 
	Set_display_Adress(y,x);
	WriteData(ch);
	
}
//可以显示 N 位的的整数num,(从个位起)最多显示6位
void display_Num(uchar y,uchar x,uint num,char N)//
{
 char tmp[5],i;//加大数组可以达到加多显示数位的效果
 //N%=6;
 for(i=0;i<N;i++)
 {
 tmp[i]=(num%10);
 num/=10;
 };
 i--;
while(1)
    {
	 Set_display_Adress(y,x);
	 WriteData(tmp[i--]+0x30);
	 if(!i)
	 {WriteData(tmp[i]+0x30);break;}
	 WriteData(tmp[i--]+0x30);
	 if(!i)
	 {WriteData(tmp[i]+0x30);break;}
	 x++;
	}
	x--;
}
//全屏显示图形子程序 128*64
void Display_Picture(const uchar *tab )
{
  unsigned  i,j,k,l=0,x=0x80,y;
  for(i=0;i<2;i++)    //x=0x80 为第一行
  {
   for(j=0,y=0x80; j<32;j++,y++)//y为水平方向以字节为单位
   { 
	WriteCommand(0x36);  //8位扩充指令集,允许绘图
	WriteCommand(y);//地址设置
	WriteCommand(x);
    WriteCommand(0x30);
	k=16;
    while(k--)
	   WriteData(tab[l++]);		//时间复杂度(16*32)*2=32*32=32个H代码控制一个汉字,共有32个汉字,则是全屏
   }                            //按顺序读入:0->(32*32-1)
   x=0x88;//第三行
  }
}
//显示图形子程序 32*32
void Display_Picture32( unsigned char *tab )//
{
  unsigned  i,j,k,l=0,x=0x80,y;
 
   for(j=0,y=0x80; j<32;j++,y++)//水平扫描32行  第一个32行(汉字的两行)为一个连续地址

⌨️ 快捷键说明

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