📄 lcd.h
字号:
#include <msp430x24x.h>
#define uchar unsigned char
#define BIT(x) (1<<(x))
#define Lcd_Bus_OUT P4OUT //MCU P4<--信号-->LCM
#define Lcd_Bus_IN P4IN //MCU P4<--信号-->LCM
#define LCD_DIR P4DIR //P4口的输入输出方向
#define CPORT P5OUT //控制端
#define RS 2 //并行的指令/数据选择信号;串行的片选信号
#define RW 1 //并行的读/写选择信号;串行的数据口
#define E 0 //并行的使能信号;串行同步时钟
unsigned char Command;//状态
unsigned char LCDData;//数据
unsigned char COUNT3,COUNT2,COUNT1,COUNT,LCD_X,LCD_Y;
unsigned char temp;
unsigned char clear[]={
/*-- 调入了一幅图像128×64清空图像ROM*/
/*-- 宽度x高度=128x64 横向取模 --*/
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
};
unsigned char t[]={
/*-- 调入了一幅图像:D:\My Documents\单片机实验\C语言\有用程序\工业手机串口通讯实验\第2步.工业手机串口通讯实验实现图形显示\小人.bmp --*/
/*-- 宽度x高度=128x64 横向取模 左边图片 --*/
0x02,0xAA,0xAA,0x00,0x00,0x00,0x00,0x00,0x0D,0x55,0x54,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x05,0x40,0x10,0x00,0x00,0x00,0x20,0x00,0x03,0x80,0x60,0x00,0x00,0x00,
0x22,0xAA,0xA1,0xC0,0x70,0x00,0x00,0x00,0x27,0xFF,0xE3,0xC1,0xC0,0x00,0x00,0x00,
0x27,0xFF,0xF1,0xC1,0x80,0x40,0x00,0x00,0x27,0x7F,0xE3,0xC7,0x01,0x80,0x00,0x00,
0x06,0x3F,0xF1,0xC7,0x01,0xC1,0x00,0x00,0x27,0x3F,0xE3,0xC7,0x07,0x07,0x00,0x00,
0x23,0xFF,0xF1,0xC7,0x07,0x16,0x14,0x00,0x27,0xFF,0xE3,0xC7,0x07,0x1C,0x18,0x00,
0x23,0xFF,0xF1,0xC7,0x07,0x0E,0x0C,0x50,0x27,0xFF,0xE3,0xC7,0x07,0x06,0x00,0xE0,
0x27,0xFF,0xF1,0xC7,0x03,0x43,0x00,0x70,0x27,0x55,0x43,0xC7,0x01,0x80,0x00,0xF0,
0x21,0x00,0x01,0xC5,0x80,0xC0,0x00,0x70,0x20,0x00,0x01,0xC1,0x80,0x00,0x00,0xF0,
0x1F,0xFF,0xFF,0xE0,0xD0,0x00,0x00,0x78,0x3F,0xFF,0xFF,0x70,0x60,0x00,0x35,0xF8,
0x15,0x55,0x55,0x70,0x30,0x00,0x00,0x3C,0x00,0x00,0x00,0xF0,0x00,0x00,0x80,0x3C,
0x80,0x00,0x00,0x70,0x00,0x00,0x40,0x1C,0x00,0x01,0xF8,0xF0,0x00,0x00,0xA5,0x3C,
0x80,0x80,0xFC,0x70,0x00,0x00,0x5F,0x5C,0x49,0x24,0xA8,0xE0,0x00,0x00,0xBF,0x3C,
0xBF,0xFF,0xFF,0xF0,0x00,0x00,0x5F,0x9C,0x7F,0xFF,0xFF,0x80,0x00,0x00,0x80,0x3C,
0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x75,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xDC,
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0xF1,0xDC,
0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xDC,
0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xDC,0x00,0xD5,0x55,0x40,0x00,0x00,0xB3,0x3C,
0x00,0x00,0x00,0x54,0x00,0x00,0x8C,0xDC,0x02,0x00,0x00,0x38,0x00,0x00,0x9D,0xDC,
0x02,0x2D,0x55,0x1C,0x00,0x00,0x9A,0xDC,0x02,0x7F,0xFE,0x3C,0x00,0x00,0xAA,0xBC,
0x00,0x7F,0xFF,0x1C,0x00,0x00,0x4C,0xDC,0x02,0x73,0xFE,0x3C,0x00,0x00,0x9D,0xDC,
0x02,0x71,0x06,0x1C,0x00,0x00,0x4A,0xDC,0x02,0x73,0xFC,0x3C,0x00,0x00,0xA9,0x3C,
0x00,0x73,0xFF,0x1C,0x00,0x00,0xAE,0xDC,0x02,0x7B,0xFE,0x3C,0x00,0x00,0x99,0xDC,
0x02,0x3F,0xFD,0x1C,0x00,0x00,0x0C,0xDC,0x02,0x7B,0xFE,0x3C,0x00,0x00,0xC9,0x3C,
0x02,0x7A,0xAB,0x1C,0x00,0x00,0x3F,0xFC,0x02,0x75,0x54,0x3C,0x00,0x00,0x7F,0xE0,
0x02,0x30,0x00,0x1C,0x00,0x00,0x3F,0xF0,0x02,0x00,0x00,0x1C,0x00,0x00,0x00,0x70,
0x00,0xAD,0xDE,0xF8,0x10,0x10,0x20,0x30,0x01,0xFF,0xFF,0xE0,0x60,0x60,0x60,0x70,
0x05,0x77,0x77,0xF8,0x78,0x78,0x78,0x70,0x0E,0x66,0x67,0x39,0x99,0x99,0x9C,0x70,
0x0F,0x55,0x55,0x1C,0xCC,0xCC,0xCC,0xE0,0x3D,0x99,0x9C,0x9D,0xD9,0xD9,0xDC,0x80,
0x18,0xCC,0xCC,0x7B,0x87,0x87,0x8B,0xC0,0x80,0x00,0x02,0x76,0x06,0x06,0x06,0x00,
0x40,0x00,0x01,0xE3,0x03,0x03,0x03,0x00,0xA2,0x49,0x23,0xC0,0x00,0x00,0x00,0x00,
0x3F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,
};
//延时子程序
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<2;j++); //t*15 us
}
void busy()
{ unsigned char temp;
do{
LCD_DIR=0xff; //LCD数据端口为输出状态
delay(100);
Lcd_Bus_OUT=0xff;
LCD_DIR=0x00; //LCD数据端口为输入状态
CPORT|=BIT(E);
delay(50);
temp=Lcd_Bus_IN;
CPORT&=~BIT(E); //???
}while(temp&0x80); //Lcd_Bus&0x80
}
//写指令代码
void WriteCommand()
{
CPORT&=~BIT(RS); //RS=0;
CPORT|=BIT(RW); //rw=1;
busy();
CPORT&=~BIT(RW);
LCD_DIR=0xff; //设置为输出
delay(100);
Lcd_Bus_OUT=Command; //写指令
CPORT|=BIT(E);
CPORT&=~BIT(E);
}
//写显示数据
void WriteData(){
CPORT&=~BIT(RS);
CPORT|=BIT(RW);
busy();
CPORT|=BIT(RS);
CPORT&=~BIT(RW);
LCD_DIR=0xff; //设置为输出
delay(100);
Lcd_Bus_OUT=LCDData;
CPORT|=BIT(E);
CPORT&=~BIT(E);
}
//初始化程序
void LCDInit()
{
delay(20);
Command=0x30;//选择基本指令集
WriteCommand();
delay(10);
Command=0x30;//选择8bit数据流
WriteCommand();
delay(5);
Command=0x0c;//开显示(无游标.不反白)
WriteCommand();
delay(10);
Command=0x01;//清DDRAM,清显示并设地址指针为00H
WriteCommand();
delay(10);
Command=0x06;//设定游标方向及显示移位
WriteCommand();
delay(10);
}
//显示字符串
void HZdisp(unsigned char *s)
{
while(*s!='\0')
{
LCDData=*s;
WriteData();
s++;
delay(200);
}
}
//LCD清屏
void clearLCD()
{
Command=0x01;
WriteCommand(); //清除显示
Command=0x06;
WriteCommand();
delay(50);
}
//显示汉字或字符
void Test(unsigned char *disdata,unsigned char coordinate,unsigned char rid) //数据和坐标,清屏与否
{
if(rid==1) clearLCD();
Command=coordinate;
WriteCommand(); //写指令
HZdisp(disdata);
}
//设定图片显示地址
void address_set(unsigned char LCD_x,unsigned char LCD_y) //图片的横向和纵向地址
{
Command=0x36; //扩充指令集动作,绘图ON;注意基本指令集动作中不能开绘图
WriteCommand();
Command=LCD_y;
WriteCommand();
Command=LCD_x;
WriteCommand();
Command=0x30; //关绘图
WriteCommand();
}
void Photoclear(const uchar *picture,unsigned char LCD_X,unsigned char LCD_Y)
{ uchar a,Line,Row,Byte;//共16(2位)大块,每大块共32(0-31)行,每次写16字节的数据
Line=2; /*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,*/
Row=32; /*1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推*/
Byte=8; /*写第二大块时,列号加8,但行仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶*/
a=LCD_Y;
for (;Line!=0;Line--)
{ LCD_Y=a; //注意写第二大块时,列号加8,但行仍从第0行开始写
Row=32;
for (;Row!=0;Row--)
{ Byte=8; //Byte=8,只写左边;Byte=16,写整块
address_set(LCD_X,LCD_Y);
for (;Byte!=0;Byte--)
{ LCDData=*picture++;
WriteData();
}
LCD_Y++;//列加1
}
LCD_X=0X88; //行以
}
Command=0x36; //开绘图
WriteCommand();
Command=0x30;
WriteCommand(); //关绘图
}
/* 图片显示 */
/*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,
1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推。写第
二大块时,列号加8,但仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶。
*/
void Photo(const uchar *picture,unsigned char LCD_X,unsigned char LCD_Y)
{ uchar a,Line,Row,Byte;//共16(2位)大块,每大块共32(0-31)行,每次写16字节的数据
Line=2; /*写数据的格式如下:从左上角(0x80,0x80)开始,分为两大块,先写第一大块(0-8)的第0行的128(8×16,*/
Row=32; /*1次写1个字(8位),共写16次)个数据,行号加1,列号不变,再写0-8块的第1行的128个数据,依此类推*/
Byte=8; /*写第二大块时,列号加8,但行仍从第0行开始写,即行地址要复原为原地址重复写第一块的过程写第二大块液晶*/
a=LCD_Y;
for (;Line!=0;Line--)
{ LCD_Y=a; //注意写第二大块时,列号加8,但行仍从第0行开始写
Row=32;
for (;Row!=0;Row--)
{ Byte=8; //Byte=8,只写左边;Byte=16,写整块
address_set(LCD_X,LCD_Y);
for (;Byte!=0;Byte--)
{ LCDData=*picture++;
WriteData();
}
LCD_Y++;//列加1
}
LCD_X=0X88; //行以
}
Command=0x36; //开绘图
WriteCommand();
Command=0x30;
WriteCommand(); //关绘图
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -