📄 tg12864.c
字号:
/******TG12864E-02液晶模块C语言程序*******/
#define TG12864_C
#include "includes.h"
/*
#pragma data:code
const uchar str[]={0xCE,0xD2,0xC3,0xC7,0xB6,0xBC,0};//最后一个元素必须是0
const uchar graph[][16]={
{0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x00,0x03,0x83,0xFE,0x00,0x00,0x7E,0x8F,0x00},
{0x00,0x3C,0x05,0xC0,0x00,0x66,0x00,0x40,0x00,0xC0,0x00,0x60,0x01,0x00,0x00,0x30},
{0x03,0x00,0x00,0x18,0x06,0x00,0x00,0x08,0x0C,0x00,0x00,0x08,0x08,0x01,0xE0,0x0C},
{0x09,0xC1,0x31,0xE4,0x0E,0x00,0x00,0x24,0x0B,0x80,0xE0,0x24,0x08,0x18,0x00,0x24},
{0x08,0x10,0x01,0xE4,0x08,0x30,0x00,0xC4,0x08,0x3C,0x00,0x04,0x04,0x00,0x00,0x04},
{0x04,0x00,0xC0,0x0C,0x06,0x01,0x80,0x08,0x03,0x82,0x00,0x18,0x00,0xE0,0x00,0x70},
{0x00,0x30,0x00,0xC0,0x00,0x18,0x03,0x80,0x00,0x0C,0x06,0x00,0x00,0x06,0x04,0x00},
{0x00,0x03,0x9C,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};
*/
//IO口初始化
void init_LCD_port(void)
{
LCD_PORT &= 0x0f;
LCD_DDR |= 0xf0;
LCD_CON_PORT &= ~(1<<LCD_RS)|(1<<LCD_RW)|(1<<LCD_EN);
LCD_CON_DDR |= (1<<LCD_RS)|(1<<LCD_RW)|(1<<LCD_EN);
}
//查忙子程序
void Chk_Busy(void)
{
uchar temp;
CBIT(LCD_DDR,BIT(7));
lcd_clear_rs();
lcd_set_rw();
do
{
lcd_set_en();
LCD_DEL
LCD_DEL
temp = LCD_PIN;
lcd_clear_en();
LCD_DEL
LCD_DEL
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
}while(temp&0x80);
SBIT(LCD_DDR,BIT(7));
}
//读AC地址
uchar Read_addr(void)
{
uchar addr,temp;
LCD_DDR &= 0x0f;
lcd_clear_rs();
lcd_set_rw();
lcd_set_en();
LCD_DEL
addr = LCD_PIN|0x80;
lcd_clear_en();
addr &= 0xf0;
lcd_set_en();
LCD_DEL
temp = LCD_PIN;
lcd_clear_en();
LCD_DDR |= 0xf0;
temp >>= 4;
addr |= (temp&0x0f);
return addr;
}
//写指令
void Sent_Inst(uchar data)
{
Chk_Busy();
lcd_clear_rs();
lcd_clear_rw();
LCD_PORT &= 0x0f;
LCD_PORT |= (data & 0xf0);
LCD_DEL
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
delay_nus(10);
data <<= 4;
LCD_PORT &= 0x0f;
LCD_PORT |= (data & 0xf0);
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
}
//写数据
void Sent_Data(uchar data)
{
Chk_Busy();
lcd_set_rs();
lcd_clear_rw();
LCD_PORT &= 0x0f;
LCD_PORT |= (data & 0xf0);
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
delay_nus(10);
data <<= 4;
LCD_PORT &= 0x0f;
LCD_PORT |= (data & 0xf0);
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
}
/*
//读数据
uchar Read_Data(void)
{
uchar data,temp;
LCD_DDR &= 0x0f;
Chk_Busy();
lcd_set_rs();
lcd_set_rw();
lcd_set_en();
LCD_DEL
data = LCD_PIN;
lcd_clear_en();
data &= 0xf0;
lcd_set_en();
LCD_DEL
temp = LCD_PIN;
lcd_clear_en();
LCD_DDR |= 0xf0;
temp >>= 4;
data |= (temp&0x0f);
return data;
}*/
//液晶初始化
void lcd_init(void)
{
init_LCD_port();
delay_nms(40);
//Sent_Inst(0x20); //function set
lcd_clear_rs();
lcd_clear_rw();
LCD_PORT &= 0x0F;
LCD_PORT |= 0x20;
LCD_DEL
lcd_set_en();
LCD_DEL
LCD_DEL
lcd_clear_en();
delay_nus(10);
delay_nus(100);
Sent_Inst(0x20); //function set
delay_nus(100);
Sent_Inst(0x0c); //开显示,关光标,不闪烁
delay_nus(100);
Sent_Inst(0x01); //清除显示
delay_nms(10);
Sent_Inst(0x06); //指定在资料写入或读取时,光标的移动方向
}
//设定字符和汉字坐标。水平方向x:0~7,垂直方向y:0~3
void ZuoBiao(uchar x,uchar y)
{
Sent_Inst((x%2)*0x10+(x/2)*0x08+y+0x80);
}
//显示字符或汉字字符串
void String(const uchar *data)
{
uchar addr;
while(*data!=0x00)
{
addr=Read_addr();
Sent_Data(*(data++));
if(*data==0x00)
break;
Sent_Data(*(data++));
if(addr==0x87)
Sent_Inst(0x90);
if(addr==0x97)
Sent_Inst(0x88);
if(addr==0x8f)
Sent_Inst(0x98);
if(addr==0x9f)
break;
}
}
//画一副图画(当要重新写文字时,需要清屏)
void Graph_Disp(const uchar graph[][16],uchar x,uchar y,uchar l,uchar h)
//水平坐标x:0~7;垂直坐标y:0~63;图片长度l:0~15;图片高度h:0~63
{
uchar i,j;
Sent_Inst(0x24); //扩充指令操作
Sent_Inst(0x26); //绘图显示开
for(i=0;i<=31;i++) //上半屏清屏
{
Sent_Inst(i+0x80); //垂直坐标:0~31
Sent_Inst(0x80); //水平坐标:0x80~0x87
for(j=0;j<=15;j++)
Sent_Data(0);
}
for(i=0;i<=31;i++) //下半屏清屏
{
Sent_Inst(i+0x80); //垂直坐标:0~31
Sent_Inst(0x88); //水平坐标:0x88~0x8f
for(j=0;j<=15;j++)
Sent_Data(0);
}
for(i=0;i<=h;i++)
{
if((y+i+0x80)<0xa0)
{
Sent_Inst(y+i+0x80); //垂直坐标
Sent_Inst(x+0x80); //水平坐标
}
else
{
Sent_Inst(y+i+0x60); //垂直坐标
Sent_Inst(x+0x88); //水平坐标
}
for(j=0;j<=l;j++)
Sent_Data(graph[(i*(l+1)+j)/0x10][(i*(l+1)+j)%0x10]);
}
Sent_Inst(0x20); //基本指令操作
}
/*
void main(void)
{
uchar i;
init_port();
lcd_init();
// ZuoBiao(2,5);
// String(str);
// Graph_Disp(graph,3,20,3,31);
// Sent_Data(0xb1);
// Sent_Inst(0x68);
// Sent_Data(0x41);
// Sent_Inst(0x71);
// Sent_Data(0x61);
for(i=0;i<=15;i++) //CGRAM造字
{
Sent_Inst(0x40+i);
Sent_Data(0x00);
Sent_Data(0xff);
}
for(i=0;i<=15;i++)
{
Sent_Inst(0x50+i);
Sent_Data(0x00);
Sent_Data(0xff);
}
Sent_Inst(0x01);
Sent_Data(0x00);
Sent_Data(0x03);
while(1){}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -