⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ocmlcd.h

📁 详细讲解PS/2键盘通信接口及协议
💻 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 + -