ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:24.32KB ,
资源ID:4118252      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4118252.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LCD12864Code.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LCD12864Code.docx

1、LCD12864Code/* File name - lcd12864.c* Version - V1.1.2* Date - 11-30-2013* Brief - LCD12864驱动函数* V1.1* Revise - A、修正操作命令宏定义。* - B、增加串口、并口转换宏定义,增加对高速度MCU控制通讯频率延时函数* - C、显示字符串函数增加显示长度选择,即显示多少个ASCII可显示字符,汉字x2即可* - D、去掉显示数组函数,合并在字符串显示里 V1.1.1* Revise - 增加字符串显示函数,可以从要显示的数组中任意位置显示一定长度字符串 V1.1.2* Revise -

2、 A、增加对低速晶振系统的MCU通讯频率是否使用的宏定义* - B、增加在检测液晶忙超时退出,预防死循环*/#include lcd12864.h/* 自定义显示字符 */#define CGRAM_Value 64 /写入CGRAM数量 u8 code CGROM_Code = /天线图形 0xff,0xff,0x80,0x01,0xbf,0xfd,0xdf,0xfb,0xec,0x37,0xf6,0x6f,0xfb,0xdf,0xfd,0xbf, 0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0xfe,0x7f,0x

3、ff,0xff, /摄氏图形/ 0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x70,0x14,0xd8,0x1d,0x88,0x01,0x80,0x01,0x80,/ 0x01,0x80,0x01,0x80,0x01,0x88,0x00,0xc8,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00, /蓝牙图形 0x07,0xe0,0x0e,0x70,0x1e,0xb8,0x3e,0xdc,0x36,0xec,0x3a,0xdc,0x3c,0xbc,0x3e,0x7c, 0x3e,0x7c,0x3c,0xbc,0x3a,0xdc,0x36

4、,0xec,0x3e,0xdc,0x1e,0xb8,0x0e,0x70,0x07,0xe0, /CD图形 0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0x07,0xc9,0xb3,0x9d,0xb9,0x9f,0xb9,0x9f,0xb9, 0x9f,0xb9,0x9f,0xb9,0x9d,0xb9,0xc9,0xb3,0xe3,0x07,0xff,0xff,0xff,0xff,0xff,0xff, /右指向手型 0x00,0x00,0x1e,0x00,0x12,0x00,0x73,0xfc,0x52,0x02,0x52,0x1c,0x53,0xe0,0x52,0x1

5、0, 0x53,0xe0,0x52,0x10,0x53,0xe0,0x52,0x10,0x73,0xe0,0x12,0x00,0x1e,0x00,0x00,0x00 ;/=#ifdef LCD_Work_Mode /如果定义了,则使用并口工作模式/=/* 函数功能 - LCD12864判断忙* 入口参数 - none* 返回数值 - none* 功能说明 - none*/void LCD_Check_Busy(void) static u16 busytimeout; /忙超时 /= #ifdef LCD_USE_DELAY /* 定义了则使用延时调整通讯频率 */ /= ktdata = 0

6、xf0; /数据口全部置位 do busytimeout+; if(busytimeout 300) break; LCD_RS = 0; LCD_Delay(); LCD_RW = 1; LCD_Delay(); LCD_EN = 1; LCD_Delay(); while(ktdata & LCD_Busy = LCD_Busy); /等待LCD忙完 LCD_EN = 0; /= #else /* 没定义则不使用 */ /= ktdata = 0xf0; /数据口全部置位 do busytimeout+; if(busytimeout 300) break; LCD_RS = 0; LCD

7、_RW = 1; LCD_EN = 1;/ LCD_Delay(); while(ktdata & LCD_Busy = LCD_Busy); /等待LCD忙完 LCD_EN = 0; /= #endif /= if(busytimeout = 300) printf(LCD Busy TimeOut.rn); busytimeout = 0;/* 函数功能 - LCD写入一个字节命令或者数据,判断忙标志(8位数据一次发送完毕)* 入口参数 - dat:要写入的字节* ord:判断dat是命令还是数据依据,“0”为命令,“1”为数据* 返回数值 - none* 功能说明 - none*/voi

8、d LCD_Write_Byte(u8 dat,u8 ord) /= #ifdef LCD_USE_DELAY /* 定义了则使用延时调整通讯频率 */ /= LCD_Check_Busy(); /判断是否在忙? LCD_EN = 0; LCD_Delay(); LCD_RW = 0; LCD_Delay(); if(ord & 0x01) LCD_RS = 1; /放上数据或者命令判断位 else LCD_RS = 0; LCD_EN = 1; LCD_Delay(); ktdata = dat; /放入数据 LCD_Delay(); LCD_EN = 0; /= #else /* 没定义则

9、不使用 */ /= LCD_Check_Busy(); /判断是否在忙? LCD_EN = 0; LCD_RW = 0; if(ord & 0x01) LCD_RS = 1; /放上数据或者命令判断位 else LCD_RS = 0; LCD_EN = 1; ktdata = dat; /放入数据 LCD_EN = 0; /= #endif /=/=#else /没定义则使用串口通讯模式/=/* 函数功能 - LCD启动字节* 入口参数 - dt:传输的字节,高5位在函数内部设定为1* 只是确定RW和RS为,最后那位也是内部确定* 返回数值 - none* 功能说明 - 首先传送一个启动字节,

10、送入连续5个“1”用来启* 动一个周期,此时传输计数被重置,并且串行传输* 被同步,紧接着的两个位指定传输方向(R/W,确* 定是读还是写)和传输性质(RS,确定是命令寄存* 器还是数据寄存器),最后的第八位是一个“0”*/void LCD12864_Start(u8 dt) u8 dat,j; dat = dt | 0xf8; /高5位设定为“1”,第八位设定为“0” LCD_SCL = 0; LCD_Delay();LCD_Delay(); LCD_CS = 1; /选中显示屏,高电平有效 for(j = 0;j 8;j+) if(dat & 0x80) LCD_SDA = 1; /放数据

11、到数据线 else LCD_SDA = 0; LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 1; /发送数据,上升沿有效 LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 0; dat LCD写入一个字节命令或者数据* 入口参数 - dat:要写入的命令或者数据* ord:命令或者数据判断为。0为命令,1为数据* 返回数值 - none* 功能说明 - none*/void LCD_Write_Byte(u8 dat,u8 ord) u8 tem; u8 i,j; tem = dat & 0xf0; /

12、先发送高4位 LCD12864_Start(ord 1) | 0xf0); /置RW为“0”、RS为“ord”并启动串行传输为数据格式 for(j = 0;j 2;j+) /一个字节数据或者命令分两次发送 LCD_SCL = 0; /允许数据线电平变化 LCD_Delay();LCD_Delay();LCD_Delay(); for(i = 0;i 8;i+) if(tem & 0x80) LCD_SDA = 1; /放上数据,屏蔽低4位 else LCD_SDA = 0; LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 1; /发送数据,上升沿有

13、效 LCD_Delay();LCD_Delay();LCD_Delay(); LCD_SCL = 0; tem = 1; /左移一位,先发的是高位 tem = (dat 设置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: LCD_Write_Byte(Two_LineAddress + y)

14、,0); /写入操作地址 break; case 3: LCD_Write_Byte(Three_LineAddress + y),0); /写入操作地址 break; case 4: LCD_Write_Byte(Four_LineAddress + y),0); /写入操作地址 break; default: LCD_Write_Byte(One_LineAddress + y),0); /写入操作地址 break; /* 函数功能 - 写入自定义字符到LCD的CGRAM* 入口参数 - *data_code:写入的数组* 返回数值 - none* 功能说明 - none*/void LC

15、D_Write_CGRAM(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内容* 入口参数 - x:行* y:列* *str为要显示的字符串* add_h:CGRAM高位地址* add_l:CGRAM低位地址* 返回数值 - none* 功能说明 - none*/void Display_CG

16、RAM(u8 x,u8 y,u8 add_h,u8 add_l) LCD_Set_xy(x,y); /设置显示地址 LCD_Write_Byte(add_h,1); LCD_Write_Byte(add_l,1);/* 函数功能 - LCD显示字符串* 入口参数 - x:行* y:列* *str:要显示的字符串* len:显示的长度* 返回数值 - none* 功能说明 - 只能从数组的开头开始显示len长度字符串*/void Display_String(u8 x,u8 y,u8 *str,u8 len) LCD_Set_xy(x,y); /设置显示地址 while(len-) LCD_Wr

17、ite_Byte(*str,1); str+; /* 函数功能 - LCD显示字符串* 入口参数 - x:行* y:列* *str:要显示的字符串* len:显示的长度* 返回数值 - none* 功能说明 - 可以从显示数组的任意位置starsum开始显示len长度的字符串*/void Display_String1(u8 x,u8 y,u8 *str,u8 starsum,u8 len) u8 i; LCD_Set_xy(x,y); /设置显示地址 for(i = starsum;i LCD写入GDRAM绘图* 入口参数 - x:行* y:列* width:显示图片的宽度* hieght:

18、显示图片的高度* *bmp:要显示的字符串* dis_mode:显示模式,是半屏显示还是全屏显示* 0:半屏显示。1:全屏显示* 返回数值 - none* 功能说明 - none*/void Display_GDRAM(u8 x,u8 y,u8 width,u8 height,u8 *bmp,u8 dis_mode) u8 i,j,k; u8 base_x,base_y; /起始坐标 /*全屏绘图显示*/ if(dis_mode) switch(x) case 1: base_y = One_LineAddress + y; break; case 2: base_y = Two_LineAd

19、dress + y; break; case 3: base_y = Three_LineAddress + y; break; case 4: base_y = Four_LineAddress + y; break; default: break; LCD_Write_Byte(MPU_8bit_Expansion_Draw_Close,0); /扩充指令 LCD_Write_Byte(MPU_8bit_Expansion_Draw_Open,0); /打开绘图功能 for(j = 0;j height;j+) /32 LCD_Write_Byte(base_y + j,0); /写入行号,即第几行开始 LCD_Write_Byte(One_LineAddress,0); /横坐标的第几个字节开始写 for(i = 0;i width;i+) /上半屏 LCD_Write_Byte

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1