📄 lcd_demo.c
字号:
#include<reg52.h>
#include"LCD.h"
#include"key.h"
#include<string.h>
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --
uchar ce[]={0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04};
uchar shi[]={0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00};
uchar idata shit[]={0x00,0x00,0x00,0x00,0x7F,0xFE,0x62,0x46,0x62,0x46,0x62,0x46,0x64,0x26,0x78,0x1E,
0x60,0x06,0x67,0xE6,0x64,0x26,0x64,0x26,0x64,0x26,0x64,0x26,0x7F,0xFE,0x00,0x00};
*/
uchar string[]="测试通地方换行测试测试测试";
void main()
{
uchar key=0;
P1=0x00;
LCD_E=0;
// LCD_init();
// print(0,1,string);
key=getKey();
while(1)
{
}
}
void LCD_init()
{
LCD_wrcmd(LCD_ON);
delay(2);
LCD_wrcmd(LCD_CLEAR);
delay(2);
// LCD_CLEAR_GRAPH();
}
void print(uchar x,uchar y,uchar * p)
{
uchar length=strlen(p);
uchar counter=0;
LCD_wrcmd(LCD_BASIC);
setlocation_c(x,y);
while(counter<length)
{
LCD_wrdata(*(p++));
counter++;
if(((counter+y*2)%16)==0)
{
setlocation_c(x+1,0);
}
}
}
void draw(uchar x,uchar y,uchar * p)
{
uchar i=0;
uchar x1=x,y1=y;
getlocation_g(&x1,&y1);
// LCD_wrcmd(LCD_GRAPH_OFF); //先关闭图形显示功能
for(i=0;i<16;i++)
{
LCD_wrcmd(x1+i); //设定垂直坐标
LCD_wrcmd(y1); //设定水平坐标
LCD_wrdata(*(p+i*2)); //放入数据高字节
LCD_wrdata(*(p+i*2+1)); //放入数据低字节
}
// LCD_wrcmd(LCD_GRAPH_ON); //先关闭图形显示功
}
void LCD_CLEAR_GRAPH()
{
uchar i,j;
LCD_wrcmd(LCD_GRAPH_OFF); //先关闭图形显示功能
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
LCD_wrcmd(0x80+j); //设定垂直坐标
LCD_wrcmd(0x80+i); //设定水平坐标
LCD_wrdata(0x00); //放入数据高字节
LCD_wrdata(0x00); //放入数据低字节
}
}
for(j=32;j<64;j++)
{
for(i=0;i<8;i++)
{
LCD_wrcmd(0x80+j-32); //设定垂直坐标
LCD_wrcmd(0x88+i); //设定水平坐标
LCD_wrdata(0x00); //放入数据高字节
LCD_wrdata(0x00); //放入数据低字节
}
}
LCD_wrcmd(LCD_GRAPH_ON); //最后打开图形显示功能
}
void LCD_wrcmd(uchar cmd)
{
wait();
LCD_CD=0;
LCD_RW=0;
LCD_E=0;
LCD_DATA=cmd;
LCD_E=1;
delay(100);
LCD_E=0;
}
void wait()
{
// while(LCD_busyRD());
}
void LCD_wrdata(uchar dat)
{
wait();
LCD_CD=1;
LCD_RW=0;
LCD_DATA=dat;
LCD_E=1;
delay(100);
LCD_E=0;
}
void LCD_rdata(uchar * dat)
{
uchar xdata * add=LCD_DATA_R;
LCD_E=1;
*(dat)=*(add);
LCD_E=0;
}
bit LCD_busyRD()
{
bit busy;
LCD_CD=0;
LCD_RW=1;
LCD_E=0;
delay(2);
LCD_E=1;
busy=LCD_DATA&0x80;
LCD_E=0;
return busy;
}
void delay(uint time)
{
for(;time>0;time--);
}
void getlocation_g(uchar * x,uchar *y)
{
switch((*x)%4)
{
case 0: *x = 0x80; *y+=0x80;break; //第一行开始地址
case 1: *x = 0x90; *y+=0x80;break; //第二行
case 2: *x = 0x80; *y+=0x88;break; //第三行
case 3: *x = 0x90; *y+=0x88;break; //第四行
}
}
void setlocation_c(uchar x,uchar y)
{
switch((x)%4)
{
case 0: x = 0x80;break; //第一行开始地址
case 1: x = 0x90;break; //第二行
case 2: x = 0x88;break; //第三行
case 3: x = 0x98;break; //第四行
}
LCD_wrcmd(x+y);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -