打印
[STC单片机]

T6963C不显示的问题

[复制链接]
644|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Cjy_JDxy|  楼主 | 2020-5-28 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void lcdinit()           //LCD初始化
{
        lcdcmd0(0x80); //设置显示方式,文本图形“或”
        lcdcmd2(0x00,0x00,0x42); //设置光标首地址
        lcdcmd2(30,0x00,0x43); //设定图形区域宽度
        lcdcmd2(0x00,0x00,0x40); //设置文本显示区首地址
       
       
        lcdcmd2(30,0x00,0x41); ////设定文本区域宽度
        lcdcmd0(0x9f); //设置光标闪烁,不显示,文本与图形显示
       
        lcdcmd0(0xa2); //设置光标形状
       
       
        lcdcmd2(0x00,0x00,0x21); //设置光标指针
        lcdcmd2(0x00,0x00,0x22); //设置CGRAM偏移地址
        lcdcmd2(0x00,0x00,0x24); //设置地址指针
       
       

}
现在可以显示光标,可是不显示字符。
主程序:
lcdinit();
       
        dis_clr(0);//清屏
         write_lcd(16,0,"123abc----------");
显示字符函数如下:
//--------------------------------------------
//         指定位置向LCD写入指定字符
//
//
//--------------------------------------------
void write_lcd(uchar x,uchar y,char *cha)
{
uint place,i=0;
uchar length,c1,c2,j,k;
for(length=0;cha[length]!=0;length++);
   do
    {
      c1=cha[i];      //取字符串的ASCII码
      c2=cha[i+1];
      place=x*30+y;
      if(c1<=128)        //#####小于128为字符,大于128为汉字
       {
        for(k=0;k<16;++k)     //字符设置为16*8
        {
          lcddatw(place&0xff);   //写入地址低位
          lcddatw(place/256);    //写入地址高位
          lcdcmd0(0x24);          //地址设置
          lcdcmd0(0xb0);          //设置数据自动写
          lcddatw(ASC_MSK[(c1-0x20)*16+k]); /*---例如:0的ASCII码为0x30,
          在ASC_MSK中的位置为0x10*16 ---16字节字码依次写入LCD---*/
          lcdcmd0(0xb2);          //自动复位
          place=place+30;
        }
        if(y>28)            //y>28时候需要换行
          {x=x+16;y=0;}
        else                //否则,不换行,继续写下一个字符
          {y++;}
           i++;
      }
     else                   //#####c1大于128为汉字
      {
        for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) //找到汉字
         {
           if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])
           break;            //汉字找到则跳出   
         }
        if(j<sizeof(GB_16)/sizeof(GB_16[0]))   //------如果汉字在子码表内
         {
          for(k=0;k<16;k++)     //字符设置为16*8
           {
            lcddatw(place&0xff);   //写入地址低位
            lcddatw(place/256);    //写入地址高位
            lcdcmd0(0x24);          //地址设置
            lcdcmd0(0xb0);          //地址设置
            lcddatw(GB_16[j].Msk[k*2]);
                      lcddatw(GB_16[j].Msk[k*2+1]); //16*16,每行2字节
            lcdcmd0(0xb2);             //自动复位
            place=place+30;              //下一行
           }
         }
        else             //-----没找到对应汉字则涂黑
         {
          for(k=0;k<16;k++)     //字符设置为16*8
           {
            lcddatw(place&0xff);   //写入地址低位
            lcddatw(place/256);    //写入地址高位
            lcdcmd0(0x24);          //地址设置
            lcdcmd0(0xb0);          //地址设置
            lcddatw(0xff);
                     lcddatw(0xff);
            lcdcmd0(0xb2);             //自动复位
            place=place+30;              //下一行
           }
         }
        if(y>27)      //-------换行
         {x+=16;y=0;}
        else          //--------不用换行,则下一个字
         {y+=2;}
         i+=2;
      }
    }
   while(i<length);
}
请高手指教,谢谢!

使用特权

评论回复

相关帖子

沙发
airwill| | 2020-6-7 21:57 | 只看该作者
通常端口和连接也是个常见问题, 可以在检查软件前先检查一下,   其次直接检查通信时序

使用特权

评论回复
板凳
Cjy_JDxy|  楼主 | 2020-6-8 07:56 | 只看该作者
airwill 发表于 2020-6-7 21:57
通常端口和连接也是个常见问题, 可以在检查软件前先检查一下,   其次直接检查通信时序 ...

谢谢,好了

使用特权

评论回复
地板
airwill| | 2020-6-8 18:07 | 只看该作者
可否介绍一下,  什么问题,  路过的朋友也注意一下

使用特权

评论回复
5
Cjy_JDxy|  楼主 | 2020-6-8 18:24 | 只看该作者
airwill 发表于 2020-6-8 18:07
可否介绍一下,  什么问题,  路过的朋友也注意一下

程序问题。我定义了一个unsigned char变量,赋值超过255,结果死循环了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3530

帖子

19

粉丝