?? ocmlcd.h
字號:
/*
OCMLCD常用驅動函數(shù)
Write_Chinese(uint8_t xx,uint8_t yy,uint8_t qq,uint8_t ww) 寫漢字
xx為橫向坐標不能大于7 YY縱向坐標<=1 如‘啊’的國標1001
Write_Data(uint8_t data) 寫數(shù)據(jù)
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) 顯示字節(jié)點陣 0=白 1=黑
Pic(uint8_t addr_x,uint8_t addr_y,uint8_t row,uint8_t line,uint8_t *p) 圖片顯示8點為模橫向取
row行數(shù),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作為數(shù)據(jù)線接口
#define LCDPIN PINB //BUSY 為PINB。1
#define LCDDDR DDRB //控制位方向
#define DataDDR DDRA //數(shù)據(jù)輸出控制
#define REQ_L cbbi(1)
#define REQ_H sbbi(1) //請求LCD接受處理數(shù)據(jù)
#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) //寫數(shù)據(jù)
{
REQ_L;
LCDDDR=0xfe; //讀狀態(tài) DDRB0=0 DDRB1=1
DataDDR=0xff; //數(shù)據(jù)口設置為輸出
loop_until_bit_is_clear(LCDPIN,0);//等待BUSY=0
LCDPORT=data; //發(fā)送數(shù)據(jù)
Delayt; //等待數(shù)據(jù)穩(wěn)定
REQ_H; //請求LCD接受數(shù)據(jù)
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)//顯示字節(jié)點陣 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點光標
}
}
/*圖片顯示函數(shù)*/
void Pic(uint8_t addr_x,uint8_t addr_y,uint8_t row,uint8_t line,uint8_t *p) //row行數(shù),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 + -