📄 lcd.c
字号:
#include <reg51.h> /*19264举例*/
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit L_E = P2^0; // E: 使能 H ~ L
sbit L_RW = P2^1; // R/W: H读, L写
sbit L_DI = P2^2; // RS: H数据,L指令
sbit L_CS2 = P2^3; // CSB: 2者结合 选中1个控制器
sbit L_CS1 = P2^4; // CSA:
sbit L_SET = P2^5; // RST: 复位 低有效
sbit LED_L = 0xa6; // RST: 低 LCD背光
sbit WATCH_DOG = P2^6;
sbit tier0 = P3^5;
sbit tier1 = P3^6;
sbit tier2 = P3^4;
float abc;
uchar code X1[] = {
0x30,0x50,0xd0,0x90,0xf0,0x30,0x80,0x60,0x3c,0xe8,0x20,0xa0,0xe0,0x70,0x00,0x00,
0x04,0x06,0x03,0x11,0x13,0x12,0x18,0x0c,0x07,0x01,0x03,0x06,0x0c,0x1c,0x18,0x18
}; /*欢*/
uchar code X2[] = {
0x40,0x58,0x58,0xd0,0x10,0xf8,0x98,0x08,0x88,0xf8,0xf0,0x10,0xf8,0x70,0x00,0x00,
0x0c,0x04,0x04,0x07,0x04,0x05,0x0d,0x0d,0x08,0x1f,0x1b,0x19,0x38,0x38,0x18,0x18
}; /*迎*/
uchar code X3[] = {
0x30,0x30,0xf8,0xf8,0x08,0x10,0xd0,0x50,0x50,0xfc,0xfc,0x50,0xd0,0xf0,0x10,0x00,
0x00,0x00,0x1f,0x1f,0x10,0x10,0x13,0x1b,0x0f,0x07,0x05,0x0d,0x09,0x19,0x38,0x18
}; /*使*/
uchar code X4[] = {
0x00,0x00,0x00,0x00,0xfc,0xf8,0x48,0x48,0x48,0xf8,0xf8,0x48,0x48,0x48,0xfc,0xf8,
0x10,0x10,0x18,0x1e,0x0f,0x01,0x01,0x01,0x01,0x3f,0x1f,0x01,0x01,0x01,0x3f,0x3f
}; /*用*/
uchar code X5[] = {
0x18,0xfc,0x08,0x48,0x48,0xb8,0xd8,0x58,0xe8,0xb8,0xb8,0x08,0x08,0xf8,0xf8,0x00,
0x00,0x1f,0x11,0x11,0x11,0x14,0x15,0x16,0x16,0x10,0x11,0x11,0x11,0x3f,0x1f,0x00
}; /*图*/
uchar code X6[] = {
0xc0,0xc8,0xc8,0xf8,0xf8,0xc8,0xf8,0xf8,0xc8,0xc8,0x00,0x10,0x90,0xd8,0x48,0x48,
0x18,0x18,0x0c,0x0f,0x03,0x00,0x1f,0x1f,0x10,0x10,0x11,0x19,0x18,0x0c,0x04,0x06
}; /*形*/
uchar code X7[] = {
0x00,0x00,0x00,0xe0,0xe0,0x40,0x40,0x7c,0x7c,0x58,0x58,0x58,0xd0,0xd0,0x00,0x00,
0x10,0x18,0x08,0x0d,0x03,0x19,0x0d,0x01,0x01,0x0d,0x19,0x01,0x07,0x0c,0x18,0x38
}; /*点*/
uchar code X8[] = {
0x08,0xf8,0xf8,0x48,0xe8,0x98,0x90,0xd8,0xf0,0xbc,0xfc,0xd0,0x90,0x90,0x90,0x10,
0x00,0x3f,0x1f,0x02,0x03,0x05,0x06,0x07,0x07,0x06,0x3f,0x3f,0x06,0x06,0x04,0x04
}; /*阵*/
uchar code X12[] = {
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa
}; /*....*/
uchar code X13[] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
}; /*全黑*/
uchar code X14[] = {
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,0x00,0x00,0x00,0x00
}; /*全白*/
uchar code X15[]={
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; /*上边*/
uchar code X16[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
}; /*下边*/
uchar code X17[]={
0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; /*左边*/
uchar code X18[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff
}; /*右边*/
uchar code X19[]={
0xff,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
}; /*左上*/
uchar code X20[]={
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff
}; /*右上*/
uchar code X21[]={
0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
}; /*左下*/
uchar code X22[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff
}; /*右下*/
uchar code X23[]={
0x80,0x80,0x80,0xFE,0x02,0x04,0x20,0x20,0xA8,0xA4,0x26,0x22,0x20,0x20,0xA0,0x40,
0x08,0x08,0x08,0x11,0x11,0x32,0x54,0x10,0x10,0x10,0x11,0x12,0x10,0x10,0x10,0x10
}; /*你*/
uchar code X24[]={
0x00,0xFC,0x08,0x10,0x20,0x20,0x20,0xFE,0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x40,
0x10,0x11,0x10,0x10,0xFC,0x24,0x24,0x25,0x44,0x64,0x18,0x0C,0x12,0x22,0x42,0x00
}; /*好*/
uchar code X25[]={
0x00,0xF8,0x08,0x08,0xF8,0x40,0xFC,0x44,0X44,0X44,0xFC,0x40,0x48,0x44,0x7E,0xC4,
0x00,0x79,0x09,0x09,0x79,0x40,0x43,0x32,0x7A,0x0A,0x0B,0x08,0x08,0x08,0x28,0x13
}; /*强*/
uchar code X26[]={
0x80,0xC0,0x80,0x88,0xFC,0x80,0x80,0x88,0xFC,0x80,0x80,0x80,0x80,0x84,0xFE,0x00,
0x00,0x10,0x10,0x10,0x1F,0x20,0x20,0x40,0x9F,0x00,0x00,0x00,0x00,0x00,0x7F,0x00
}; /*生*/
uchar code X27[]={
0x80,0x02,0x02,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x86,0x02,0x00,
0x00,0x01,0x06,0x78,0x08,0x08,0x08,0x08,0xFF,0x48,0x08,0x08,0x19,0x08,0x00,0x00
}; /*生*/
uchar code X28[]={
0x00,0x80,0x10,0xC0,0x10,0x80,0x10,0x88,0x1F,0xFC,0x20,0x80,0x20,0x80,0x40,0x88,
0x9F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x84,0x7F,0xFE,0x00,0x00
}; /*生*/
uchar code X29[]={
0x00,0x80,0x60,0x1e,0x10,0x10,0x10,0x10,0xff,0x12,0x10,0x10,0x98,0x10,0x00,0x00,
0x01,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0xef,0x41,0x41,0x41,0x41,0x61,0x40,0x00
}; /*生*/
uchar code X30[]={
0x00,0x82,0x03,0x02,0x0C,0x42,0x78,0x42,0x08,0x42,0x08,0x42,0x08,0x42,0xFF,0xFE,
0x08,0x42,0x08,0x42,0x08,0x42,0x08,0xC2,0x18,0x42,0x08,0x06,0x00,0x02,0x00,0x00
}; /*生*/
uchar code X31[]={
0x01,0x00,0x11,0x00,0x11,0x00,0x11,0x08,0x3F,0xFC,0x21,0x00,0x41,0x00,0x41,0x00,
0x81,0x10,0x3F,0xF8,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00 }; /*生*/
//#pragma REGISTERBANK(0)
void initcomm(void)
{
PCON = 0x80;
TMOD = 0X21;
SCON = 0X50;
TH1 = 0XFa;
TL1 = 0XFa;
TR1 = 1;
ES = 1;
TH0 = 0;
TL0 = 0;
TR0 = 1;
ET0 = 1;
EA = 0;
}
void delay(void)
{
uchar i,j;
abc = 0.1*5;
for (i = 0;i != 0xff;i++)
for (j = 0;j != 0xff;j++) ;
}
/**********************************
功能:根据参数flag,往LCD中写命令或数据,写完毕后,将状态设置成读
输入:1:读写标志;2:数据
输出:无
***********************************/
void LCD_C_D(bit flag,uchar ldata) /*flag=1 con flag=0 data*/
{
L_DI = !flag; //flag=1 指令, flag=0 数据
L_E = 0; //复位
L_RW = 0; //写
P1 = ldata; //数据
_nop_(); //延时
L_E = 1; //
_nop_();
_nop_();
L_E = 0; //LCD使能
L_RW = 1; //读
L_DI = 1; //数据
}
/**********************************
功能:根据参数x_add,y_add往LCD中写1个字
输入:1: 写到LCD的X、Y坐标;2:数据地址
输出:无
***********************************/
void dis_one_zi(uchar x_add,uchar y_add,uchar code *po)
{
uchar i,j,w;
j = x_add*2+0xb8; //
if(y_add<4)
{
w=y_add*16+0x40;
L_CS1=0; L_CS2=0;
}
if((y_add>3)&(y_add<8))
{
w=(y_add-4)*16+0x40;
L_CS1=0;
L_CS2=1;
}
if((y_add>7)&(y_add<12))
{
w=(y_add-8)*16+0x40;
L_CS1=1;
L_CS2=0;
}
LCD_C_D(1,j); //X起始坐标
LCD_C_D(1,w); //Y起始坐标
for (i = 0; i < 32;i++)
{
if (i == 16)
{
LCD_C_D(1,j+1);
LCD_C_D(1,w);
}
LCD_C_D(0,*po++);
LCD_C_D(1,0X3F);//显示
}
LCD_C_D(1,0X3F);//显示
}
void CLRLCD(uchar number)
{
uchar data i,j;
L_CS1 = L_CS2 = 1; // 3片均不选中
for (i = 0xb8; i < 0xc0;i++)
{
LCD_C_D(1,i);
LCD_C_D(1,0X40);
for (j = 0; j < 0x40; j++)
LCD_C_D(0,number);
}
L_CS1 = L_CS2 = 0; // 3片选中1片
for (i = 0xb8; i < 0xc0;i++)
{
LCD_C_D(1,i);
LCD_C_D(1,0X40);
for (j = 0; j < 0x40; j++)
LCD_C_D(0,number);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -