📄 19264a.h
字号:
#ifndef LCD_19264
#define LCD_19264
#include <intrins.h>
#include <string.h>
unsigned char code chargroup[10][16]={{0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00}, /*"0",0*/
{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"1",1*/
{0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00},/*"2",2*/
{0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00},/*"3",3*/
{0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00},/*"4",4*/
{0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00},/*"5",5*/
{0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00},/*"6",6*/
{0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00},/*"7",7*/
{0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},/*"8",8*/
{0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00}};/*"9",9*/
unsigned char lenth1=0,lenth2=0; // 全局变量
/*****************************I/O口定义****************************
1<------>GND 2<------>VCC
3<------>VO 4<------>D/I
5<------>R/W 6<------>E
7--14<------>D0--D7
15<----->CS1 16<----->RST
17<----->CS2 18<----->CS3
19<----->Vout 20<----->VDD
********************************************************************/
/*******************************************************************
CS1 CS2 CS3 ACM19264
1 1 1 禁止使用
0 1 1 左区
1 0 1 中区
1 1 0 右区
0 0 0 未选
********************************************************************/
#define COMMAND 0 //指令
#define DATA 1 //数据
sbit BUSY = ACC^7; //忙信号
#define LCD_data P3 //数据口
sbit RS = P1^0; //控制口,H:数据,L:指令
sbit RW = P1^1; //读写控制,H:读,L:写
sbit EN = P1^2; //使能,下降沿处理任务
sbit RST = P1^3;
sbit CS1 = P1^4; //左区
sbit CS2 = P1^5; //中区
sbit CS3 = P1^6; //右区
void display_on(unsigned char);
/* L L H H H H H D *********/
#define D 0x01 //显示开,状态字ON/OFF为L
#define NO_D 0x00 //显示关,状态字ON/OFF为H
void home(unsigned char); //显示起始地址设置
/* H H L5 L4 L3 L2 L1 L0 ***/
void page(unsigned char); //页面地址设置
/* H L H H H P2 P1 P0 ******/
void address(unsigned char); //列地址设置
/* L H C5 C4 C3 C2 C1 C0 ***/
void display_picture(unsigned char,unsigned char,unsigned char *); //写显示数据
//unsigned char wait(); //忙信号处理
//void read(); //读显示数据
void writelcd(unsigned char,unsigned char); //写指令或数据
void intital(); //液晶初始化函数
void delay1ms(unsigned char); //延时函数
void display_hanzi(unsigned char,unsigned char,unsigned char *);
/////////////////////////////////////具体函数如下////////////////////////////////////
/****************数据会跨区显示可能是下载线原因,把下载线拔掉就不会重叠显示了*******/
/*****************************延时函数********************************************/
void delay1ms(unsigned char count)
{
unsigned int i,j;
for(i=count;i>0;i--)
for(j=100;j>0;j--); //不能用自加形式
}
/*****************************写函数**********************************************/
void writelcd(unsigned char style,unsigned char input)
{
delay1ms(1); //延时不能太长,液晶处理是ns级
RS=style;
RW=0;
EN=1;
LCD_data=input; _nop_(); _nop_();
EN=0; _nop_();_nop_();
// wait();
}
/*****************************忙处理函数*******************************************/
/* //忙检测函数不好用
unsigned char wait()
{
RW=1;
RS=0; _nop_();
EN=1; _nop_();
do
{
ACC=LCD_data;
}
while(BUSY==1);
EN=0;
return ACC;
}
*/
/******************************显示开启函数****************************************/
void display_on(unsigned char show)
{
CS1=0;CS2=0;CS3=0;
writelcd(COMMAND,0x3e | show);
}
/*******************************显示起始行设置函数*********************************/
void home(unsigned char back)
{
writelcd(COMMAND,0xc0 | back);
}
/*******************************页地址函数******************************************/
void page(unsigned char page)
{
writelcd(COMMAND,0xb8 | page);
}
/*******************************列地址函数*******************************************/
void address(unsigned char add)
{
writelcd(COMMAND,0x40 | add);
}
/*******************************清屏函数**********************************************/
void clearscreen()
{
unsigned char i,j;
CS1=0;CS2=0;CS3=0;
for(i=0;i<8;i++)
{
page(i);
address(0);
for(j=0;j<64;j++)
{
writelcd(DATA,0x00);
}
}
CS1=0;CS2=0;CS3=0;
}
/********************************清楚指定页,指定列数函数****************************/
void clearpage(unsigned char X,unsigned char Y,unsigned char input) //input为字长,Y为起始列
{
unsigned char i=0;
unsigned char lie;
for(i=0;i<(input*8);i++) //列显示处理
{
lie=Y+i;
if(lie<=63)
{
CS1=0;CS2=1;CS3=1;
page(X);
address(lie);
writelcd(DATA,0x00);
page(X+1);
address(lie);
writelcd(DATA,0x00);
}
else if(lie>63&&lie<=127)
{
lie=lie-64;
CS1=1;CS2=0;CS3=1;
page(X);
address(lie);
writelcd(DATA,0x00);
page(X+1);
address(lie);
writelcd(DATA,0x00);
}
else if(lie>127)
{
lie=lie-128;
CS1=1;CS2=1;CS3=0;
page(X);
address(lie);
writelcd(DATA,0x00);
page(X+1);
address(lie);
writelcd(DATA,0x00);
}
}
}
/********************************词组显示函数****************************************/
void display_hanzizu(unsigned char X ,unsigned char Y,unsigned char *tab)
{
unsigned char i=0,j=0;
unsigned char flat1,flat2,hang,lie;
flat1=tab[0]; //列宽
flat2=tab[1]/8;
if(tab[1]%8) flat2++; //行数
for(hang=X;hang<X+flat2;hang+=2) //写行
{
if(Y<=63) //列显示处理
{
CS1=0;CS2=1;CS3=1;
for(i=0;i<flat1;i++)
{
page(hang);
if((Y+i)<=63)
{CS1=0;CS2=1;CS3=1;address(Y+i);}
else if((Y+i)>63&&(Y+i)<=127)
{CS1=1;CS2=0;CS3=1;address(Y+i-64);}
else if((Y+i)>127)
{CS1=1;CS2=1;CS3=0;address(Y+i-128);}
writelcd(DATA,tab[i*2+2]);
page(hang+1);
if((Y+i)<=63)
{CS1=0;CS2=1;CS3=1;address(Y+i);}
else if((Y+i)>63&&(Y+i)<=127)
{CS1=1;CS2=0;CS3=1;address(Y+i-64);}
else if((Y+i)>127)
{CS1=1;CS2=1;CS3=0;address(Y+i-128);}
writelcd(DATA,tab[i*2+1+2]);
}
}
else if(Y>63&&Y<=127)
{
lie=Y-64;
CS1=1;CS2=0;CS3=1;
for(i=0;i<flat1;i++)
{
page(hang);
if((lie+i)<=63)
{CS1=1;CS2=0;CS3=1;address(lie+i);}
else if((lie+i)>63&&(lie+i)<=127)
{CS1=1;CS2=1;CS3=0;address(lie+i-64);}
else if((lie+i)>127)
{CS1=0;CS2=1;CS3=1;address(lie+i-128);}
writelcd(DATA,tab[i*2+2]);
page(hang+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -