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

📄 z240128.c

📁 240128液晶驱动的测试程序
💻 C
字号:
/*
**长沙太阳人电子有限公司SMG240128总线接口参考程序(T6963C)
**电话:  0731-4167806,4167808
**E-mail: www@sunman.cn
**Create by :谭超  E-mail: tanchao_1@126.com
**最后修改 :  2005年4月22日
**版本说明: 带显示矩形框、线、点子程序。
*/

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

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

unsigned char xdata Lcd_Cmd_Reg _at_ 0xfdff;    // C/D-P2.0   CE-P2.1  p2.0=1 p2.1=0
unsigned char xdata Lcd_Data_Reg _at_ 0xfcff;   // C/D-P2.0   CE-P2.1  p2.0=0 p2.1=0
unsigned char data Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
unsigned char code LeftMask[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
unsigned char code RightMask[]={0xff,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe};

#define LCD_LEFT 0
#define LCD_TOP  0
#define LCD_RIGHT 239
#define LCD_BOTTOM 127

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

//写无参数指令代码
void lcdwc(unsigned char cmdcode)
{  while((Lcd_Cmd_Reg&0x3)!=0x3);  //当Lcd_Cmd_Reg低两位不同时为1
      Lcd_Cmd_Reg=cmdcode;
}

//写双参数指令代码
void lcdwc3(unsigned char cmdcode,unsigned char cmddata,unsigned char cmddata2)
{  while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Data_Reg=cmddata;
   while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Data_Reg=cmddata2;
   while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Cmd_Reg=cmdcode;
}

//写数据
void lcdwd(unsigned char dispdata)
{  while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Data_Reg=dispdata;
   while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Cmd_Reg=0xc0;
}

//读数据
unsigned char lcdrdata(void)
{  while((Lcd_Cmd_Reg&0x3)!=0x3);
      Lcd_Cmd_Reg=0xc5;
   while((Lcd_Cmd_Reg&0x3)!=0x3) ;
      return Lcd_Data_Reg;
}

//内部数据地址指针定位
void lcdpos(void)
{  unsigned int CurrentAddress;
   CurrentAddress=Lcd_CurrentY*30;
   CurrentAddress+=Lcd_CurrentX/8;
   lcdwc3(0x24,CurrentAddress&0xff,CurrentAddress/256);
}

//读数据
unsigned char lcdrd(void)
{  lcdpos();
   return lcdrdata();
}

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

void displaybyte(unsigned char dispdata)
{  lcdpos();
   if(Lcd_Mask==0xff)
      lcdwd(dispdata);
   else
   {  unsigned char d=lcdrd();
      d&=(~Lcd_Mask);
      d|=(dispdata&Lcd_Mask);
      lcdwd(d);
   }
   lcdcursornextbyte();
}

//整屏显示
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()
{  lcdwc(0x80);          //设置显示模式为逻辑“或”模式
   lcdwc(0x98);          //开显示
   lcdwc3(0x42,0,0);     //设置图形显示区首地址
   lcdwc3(0x43,30,0);    //设置图形显示区宽度
}

#include <display8.c>
#include <point8.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 + -