📄 lcd_gdf.c
字号:
//在程序中实现了写图形液晶的标准程序
//2003.4.29
//copyright wangqi liulili
//#include "msp430x14x.h"
//#include "string.h"
#include "lcd_gdf.h"
#include "ziku.h"
//内部函数如下:
void write_com(void); //开显示命令
void write_data(char csab,unsigned char value); //写显示数据命令
void send_data(unsigned char x); //595数据函数
void send_en(void); //使能函数
//void clk_595(void); //595脉冲函数
void delay(unsigned int x);
void send_sel(unsigned char x) ; //CSB,CSA,RS
void write_col(char csab,unsigned int x); //写LCD列
void write_line(char csab,unsigned int x); //写LCD行
void write_page(char csab,unsigned int x); //写LCD页
void csab(char x); //选择写入LCD哪一块
//******************************************************************************************
//可用的外部函数如下:
void clr(void); //清屏
void disp(int x,int y,char aa[32]); //写一个汉字
void disp_char(int x,int y,char ee[16]); //写一个字母,不推荐使用,若写字母,最好采用函数disp_char_long
void disp_char_long(unsigned char x,unsigned char y,char *array);//写一串字母
void disp_picture(char *a); //写图片
void clr(void)
{ unsigned int i,j,m;
write_com();
for(m=0;m<=2;m++)
{
// write_page(m,0xb8);
for(i=0xb8;i<=0xbf;i++)
{ write_page(m,i);
// delay(50);
write_col(m,0x40);
// delay(50);
for(j=0x0;j<=0x3f;j++)
{
write_data(m,0x00);
// delay(50);
}
}
}
}
void disp_picture(char *a)
{
int i,j,m;
unsigned int k=0;
for(i=0xb8;i<=0xbf;i++)
{
for(m=0;m<=2;m++)
{
write_page(m,i);
write_col(m,0x40);
for(j=0x40;j<=(0x40+63);j++)
{
// write_col(m,j);
write_data(m,a[k]);
k++;
}
}
}
}
void disp_char(int x,int y,char ee[16])
{
char right_bit,left_bit,i,block,pag,col;
char bb[8];//,cc[8],dd[8];
// aa{32]=a[32];
pag=(x/8)+0xb8;
left_bit=x%8;
right_bit=8-left_bit;
write_com();
for(i=0;i<=7;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
bb[i]=ee[i]<<left_bit;
write_page(block,pag);
write_col(block,col);
write_data(block,bb[i]);
}
for(i=0;i<=7;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
bb[i]=(ee[i]>>right_bit) | (ee[i+8]<<left_bit);
write_page(block,pag+1);
write_col(block,col);
write_data(block,bb[i]);
}
for(i=0;i<=7;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
bb[i]=ee[i+8]>>right_bit;
write_page(block,pag+2);
write_col(block,col);
write_data(block,bb[i]);
}
}
void disp_char_long(unsigned char x,unsigned char y,char *array)
{
char i,l,m;
l=strlen(array);
for(i=0;i<=l-1;i++)
{
m=array[i]-' ';
disp_char(x,y+8*i,(char *)asc[m]);
}
}
void disp(int x,int y,char aa[32])
{ int right_bit,left_bit,i,block,pag,col;
char bb[16],cc[16],dd[16];
// aa{32]=a[32];
pag=(x/8)+0xb8;
left_bit=x%8;
right_bit=8-left_bit;
for(i=0;i<=15;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
bb[i]=aa[i]<<left_bit;
write_page(block,pag);
write_col(block,col);
write_data(block,bb[i]);
}
for(i=0;i<=15;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
cc[i]=(aa[i]>>right_bit) | (aa[i+16]<<left_bit);
write_page(block,pag+1);
write_col(block,col);
write_data(block,cc[i]);
}
for(i=0;i<=15;i++)
{
block=(y+i)/64;
col=(y+i)%64+0x40;
dd[i]=aa[i+16]>>right_bit;
write_page(block,pag+2);
write_col(block,col);
write_data(block,dd[i]);
}
}
void write_col(char y,unsigned int x)
{ unsigned int col;
col=x;
csab(y);
// send_sel(0x00);
//P1OUT=y<<6;
P1OUT&=0XEF;
send_data(col);
}
void write_page(char y,unsigned int x)
{ unsigned int page;
page=x;
csab(y);
// send_sel(0x00);
//P1OUT=y<<6;
P1OUT&=0XEF;
send_data(page);
}
void write_line(char y,unsigned int x)
{ unsigned int line;
line=x;
csab(y);
// send_sel(0x00);
//P1OUT=y<<6;
P1OUT&=0XEF;
send_data(line);
}
void write_com(void)
{ unsigned int disp,startline;
disp=0x3f;
startline=0xc0;
// csab(0);
// send_sel(0x00);
P1OUT=0X0F; //RS=0 EN=0 CSA/CSB=0
send_data(disp); //开显示
delay(10);
P1OUT=0X0F; //RS=0 EN=0 CSA/CSB=0
send_data(startline); //设置起始行
delay(10);
P1OUT=0X4F; //RS=0 EN=0 CSA/CSB=1
send_data(disp); //块2开显示
delay(10);
P1OUT=0X4F; //RS=0 EN=0 CSA/CSB=1
send_data(startline);
delay(10);
P1OUT=0X8F; //RS=0 EN=0 CSA/CSB=2
send_data(disp);
delay(10);
P1OUT=0X8F; //RS=0 EN=0 CSA/CSB=2
send_data(startline);
delay(10);
}
void write_data(char y,unsigned char value)
{
csab(y);
// send_sel(0x01);
//P1OUT=y<<6;
P1OUT|=0X10;
send_data(value);
}
void send_data(unsigned char x)
{
P4DIR=0XFF;
P4OUT=x;
send_en();
}
void send_sel(unsigned char x)
{
if (x&0x01==0x01)
{ P5OUT|=0X02;}
else
{ P5OUT&=0Xfc;}
// clk_595();
}
//void clk_595(void)
//{
// P5OUT &=0x0fe;
// delay(1);
// P5OUT|=0x01;
// delay(1);
}
void delay(unsigned int x)
{ int i;
i=x;
while(i!=0) i--;
}
void send_en(void)
{
P1DIR|=0X20; //产生 _|-|_
// P5OUT|=0X40;
// P5OUT&=0XBF;
P1OUT&=0XDF;
delay(0);
P1OUT|=0X20;
delay(0);
P1OUT&=0XDF;
// P1OUT|=0X20;
}
void csab(char x)
{switch(x)
{
case 0:
{ P1OUT=0X00;
//send_sel(0x00); //CSB
//send_sel(0x00); //CSA
}
break;
case 1:
{ P1OUT=0X80;
// send_sel(0x01); //CSB
// send_sel(0x00); //CSA
}
break;
case 2:
{ P1OUT=0X40;
// send_sel(0x00); //CSB
// send_sel(0x01); //CSA
}
break;
default:
{ P1OUT=0X00;
// send_sel(0x00); //CSB
// send_sel(0x00); //CSA
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -