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

📄 m12864.c

📁 12864程序
💻 C
字号:
/*
**长沙太阳人电子有限公司SMG12864模拟接口参考程序(KS0108)
**电话:  0731-4167806,4167808
**E-mail: www@sunman.cn
**Create by :谭超  E-mail: tanchao_1@126.com
**最后修改 :  2005年3月17日
**版本说明: 带显示矩形框、线、点子程序。
*/

//[字符图象输出文件=hzk.c]
//[字体名称=宋体]
//[字体大小=16]
//[字节方向=垂直]
//[字位顺序=从低到高]

#include <reg51.h>
#include <math.h>
#include <intrins.h>
#include <hzk.c>

unsigned char data Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
unsigned char code LeftMask[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
unsigned char code RightMask[]={0xff,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
unsigned char code Mask1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code Mask2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

sbit RSPIN = P3^0;
sbit RWPIN = P3^3;
sbit EPIN = P3^4;
sbit CS1PIN = P3^1;
sbit CS2PIN = P3^2;

#define LCD_CMD_COL  0X40
#define LCD_CMD_PAGE 0XB8
#define LCD_CMD_ON   0X3F
#define LCD_CMD_OFF  0X3E
#define LCD_CMD_STARTLINE 0XC0
#define LCD_LEFT 0
#define LCD_TOP  0
#define LCD_RIGHT 127
#define LCD_BOTTOM 63

//延时子程序
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
         ;
}

//片1测忙
void lcdwaitidle1(void)
{  P1=0xff;
   RSPIN=0;
   RWPIN=1;
   CS1PIN=1;
   EPIN=1;
   while((P1&0x80)==0x80);
   EPIN=0;
   CS1PIN=0;
}

//片2测忙
void lcdwaitidle2(void)
{  P1=0xff;
   RSPIN=0;
   RWPIN=1;
   CS2PIN=1;
   EPIN=1;
   while((P1&0x80)==0x80);
   EPIN=0;
   CS2PIN=0;
}

//写指令代码到片1
void lcdwc1(unsigned char cmdcode)
{  lcdwaitidle1();
   P1=cmdcode;
   RSPIN=0;
   RWPIN=0;
   CS1PIN=1;
   EPIN=1;
   _nop_();
   EPIN=0;
   CS1PIN=0;
}

//写指令代码到片2
void lcdwc2(unsigned char cmdcode)
{  lcdwaitidle2();
   P1=cmdcode;
   RSPIN=0;
   RWPIN=0;
   CS2PIN=1;
   EPIN=1;
   _nop_();
   EPIN=0;
   CS2PIN=0;
}

//写数据到片1
void lcdwd1(unsigned char dispdata)
{  lcdwaitidle1();
   P1=dispdata;
   RSPIN=1;
   RWPIN=0;
   CS1PIN=1;
   EPIN=1;
   _nop_();
   EPIN=0;
   CS1PIN=0;
}

//写数据到片2
void lcdwd2(unsigned char dispdata)
{  lcdwaitidle2();
   P1=dispdata;
   RSPIN=1;
   RWPIN=0;
   CS2PIN=1;
   EPIN=1;
   _nop_();
   EPIN=0;
   CS2PIN=0;
}

//读片1数据
unsigned char lcdrd1(void)
{  unsigned char i;
   lcdwaitidle1();
   P1=0xff;
   RSPIN=1;
   RWPIN=1;
   CS1PIN=1;
   EPIN=1;
   _nop_();
   i=P1;
   EPIN=0;
   CS1PIN=0;
   return i;
}

//读片2数据
unsigned char lcdrd2(void)
{  unsigned char i;
   lcdwaitidle2();
   P1=0xff;
   RSPIN=1;
   RWPIN=1;
   CS2PIN=1;
   EPIN=1;
   _nop_();
   i=P1;
   EPIN=0;
   CS2PIN=0;
   return i;
}

//写指令代码
void lcdwc(unsigned char cmdcode)
{  if((Lcd_CurrentX)<0x40)
      lcdwc1(cmdcode);
   else
      lcdwc2(cmdcode);
}

//写数据
void lcdwd(unsigned char dispdata)
{  if(Lcd_CurrentX<64)
      lcdwd1(dispdata);
   else
      lcdwd2(dispdata);
}

//内部数据地址指针定位
void lcdpos(void)
{  lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f));      //设置地址列指针
   lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x7));  //设置地址页指针
}

//读数据
unsigned char lcdrd(void)
{  unsigned char i;
   if(Lcd_CurrentX<64)
   {  i=lcdrd1();
      i=lcdrd1();        //读两次
   }
   else
   {  i=lcdrd2();
      i=lcdrd2();
   }
   lcdpos();
   return i;
}

//当前坐标移动到下一个点
void lcdcursornext(void)
{  Lcd_CurrentX++;
   if(Lcd_CurrentX>LCD_RIGHT)
   {  Lcd_CurrentX=LCD_LEFT;
      Lcd_CurrentY+=8;
      if(Lcd_CurrentY>LCD_BOTTOM)
         Lcd_CurrentY=LCD_TOP;
   }
}

void displaybyte(unsigned char dispdata)
{  lcdpos();         //内部数据地址指针定位
   lcdwd(dispdata);  //写数据
   lcdcursornext();  //当前坐标移动到下一个点
}

//整屏显示
void lcdfill(unsigned char FillData)
{  Lcd_Mask=0xff;
   for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
   {  displaybyte(FillData);
      if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
         break;
   }
}

//初始化
void lcdreset()
{  lcdwc1(LCD_CMD_ON);          //开显示
   lcdwc2(LCD_CMD_ON);
   lcdwc1(LCD_CMD_STARTLINE);   //设置显示初始行
   lcdwc2(LCD_CMD_STARTLINE);
}

#include <display.c>
#include <point.c>


main()
{  while(1)
   {  lcdreset();      //初始化
      lcdfill(0xff);   //整屏显示
      delay(5000);
      lcdfill(0);    //清屏
      delay(5000);
      put_str_xy(0,0,"长沙太阳人电子有限公司");
      delay(5000);
   }
}

⌨️ 快捷键说明

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