📄 dgram.h
字号:
#ifndef lcd1_H
#define lcd1_H
#include<iom128.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define RS (1<<0)
#define RW (1<<1)
#define EN (1<<2)
//CGRAM地址
#define CGRAM_ADDR_0 0x40
#define CGRAM_ADDR_1 0x50
#define CGRAM_ADDR_2 0x60
#define CGRAM_ADDR_3 0x70
const uchar duan[]={ //数组不能再flash和eeprom中定义,否则显示不出来
/*-- 文字: 杨 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x00,0x13,0xF8,0x10,0x10,0xFE,0x20,0x10,0x40,0x10,0x80,0x39,0xFC,0x34,0x54,
0x54,0x94,0x50,0xA4,0x91,0x24,0x12,0x44,0x10,0x84,0x11,0x04,0x10,0x14,0x10,0x08
};
const uchar wen[]={
0x20,0x40,0x20,0x60,0x7F,0x40,0x40,0x40,0x7E,0xFE,0xB2,0xC8,0x2B,0x48,0x22,0x48,
0xFF,0x48,0x32,0x28,0x2A,0x30,0x22,0x10,0x3F,0xA8,0x02,0x28,0x0A,0x46,0x04,0x84
};
/*-- 文字: 测 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const uchar ce[32]={
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
};
/*-- 文字: 试 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const uchar shi[32]={
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
};
/*-- 文字: 成 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const uchar cheng[]={
0x00,0xA0,0x00,0x90,0x00,0x80,0x3F,0xFE,0x20,0x80,0x20,0x80,0x3E,0x88,0x22,0x8C,
0x22,0x48,0x22,0x50,0x22,0x20,0x2A,0x60,0x44,0x92,0x41,0x0A,0x86,0x06,0x00,0x02
};
/*-- 文字: 功 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const uchar gong[]={
0x00,0x20,0x00,0x20,0x7F,0x20,0x08,0x20,0x0B,0xFC,0x08,0x24,0x08,0x24,0x08,0x44,
0x09,0x44,0x0E,0x44,0xF0,0x84,0x40,0x84,0x01,0x04,0x02,0x78,0x04,0x10,0x00,0x00
};
/*******************************************************
函数名称:delay(uint t)延时函数。对于12M晶振大约延时1ms
入口参数:t
出口参数:无
*******************************************************/
void s_ms(uint ms)
{
for(;ms>1;ms--);
}
/*********************************
函数名称:write_cmd(uint lcd_cmd)写指令
入口参数:lcd_cmd
返回参数:无
*********************************/
void WriteCmd12864(uchar lcd_cmd)
{
void ReadStatusLCM(); //根据需要检测忙
s_ms(100);
PORTG&=~RS; //RS=0
s_ms(100);
PORTG&=~RW; //RW=0
s_ms(100);
PORTG|=EN; //EN=1
s_ms(100);
PORTA=lcd_cmd; //输出指令
s_ms(100);
PORTG&=~EN; //EN=0
s_ms(100);
}
/********************************
函数名称:write_data(uint lcd_data)写数据
入口参数:current_data
返回参数:无
********************************/
void WriteData12864(uchar lcd_data)
{
void ReadStatusLCM(); //检测忙
s_ms(100);
PORTG|=RS; //RS=1
s_ms(100);
PORTG&=~RW; //RW=0
s_ms(100);
PORTG|=EN; //EN=1
s_ms(100);
PORTA=lcd_data; //输出数据
s_ms(100);
PORTG&=~EN; //EN=0
s_ms(100);
}
/********************************
函数名称:ReadBusy()判忙
入口参数:无
返回参数:"1"忙;"0"不忙
********************************/
void ReadStatusLCM(void)
{
uchar temp;
uchar flag = 1;
while(flag==1)
{
DDRA=0x00; //端口A改为输入
PORTA=0xff;
s_ms(100);
PORTG&=~RS; //RS=0
s_ms(100);
PORTG|=RW; //RW=1
s_ms(100);
PORTG|=EN; //EN=1
s_ms(100);
temp = PINA; //读端口A
s_ms(100);
DDRA=0xff; //端口A改为
s_ms(100);
PORTG&=~EN; //EN=0
s_ms(100);
if(temp>>7==0)
flag = 0;
}
}
/********************************
函数名称:WriteCgram(uchar lcd_addr,uchar lcd_data)写CGRAM
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/
void WriteCgram(uchar lcd_addr,uchar *lcd_data)
{
uchar j;
WriteCmd12864(0X34);//扩展指令
WriteCmd12864(0X02);//允许写CGRAM
WriteCmd12864(0x38); //返回基本指令
WriteCmd12864(lcd_addr);
for(j=0;j<32;j++)
{
WriteData12864(*lcd_data++);
}
}
/********************************
函数名称:WriteDdram(uchar lcd_addr,uchar lcd_data)显示CGRAM中的汉字
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/
void WriteDdram(uchar lcd_addr,uchar lcd_data)
{
WriteCmd12864(lcd_addr);
WriteData12864(0x00); //一定要有
WriteData12864(lcd_data);
}
/********************************
函数名称:WriteGdram(uchar lcd_addr,uchar lcd_data)写GdRAM
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/
void LCD_fulldisplay_picture_2(const uchar *pic) //全屏显示图片方法2
{
unsigned char i,j;
WriteCmd12864(0x34); //关闭绘图
WriteCmd12864(0x36); //打开画图
for(i=0;i<64;i++) //上半屏显示
{
WriteCmd12864(0x80|i); //列位置
WriteCmd12864(0x80); //行位置
for(j=0;j<16;j++) //256/8=32 byte
{ //列位置每行自动增加
WriteData12864(*pic);
pic++;
}
}
WriteCmd12864(0x30);
}
/********************************
函数名称:LcdInit()初始化
入口参数:无
返回参数:无
********************************/
void LcdInit()
{
WriteCmd12864(0x38); //显示模式设置,开始要求每次检测忙信号
WriteCmd12864(0x08); //关闭显示
WriteCmd12864(0x01); //显示清屏
WriteCmd12864(0x06); //显示光标移动设置
WriteCmd12864(0x0C); //显示开及光标设置
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -