STM32F4_LCD12864串行并行驱动程序合集(3)

2019-03-27 20:23

LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 0; dat <<= 1; //左移一位,先发的是高位 } LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 0; LCD_Delay();LCD_Delay();LCD_Delay(); //等待硬件反应(等待数据发送完全) } /********************************************************** 据

* 函数功能 ---> LCD写入一个字节命令或者数据 * 入口参数 ---> dat:要写入的命令或者数据

* ord:命令或者数据判断为。0为命令,1为数

* 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Write_Byte(u8 dat,u8 ord) { u8 tem; u8 i,j;

tem = dat & 0xf0; //先发送高4位 LCD12864_Start((ord << 1) | 0xf0); //置RW为“0”、RS为“ord”并启动串行传输为数据格式 for(j = 0;j < 2;j++) //一个字节数据或者命令分两次发送 { 化 LCD_Delay();LCD_Delay();LCD_Delay(); 放上数据,屏蔽低4位

LCD_SCL = 0; //允许数据线电平变

for(i = 0;i < 8;i++) { if(tem & 0x80) LCD_SDA = 1; //

else LCD_SDA = 0;

LCD_Delay();LCD_Delay();LCD_Delay();

}

LCD_SCL = 0;

tem <<= 1; //左移一位,先

LCD_SCL = 1; //发送数据,上升

沿有效 LCD_Delay();LCD_Delay();LCD_Delay(); 发的是高位

tem = (dat << 4) & 0xf0; //发完高4位,再次发送低4位 } LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SDA = 0; LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 0; LCD_Delay();LCD_Delay();LCD_Delay(); LCD_CS = 0; LCD_Delay();LCD_Delay();LCD_Delay(); //等待硬件反应(等待数据发送完全) } //========================================================= #endif #endif

//=========================================================

/**********************************************************

* 函数功能 --->设置LCD显示位置

* 入口参数 ---> x:行,取值范围:1 ~ 4 * y:列,取值范围:0 ~ 7 * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Set_xy(u8 x,u8 y) { switch(x) { case 1: LCD_Write_Byte((One_LineAddress + y),0); //写入操作地址 break; case 2:

case 3: case 4: default:

LCD_Write_Byte((Two_LineAddress + y),0); //写入操作地址 break;

LCD_Write_Byte((Three_LineAddress + y),0); break;

//写入操作地址

LCD_Write_Byte((Four_LineAddress + y),0); //写入操作地址 break;

LCD_Write_Byte((One_LineAddress + y),0); //写入操作地址 break; } }

/********************************************************** * 函数功能 --->写入自定义字符到LCD的CGRAM * 入口参数 ---> *data_code:写入的数组 * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Write_CGRAM_ALL(const u8 *data_code) { u8 i; LCD_Write_Byte(0x34,0); //打开字符扩展指令 LCD_Write_Byte(0x02,0); //SR=0,允许输入 LCD_Write_Byte(0x30,0); //恢复基本指令 LCD_Write_Byte(0x40,0); //CGRAM地址 for(i = 0;i < CGRAM_Value;i++) { LCD_Write_Byte(data_code[i*2],1); LCD_Write_Byte(data_code[i*2+1],1); } }

/********************************************************** * 函数功能 ---> Modify the character content of the first CGRAM space * 入口参数 ---> *data_code:写入的数组 * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void LCD_Write_CGRAM_ONE(const u8 *data_code,u8 add_h,u8 add_l) { u8 i; //Locked flag check if(LCD12864_LockedFlag==1)return;

else LCD12864_LockedFlag = 1; LCD_Write_Byte(0x34,0); //打开字符扩展指令 LCD_Write_Byte(0x02,0); //SR=0,允许输入 LCD_Write_Byte(0x30,0); //恢复基本指令 LCD_Write_Byte(0x40,0); //CGRAM地址 if(add_l==0) { for(i = 0;i < 16;i ++) { CGROM_Code[i*2] = data_code[i*2]; CGROM_Code[i*2+1] = data_code[i*2+1]; } } else if(add_l==2) { for(i = 0;i < 16;i ++) { CGROM_Code[i*2+32] = data_code[i*2]; CGROM_Code[i*2+33] = data_code[i*2+1]; } } else if(add_l==4) { for(i = 0;i < 16;i ++) { CGROM_Code[i*2+64] = data_code[i*2]; CGROM_Code[i*2+65] = data_code[i*2+1]; } } else if(add_l==6) { for(i = 0;i < 16;i ++) { CGROM_Code[i*2+96] = data_code[i*2]; CGROM_Code[i*2+97] = data_code[i*2+1]; } } for(i = 0;i < CGRAM_Value;i++) { LCD_Write_Byte(CGROM_Code[i*2],1); LCD_Write_Byte(CGROM_Code[i*2+1],1);

} //Locked flag recovery LCD12864_LockedFlag = 0; }

/********************************************************** * 函数功能 --->显示一个CGRAM内容 * 入口参数 ---> x:行 * y:列

* add_h:CGRAM高位地址 * add_l:CGRAM低位地址 * 返回数值 ---> none * 功能说明 ---> none

**********************************************************/ void Display_CGRAM(u8 x,u8 y,u8 add_h,u8 add_l) { //Locked flag check if(LCD12864_LockedFlag==1)return; else LCD12864_LockedFlag = 1;

LCD_Set_xy(x,y); //设置显示地址 LCD_Write_Byte(add_h,1); LCD_Write_Byte(add_l,1); //Locked flag recovery LCD12864_LockedFlag = 0; }

/********************************************************** * 函数功能 ---> LCD显示字符串 * 入口参数 ---> x:行 * y:列

* *str:要显示的字符串 * len:显示的长度 * 返回数值 ---> none

* 功能说明 --->可以从显示数组的任意位置starsum开始显示len长度的字符串 **********************************************************/ void Display_String(u8 x,u8 y,u8 *str,u8 len) { //Locked flag check if(LCD12864_LockedFlag==1)return; else LCD12864_LockedFlag = 1; LCD_Set_xy(x,y); //设置显示地址 while(len--)


STM32F4_LCD12864串行并行驱动程序合集(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何挽救出轨的老婆老婆果然没有经受住“七年之痒”

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: