找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1095|回复: 0
收起左侧

关于单片机中使中文字符串逆序排列程序,下面是我写的函数

[复制链接]
ID:696029 发表于 2020-3-14 22:11 | 显示全部楼层 |阅读模式
uchar* str_rorate(uchar *cn)
{
         uchar *p;
         uchar i,j,k;
         i=j=0;
         p=cn;
         while(1)
         {
                  if(*(p+i)=='\0')
                 break;
                 i++;
         }
         i=i-1;
         while(i>j)
         {
                  k=*(p+j);
                 *(p+j)=*(p+i-1);
                 *(p+i-1)=k;
                 k=*(p+j+1);
                 *(p+j+1)=*(p+i);
                 *(p+i)=k;
                 i=i-2;
                 j=j+2;
         }
         return p;
}
由于LCD12864只有接收到逆序的字符串,因此我想写一个这样的函数使字符串逆序,但是发现LCD12864上的结果和之前还是一样的,我就很困惑了。希望有人能给我点帮助。
下面是在LCD12864上显示字符串的函数
uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)
{
        uchar j, x1, x2, wordNum;
        cn=str_rorate(cn);
        //--Y的坐标只能从0到7,大于则直接返回--//
        if(y > 7)
        {
                return 0;
        }

        //--X的坐标只能从0到128,大于则直接返回--//
        if(x > 128)
        {
                return 0;
        }
        y += 0xB0;           //求取Y坐标的值
        //--设置Y坐标--//
        LcdSt7565_WriteCmd(y);
        while ( *cn != '\0')         //在C语言中字符串结束以‘\0’结尾
        {        
        
                //--设置Y坐标--//
                LcdSt7565_WriteCmd(y);

                x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
                x2 = x & 0x0F;          //去低四位
                //--设置X坐标--//
                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                LcdSt7565_WriteCmd(0x04 + x2);        //低4位

                for (wordNum=0; wordNum<50; wordNum++)
                {
                    //--查询要写的字在字库中的位置--//
                        if ((CN16CHAR[wordNum].Index[0] == *cn)
                             &&(CN16CHAR[wordNum].Index[1] == *(cn+1)))
                        {
                                for (j=0; j<32; j++) //写一个字
                                {               
                                        if (j == 16)         //由于16X16用到两个Y坐标,当大于等于16时,切换坐标
                                        {
                                                //--设置Y坐标--//
                                                   LcdSt7565_WriteCmd(y + 1);
                        
                                                //--设置X坐标--//
                                                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                                                LcdSt7565_WriteCmd(0x04 + x2);        //低4位
                                        }
                                        LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);
                                }
                                x += 16;
                        }//if查到字结束               
                } //for查字结束        
                cn += 2;
        }        //while结束
        return 1;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表