📄 ocmlcd.h
字号:
/*
OCMLCD常用驱动函数
Write_Chinese(uint8_t xx,uint8_t yy,uint8_t qq,uint8_t ww) 写汉字
xx为横向坐标不能大于7 YY纵向坐标<=1 如‘啊’的国标1001
Write_Data(uint8_t data) 写数据
LCD_Clear(void) 清楚屏幕
Write_ASC(uint8_t xx,uint8_t yy,uint8_t as) 显示8X8 ASCII XX<=15,yy<=31-8
Write_ASCII(uint8_t xx,uint8_t yy,uint8_t as)显示8X16 ASCII
Write_Bit(uint8_t xx,uint8_t yy) 显示位点阵
Write_BT(uint8_t xx,uint8_t yy,uint8_t BT) 显示字节点阵 0=白 1=黑
Pic(uint8_t addr_x,uint8_t addr_y,uint8_t row,uint8_t line,uint8_t *p) 图片显示8点为模横向取
row行数,line列,addr初始位置
R_Up() 上移动一点
R_Down() 下移动
R_Left() 左移
R_Right() 右移动一点
*/
#include<avr/io.h>
#include<util/delay.h>
#include<inttypes.h>
#define LCDPORT PORTA //PORTA作为数据线接口
#define LCDPIN PINB //BUSY 为PINB。1
#define LCDDDR DDRB //控制位方向
#define DataDDR DDRA //数据输出控制
#define REQ_L cbbi(1)
#define REQ_H sbbi(1) //请求LCD接受处理数据
#define Delayt Delay(10) //延时
void sbbi(uint8_t a)
{
PORTB|=1<<a; //PB口A位置位
}
void cbbi(uint8_t a) //PB口A位复位
{
uint8_t b=0xfe;
for(;a>0;a--)
{
b<<=1;
b|=0x01;
}
PORTB&=b;
}
void Delay(uint16_t time)
{
while(time>0)
time--;
}
void Write_Data(uint8_t data) //写数据
{
REQ_L;
LCDDDR=0xfe; //读状态 DDRB0=0 DDRB1=1
DataDDR=0xff; //数据口设置为输出
loop_until_bit_is_clear(LCDPIN,0);//等待BUSY=0
LCDPORT=data; //发送数据
Delayt; //等待数据稳定
REQ_H; //请求LCD接受数据
Delayt; //等待接受
}
void Write_Chinese(uint8_t xx,uint8_t yy,uint8_t qq,uint8_t ww) // 在xx,yy写汉字 xx<=7 ,yy<=1
{
Write_Data(0xf0); //写汉字指令
Write_Data(xx); //写x位置
Write_Data(yy); //写y位置
Write_Data(qq); //写GB
Write_Data(ww);
}
void LCD_Clear(void) //清楚屏幕
{
Write_Data(0xf4);
}
void Write_ASC(uint8_t xx,uint8_t yy,uint8_t as) //显示8X8 ASCII XX<=15,yy<=
{
Write_Data(0xf1);
Write_Data(xx);
Write_Data(yy);
Write_Data(as);
}
void Write_ASCII(uint8_t xx,uint8_t yy,uint8_t as)//显示8X16 ASCII
{
Write_Data(0xf9);
Write_Data(xx);
Write_Data(yy);
Write_Data(as);
}
void Write_Bit(uint8_t xx,uint8_t yy) //显示位点阵
{
Write_Data(0xf2);
Write_Data(xx);
Write_Data(yy);
}
void Write_BT(uint8_t xx,uint8_t yy,uint8_t BT)//显示字节点阵 0=白 1=黑
{
Write_Data(0xf3);
Write_Data(xx);
Write_Data(yy);
Write_Data(BT);
}
void GuangB(uint8_t command)//显示光标
{
Write_Data(0xfb);
switch(command)
{
case 0:Write_Data(0x00);//关闭
case 1:Write_Data(0x07);//显示8点光标
case 2:Write_Data(0x0f);//显示16点光标
}
}
/*图片显示函数*/
void Pic(uint8_t addr_x,uint8_t addr_y,uint8_t row,uint8_t line,uint8_t *p) //row行数,line列,addr初始位置
{
uint8_t iline,irow;
for(irow=row;irow>0;irow--)
{
for(iline=line;iline>0;iline--)
{
Write_BT(line-iline+addr_x ,row-irow+addr_y ,*(p+line-iline+line *(row-irow)));
}
}
}
void R_Up(void) //上移动一点
{
Write_Data(0xf5);
}
void R_Down(void)//下移动
{
Write_Data(0xf6);
}
void R_Left(void) //左移动
{
Write_Data(0xf7);
}
void R_Right(void) //右移动一点
{
Write_Data(0xf8);
}
//int main(void)
//{
//LCD_Clear();
//Write_Chinese(0,0,0x10,0x01);
//Write_Chinese(5,0,0x10,0x01);
//Write_Chinese(1,1,0x10,0x01);
//Write_Bit(0x11,0x11);
//Write_BT(0x02,0x02,0xf5);
//Write_ASC(0x01,0x10,'a');
//GuangB(1);
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -