欢迎来到天天文库
浏览记录
ID:43739561
大小:30.50 KB
页数:4页
时间:2019-10-13
《字库汉字旋转90度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、用液晶显示汉字一般是从字库中提取汉字点阵的数组,再讲汉字显示出来。现在遇到一个客户要求将汉字逆时针旋转90度显示,原因是他的屏幕要竖着放,而我的屏幕只有横向显示功能。在研究了一下液晶屏的显示和字库取模的数组后,做了以下程序对汉字旋转90度后显示到液晶屏上。不多废话,上源码:/****送指令到晶联讯字库IC***/voidsend_command_to_ROM(uchardatu){uchari;for(i=0;i<8;i++){if(datu&0x80)Rom_IN=1;elseRom_IN=0;datu=datu<<
2、1;Rom_SCK=0;Rom_SCK=1;}}/****从晶联讯字库IC中取汉字或字符数据(1个字节)***/staticucharget_data_from_ROM(){uchari;ucharret_data=0;Rom_SCK=1;for(i=0;i<8;i++){Rom_OUT=1;Rom_SCK=0;ret_data=ret_data<<1;if(Rom_OUT)ret_data=ret_data+1;elseret_data=ret_data+0;Rom_SCK=1;}return(ret_data);}
3、/*从相关地址(addrHigh:地址高字节,addrMid:地址中字节,addrLow:地址低字节)中连续读出DataLen个字节的数据到pBuff的地址*//*连续读取*/voidget_n_bytes_data_from_ROM(ucharaddrHigh,ucharaddrMid,ucharaddrLow,uchar*pBuff,ucharDataLen){uchari,j;ucharbuff[32];Rom_CS=0;lcd_cs1=1;Rom_SCK=0;send_command_to_ROM(0x03);
4、send_command_to_ROM(addrHigh);send_command_to_ROM(addrMid);send_command_to_ROM(addrLow);for(i=0;i5、=(*(pBuff+j)>>i)&0x01;}}for(6、i=0;i<8;i++){buff[i+8]=0x00;for(j=0;j<8;j++){buff[i+8]<<=1;buff[i+8]7、=(*(pBuff+j+16)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+16]=0x00;for(j=0;j<8;j++){buff[i+16]<<=1;buff[i+16]8、=(*(pBuff+j+8)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+24]=0x00;for(j=0;j<8;j++){buff[i+24]<<=19、;buff[i+24]10、=(*(pBuff+j+24)>>i)&0x01;}}for(i=0;i<32;i++)*(pBuff+i)=buff[i];}elseif(DataLen==16){for(i=0;i<8;i++){buff[i]=0x00;for(j=0;j<8;j++){buff[i]<<=1;buff[i]11、=(*(pBuff+j)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+8]=0x00;for(j=0;j<8;j++){buff[i+8]<<=1;buff[i+8]12、=(13、*(pBuff+j+8)>>i)&0x01;}}for(i=0;i<16;i++){if(i<3)*(pBuff+i)=0;else*(pBuff+i)=buff[i-2];}}//将汉字旋转90度Rom_CS=1;}以上代码是从字库(字库IC用的是晶联讯6脚字库IC)中取汉字数组的程序,红色部分是自己加入的。就是将取出的汉字旋转的一部分程序。一般旋转后显示汉字的位置也要变,比如正常的横屏情况下,显示行是从左向右,列从上向下显示,那么竖屏后,行是从下向上,列从左向右显示了(注意我是逆时针旋转90度,顺时针的话参考上面程14、序自己改改吧)。因此要讲显示的列起始地址和行起始地址更改,这个在液晶规格书一般有详细说明,自己参考下修改就行了。以上!
5、=(*(pBuff+j)>>i)&0x01;}}for(
6、i=0;i<8;i++){buff[i+8]=0x00;for(j=0;j<8;j++){buff[i+8]<<=1;buff[i+8]
7、=(*(pBuff+j+16)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+16]=0x00;for(j=0;j<8;j++){buff[i+16]<<=1;buff[i+16]
8、=(*(pBuff+j+8)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+24]=0x00;for(j=0;j<8;j++){buff[i+24]<<=1
9、;buff[i+24]
10、=(*(pBuff+j+24)>>i)&0x01;}}for(i=0;i<32;i++)*(pBuff+i)=buff[i];}elseif(DataLen==16){for(i=0;i<8;i++){buff[i]=0x00;for(j=0;j<8;j++){buff[i]<<=1;buff[i]
11、=(*(pBuff+j)>>i)&0x01;}}for(i=0;i<8;i++){buff[i+8]=0x00;for(j=0;j<8;j++){buff[i+8]<<=1;buff[i+8]
12、=(
13、*(pBuff+j+8)>>i)&0x01;}}for(i=0;i<16;i++){if(i<3)*(pBuff+i)=0;else*(pBuff+i)=buff[i-2];}}//将汉字旋转90度Rom_CS=1;}以上代码是从字库(字库IC用的是晶联讯6脚字库IC)中取汉字数组的程序,红色部分是自己加入的。就是将取出的汉字旋转的一部分程序。一般旋转后显示汉字的位置也要变,比如正常的横屏情况下,显示行是从左向右,列从上向下显示,那么竖屏后,行是从下向上,列从左向右显示了(注意我是逆时针旋转90度,顺时针的话参考上面程
14、序自己改改吧)。因此要讲显示的列起始地址和行起始地址更改,这个在液晶规格书一般有详细说明,自己参考下修改就行了。以上!
此文档下载收益归作者所有