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

📄 液晶.c

📁 台湾盛群公司的单片机,型号为46R32,里面包括19264液晶的驱动程序,74系列芯片仿真程序等
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <ht46r232.h>

//定义MCU与LCD的接口
#define RET   _pb5
#define RW    _pb2
#define RS    _pb1
#define E     _pb3
#define CS1   _pb4
#define CS2   _pb7
#define CS3   _pb6
#define DATA  _pa


#define uchar unsigned char
#define uint unsigned int

const uchar shu[][14]=
{

{0xE0,0x03,0x10,0x04,0x08,0x08,0x08,0x08,0x10,0x04,0xE0,0x03,0x00,0x00},/*"0",0*/

{0x00,0x00,0x10,0x08,0x10,0x08,0xF8,0x0F,0x00,0x08,0x00,0x08,0x00,0x00},/*"1",1*/

{0x00,0x00,0x30,0x0C,0x08,0x0A,0x08,0x09,0x88,0x08,0x70,0x0C,0x00,0x00},/*"2",2*/

{0x00,0x00,0x30,0x06,0x08,0x08,0x48,0x08,0x48,0x08,0xB0,0x07,0x00,0x00},/*"3",3*/

{0x00,0x01,0xC0,0x02,0x20,0x02,0x10,0x0A,0xFC,0x0F,0x00,0x0A,0x00,0x00},/*"4",4*/

{0x00,0x00,0xF8,0x06,0x48,0x08,0x48,0x08,0x48,0x08,0x88,0x07,0x00,0x00},/*"5",5*/

{0xE0,0x07,0x90,0x08,0x48,0x08,0x48,0x08,0x48,0x08,0x98,0x07,0x00,0x00},/*"6",6*/

{0x00,0x00,0x38,0x00,0x08,0x00,0x88,0x0F,0x68,0x00,0x18,0x00,0x00,0x00},/*"7",7*/

{0x30,0x07,0xC8,0x08,0x88,0x08,0x88,0x08,0xC8,0x08,0x30,0x07,0x00,0x00},/*"8",8*/

{0xF0,0x0C,0x08,0x09,0x08,0x09,0x08,0x09,0x88,0x04,0xF0,0x03,0x00,0x00},/*"9",9*/

{0x08,0x08,0x18,0x0C,0x68,0x0B,0x80,0x00,0x68,0x0B,0x18,0x0C,0x08,0x08},/*"X",0*/

};
const uchar ziku[][28]=
{
{0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0xFC,0x1F,0xF8,0x0F,0xF0,0x07,0xE0,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"箭头",0*/

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*"空白",1*/
};

//延时程序;
void delay_us(int t)
{
 do
 t--;
 while(t>1);
}
void delay10ms(unsigned long int t)
{
while(t!=0)
{
delay_us(1000);
t--;
}
}

/*----------------------------------------------------------------------------
给第一个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutFI(uchar i)
{ 
/*unsigned char data_sta,u;
 u=2; 
while(u--)//检测LCD是否处于忙态                         
{E=0;RW=1;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;//_pa=0xff;
data_sta=DATA;
_pac=0x00;//_pa=0xff;
E=0;RW=0;CS1=1;delay_us(1);
E=1;
}*/
delay_us(1000);
E=0;RW=0;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
DATA=i;delay_us(1);
E=0;RW=1;CS1=1;delay_us(1);
E=1; 
}
/*----------------------------------------------------------------------------
给第二个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutSI(uchar i)
{ 
/*unsigned char data_sta;
do{ 
E=0;RW=1;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS2=1;delay_us(1);
E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS2=1;delay_us(1);
E=1; delay_us(1);
}
/*---------------------------------------------------------------------------
给第三个KS0108窗口发送指令
------------------------------------------------------------------------------
--*/
void OutTI(uchar i)
{ 
/*unsigned char data_sta;
do{ 
E=0;RW=1;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS3=1;delay_us(1);
E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS3=1;delay_us(1);
E=1; delay_us(1);
}
/*----------------------------------------------------------------------------
给第一个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutFD(uchar i)
{ 
/*unsigned char data_sta,u;
u=2;
while(u--)
{
E=0;RW=1;RS=0;CS1=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;//_pa=0xff;
data_sta=DATA;
_pac=0x00;//_pa=0xff;
E=0;RW=0;CS1=1;delay_us(1);E=1;delay_us(1);
}*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS1=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS1=1;delay_us(1);E=1; delay_us(1);
}
/*----------------------------------------------------------------------------
给第二个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutSD(uchar i)
{ 
/*unsigned char data_sta;
do{ 
E=0;RW=1;RS=0;CS2=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS2=1;E=1;
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS2=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS2=1;delay_us(1);E=1;delay_us(1); 
}
/*----------------------------------------------------------------------------
给第三个KS0108窗口发送数据
------------------------------------------------------------------------------
--*/
void OutTD(uchar i)
{ 
/*unsigned char data_sta;
do{ 
E=0;RW=1;RS=0;CS3=0;delay_us(1);
E=1;delay_us(1);
_pac=0xff;_pa=0xff;
data_sta=DATA;
_pac=0x00;_pa=0xff;
E=0;RW=0;CS3=1;delay_us(1);E=1;delay_us(1);
}while(data_sta&0x80);*///检测LCD是否处于忙态
delay_us(1000);
E=0;RW=0;RS=1;CS3=0;delay_us(1);
E=1;delay_us(1);
DATA=i;
delay_us(1);E=0;RW=1;CS3=1;delay_us(1);E=1; delay_us(1);
}

/*------------------------------------------------------------------------------
初始化LCD,系统重启,第一次请求
---------------------------------------------------------------------------------*/
void InitLCD()
{
RET=0;delay10ms(500);
RET=1;delay10ms(20);
OutFI(0x40); //*Set the Y address 0 
OutSI(0x40);
OutTI(0x40);
OutFI(0xb8); //Set the Page 0 
OutSI(0xb8);
OutTI(0xb8); 
OutFI(0xc0); //Set the display start line 0 
OutSI(0xc0);
OutTI(0xc0); 
OutFI(0x3f); //Display ON 
OutSI(0x3f);
OutTI(0x3f); 

}
/*------------------------------------------------------------------------------
清除三个Cks0108显示内存 
清屏
---------------------------------------------------------------------------------*/
void Clrscreen()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
OutFI(0xc0);
OutFI(0xb8|i); 
for(j=0;j<64;j++)
{
OutFI(j|0x40);
OutFD(0x00);
}
}
for(i=0;i<8;i++)
{
OutSI(0xc0);
OutSI(0xb8|i); 
for(j=0;j<64;j++)
{
OutSI(j|0x40);
OutSD(0x00);
}
}
for(i=0;i<8;i++)
{
OutTI(0xc0);
OutTI(0xb8|i); 
for(j=0;j<64;j++)
{
OutTI(j|0x40);
OutTD(0x00);
}
}
}

/*--------------------------------------------------------------------------------
显示
x_add:0~191
layer:0~7
width:1~192
high:1~8页
*bmp:字模名
---------------------------------------------------------------------------------*/

void DrawNum(uchar x_add,uchar layer,uchar bmp)
{ 
 unsigned char x;
 unsigned int i=0,j;
 for(x=x_add;x<x_add+7;x++)
  {
  if (x>127) 
   {
   OutTI(0xc0);
   for(j=0;j<2;j++)
    {
    OutTI((x-128)|0x40); 
    OutTI((layer+j)|0xb8); 
    OutTD(shu[bmp][i]); 
    i++;
    }
   }
  else if (x>63) 
   {
   OutSI(0xc0);
   for(j=0;j<2;j++)
    {
    OutSI((x-64)|0x40);
    OutSI((layer+j)|0xb8);
    OutSD(shu[bmp][i]);
    i++;
    }
   }
  else 
   {
   OutFI(0xc0);
   for(j=0;j<2;j++)
    {
    OutFI(x|0x40);
    OutFI((layer+j)|0xb8);
    OutFD(shu[bmp][i]);
    i++;
    }
   }
  }
}
/*--------------------------------------------------------------------------------
显示
x_add:0~191
layer:0~7
width:1~192
high:1~8页
*bmp:字模名
---------------------------------------------------------------------------------*/

void DrawZi(uchar x_add,uchar layer,uchar bmp)
{ 
 unsigned char x;
 unsigned int i=0,j;
 for(x=x_add;x<x_add+14;x++)
  {
  if (x>127) 
   {
   OutTI(0xc0);
   for(j=0;j<2;j++)
    {
    OutTI((x-128)|0x40); 
    OutTI((layer+j)|0xb8); 
    OutTD(ziku[bmp][i]); 
    i++;
    }
   }
  else if (x>63) 
   {
   OutSI(0xc0);
   for(j=0;j<2;j++)
    {
    OutSI((x-64)|0x40);
    OutSI((layer+j)|0xb8);
    OutSD(ziku[bmp][i]);
    i++;
    }
   }
  else 
   {
   OutFI(0xc0);
   for(j=0;j<2;j++)
    {
    OutFI(x|0x40);
    OutFI((layer+j)|0xb8);
    OutFD(ziku[bmp][i]);
    i++;
    }
   }
  }
}

void X7400()
{

 DrawNum(3,6,1);
 DrawNum(28,6,2);
 DrawNum(53,6,3);
 DrawNum(78,6,4);
 DrawNum(103,6,5);
 DrawNum(128,6,6);
 DrawNum(153,6,7);

 DrawNum(3,0,1);DrawNum(10,0,4);
 DrawNum(28,0,1);DrawNum(35,0,3);
 DrawNum(53,0,1);DrawNum(60,0,2);
 DrawNum(78,0,1);DrawNum(83,0,1);
 DrawNum(103,0,1);DrawNum(110,6,0);
 DrawNum(128,0,9);
 DrawNum(153,0,8);
 
 DrawNum(64,3,7);
 DrawNum(71,3,4);
 DrawNum(78,3,10);
 DrawNum(85,3,10);
 DrawNum(92,3,0);
 DrawNum(99,3,0);//74XX00

}
void X7402()
{
 DrawNum(3,6,1);
 DrawNum(28,6,2);
 DrawNum(53,6,3);
 DrawNum(78,6,4);
 DrawNum(103,6,5);
 DrawNum(128,6,6);
 DrawNum(153,6,7);

 DrawNum(3,0,1);DrawNum(10,0,4);
 DrawNum(28,0,1);DrawNum(35,0,3);
 DrawNum(53,0,1);DrawNum(60,0,2);
 DrawNum(78,0,1);DrawNum(83,0,1);
 DrawNum(103,0,1);DrawNum(110,6,0);
 DrawNum(128,0,9);
 DrawNum(153,0,8);

 DrawNum(64,3,7);
 DrawNum(71,3,4);
 DrawNum(78,3,10);
 DrawNum(85,3,10);
 DrawNum(92,3,0);

⌨️ 快捷键说明

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