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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机控制12864液晶显示程序.docx

1、单片机控制12864液晶显示程序/*/= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)/= 功 能: 在指定坐标位置显示一个点/= 参 数: 坐标,显示点或清除点/= 返 回 值:/= 函数性质:私有函数/= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型/= Mode 1:显示 0:清除该点*/Pixel(unsigned char PointX,unsigned char PointY, bit Mode) unsigned int StartAddr; unsigned

2、char dat; StartAddr=(uint)PointX*30 + PointY/8 + grhome; dat=LC_BIT_OP+7-PointY%8; /生产位操作命令画点的数据 if(Mode) dat=dat|0x08; wr_cmd_2(LC_ADD_POS,StartAddr);/设置该点所在单元地址 wr_cmd_0(dat); / 利用位操作命令画点/*/= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)/= 功 能:

3、划线函数/= 参 数: 坐标1,坐标2,显示点或清除点/= 返 回 值:/= 函数性质:私有函数/= 其它:显示点阵不超过255*255/*/void line( unsigned char y1,unsigned char x1, unsigned char y2,unsigned char x2, bit Mode) unsigned char x,y; float k,b; if( abs(y1-y2) = abs(x1-x2) ) / |k|=1 k=(float)y2-y1) / (float)x2-x1) ; b=y1-k*x1; if( x1 = x2 ) for(x=x1;x=

4、x2;x+) y=(uchar)(k*x+b); Pixel(x, y, Mode); else for(x=x2;x abs(x1-x2) |K|1 k=(float)x2-x1) / (float)y2-y1) ; b=x1-k*y1; if( y1 = y2 ) for(y=y1;y=y2;y+) x=(uchar)(k*y+b); Pixel( x , y,Mode ); else for(y=y2;y0;i-) if(LCMCP & 0x03) = 0x03) break; return i; / 若返回零,说明错误/*/= 函数原型: uchar check_ar_st/= 功 能

5、: 查询是否可数据自动读状态/= 参 数:/= 返 回 值: 非0不忙,否则忙/= 函数性质:私有函数*/uchar check_ar_st(void) / 状态位ST2 判断(数据自动读状态) uchar i; for(i=100;i0;i-) if(LCMCP & 0x04) = 0x04) break; return i; / 若返回零,说明错误/*/= 函数原型: uchar check_aw_st/= 功 能: 查询是否可数据自动写状态/= 参 数:/= 返 回 值: 非0不忙,否则忙/= 函数性质:私有函数*/uchar check_aw_st(void) / 状态位ST3 判断(

6、数据自动写状态) uchar i; for(i=100;i0;i-) if(LCMCP & 0x08) = 0x08) break; return i; / 若返回零,说明错误/*/= 函数原型: uchar check_scrPeek_st()/= 功 能: 查询是否可屏读/屏拷贝状态状态/= 参 数:/= 返 回 值: 非0不忙,否则忙/= 函数性质:私有函数*/uchar check_scrPeek_st(void) / 状态位ST6 判断(屏读/屏拷贝状态) uchar i; for(i=100;i0;i-) if(LCMCP & 0x40) = 0x40) break; return

7、 i; / 若返回零,说明错误/*/= 函数原型: uchar wr_cmd_2(uchar uCmd,uint uPar)/= 功 能: 给T6963C写带双参数的指令/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar wr_cmd_2(uchar uCmd,uint uPar) / 写双参数的指令 if(check_cmd_st() = 0) return 1; LCMDP = (uchar)(uPar& 0xFF);/先写低字节,再写高字节 if(check_cmd_st() = 0) return 2; LCMDP = (uchar)(uPar

8、8); if(check_cmd_st() = 0) return 3; LCMCP = uCmd; return 0; / 返回0 成功/*/= 函数原型: uchar wr_cmd_1(uchar uCmd,uchar uPar1)/= 功 能: 给T6963C写带单参数的指令/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar wr_cmd_1(uchar uCmd,uchar uPar) / 写单参数的指令 if(check_cmd_st() = 0) return 1; LCMDP = uPar; if(check_cmd_st() = 0)

9、return 2; LCMCP = uCmd; return 0; / 返回0 成功/*/= 函数原型: uchar wr_cmd_0(uchar uCmd)/= 功 能: 给T6963C写无参数的指令/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar wr_cmd_0(uchar uCmd) / 写无参数的指令 if(check_cmd_st() = 0) return 1; LCMCP = uCmd; return 0; / 返回0 成功/*/= 函数原型: uchar wr_data(uchar uData)/= 功 能: 给T6963C写一次数

10、据/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar wr_data(uchar uData) / 写一次数据 if(check_cmd_st() = 0) return 1; LCMDP = uData; return 0; / 返回0 成功/*/= 函数原型: uchar awr_data(uchar uData)/= 功 能: 给T6963C写一个地址增加自动连续数据/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar awr_data(uchar uData) / 自动写数据 if(check_aw_st

11、() = 0) return 1; LCMDP = uData; return 0; / 返回0 成功/*/= 函数原型: uchar ard_data(uchar uData)/= 功 能: 从T6963C读一个地址增加自动连续数据/= 参 数:/= 返 回 值: 返回0 成功,否则忙/= 函数性质:私有函数*/uchar ard_data(void) / 自动读数据 if(check_ar_st() = 0) return 1; return LCMDP;/*/= 函数原型: void char_addr_Pointer_Set(uchar urow, uchar ucol)/= 功 能:

12、 根据字符的行列设置vram地址/= 参 数:/= 返 回 值:/= 函数性质:私有函数*/void char_addr_Pointer_Set(uchar urow, uchar ucol) uint iPos; iPos = urow * 30 + ucol + txthome; wr_cmd_2(LC_ADD_POS,iPos);/*/= 函数原型: Clr_char_Scr(void)/= 功 能: 清除当前文本屏幕/= 参 数:/= 返 回 值:/= 函数性质:公有函数*/void Clr_char_Scr(void)/文本屏可以在内存中保持很多屏 uint i;/ char_add

13、r_Pointer_Set(0,0);/从0行0列开始 char_addr_Pointer_Set(2,0);/从0行0列开始 wr_cmd_0(LC_AUT_WR); / 自动写/ for(i=0;i16*30;i+) /16行30列字符 for(i=0;i14*30;i+) /16行30列字符 awr_data(0x00); / 写数据空白 wr_cmd_0(LC_AUT_OVR); / 自动写结束 char_addr_Pointer_Set(0,0); / 重置地址指针/*/= 函数原型: Clr_lcdram(void)/= 功 能: 清除所有的显示内存/= 参 数:/= 返 回 值:

14、/= 函数性质:私有函数*/void Clr_lcdram(void) uint i; wr_cmd_2(LC_ADD_POS,0x0000); / 设置地址指针0 wr_cmd_0(LC_AUT_WR); / 自动写 for(i=0;i 11);/CGRAM 偏移地址设置 wr_cmd_0(LC_MOD_XOR|0x08); / 显示方式设置,异或,字符全部用RAM区域生成 wr_cmd_0(LC_DIS_SW |0x0c); / 显示开关设置,图文混和模式 Clr_lcdram();/清除内存/*/= 函数原型: Pixel(unsigned char PointX,unsigned ch

15、ar PointY, bit Mode)/= 功 能: 在指定坐标位置显示一个点/= 参 数: 坐标,显示点或清除点/= 返 回 值:/= 函数性质:私有函数/= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型/= Mode 1:显示 0:清除该点*/Pixel(unsigned char PointX,unsigned char PointY, bit Mode) unsigned int StartAddr; unsigned char dat; StartAddr=(uint)PointX*30 + PointY/8 + grhome; dat=LC_B

16、IT_OP+7-PointY%8; /生产位操作命令画点的数据 if(Mode) dat=dat|0x08; wr_cmd_2(LC_ADD_POS,StartAddr);/设置该点所在单元地址 wr_cmd_0(dat); / 利用位操作命令画点/*/= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)/= 功 能: 划线函数/= 参 数: 坐标1,坐标2,显示点或清除点/= 返 回 值:/= 函数性质:私有函数/= 其它:显示点阵不超过255*

17、255/*/void line( unsigned char y1,unsigned char x1, unsigned char y2,unsigned char x2, bit Mode) unsigned char x,y; float k,b; if( abs(y1-y2) = abs(x1-x2) ) / |k|=1 k=(float)y2-y1) / (float)x2-x1) ; b=y1-k*x1; if( x1 = x2 ) for(x=x1;x=x2;x+) y=(uchar)(k*x+b); Pixel(x, y, Mode); else for(x=x2;x abs(x

18、1-x2) |K|1 k=(float)x2-x1) / (float)y2-y1) ; b=x1-k*y1; if( y1 = y2 ) for(y=y1;y=y2;y+) x=(uchar)(k*y+b); Pixel( x , y,Mode ); else for(y=y2;y=y1;y+) x=(uchar)(k*y+b); Pixel( x , y,Mode ); /*/= 函数原型: void ShowChar(uchar row,uchar col,uchar ch)/= 功 能: 在指定行列显示8*16字符/= 参 数: 坐标行,坐标列,字符串指针/= 返 回 值:/= 函数性

19、质:公有函数/=其它:所有可显示字符不超过128个,否则本函数有溢出的可能*/void showchar(uchar col,uchar row,uchar *chp) #define hzp chp uchar char_sequence_number; uchar ascii_num; row/=8;col/=8; while (*chp != 0) if (*chp0x80)/西文 for (char_sequence_number=0;ASCII_SUB_INDEXchar_sequence_number!=0;char_sequence_number+) if (ASCII_SUB_

20、INDEXchar_sequence_number=*chp) chp+; break; if(ASCII_SUB_INDEXchar_sequence_number=0)chp+;char_sequence_number=1; char_sequence_number*=2;/一个ASCII字符占两个8*8字符 /写字符上半部分 char_addr_Pointer_Set(row,col);/设置Vram地址 wr_data(char_sequence_number); /写数据 wr_cmd_0(LC_UNCHANGED_WR); /写命令 /写字符下半部分 row+=1;/下半部分在下一行 char_addr_Pointer_Set(row,col);/设置Vram地址 wr_data(char_sequence_number+1); /写数据 wr_cmd_0(LC_UNCHANGED_WR); /写命令 /行列地址自动指向下个字符位

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

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