快来看~!东京热为什么不是想象的那么热?

2019-03-23 18:13发布

本帖最后由 yl20084784 于 2016-5-22 18:10 编辑

今天调试了一天的一块晶联讯的一块12832屏幕出现了一个比较奇葩的现象。在这里求助大家帮忙分析一下;
我需要在屏幕上显示一段汉字
调用了个函数如下:
display_GB2312_string(2,60,"东京");  结果显示不正常,
然后我通过查询“东京热”这三个字的机内码,然后弄了个数组
uchar string1[]={0xb6,0xab,0xbe,0xa9,0xc8,0xc8};//每个汉字对应两个uchar
在通过这种形式:
display_GB2312_string(2,3,string1);显示正常

然后各自猜想验证...点头绪都没有。
在主函数里面同时调用两种形式
display_GB2312_string(2,3,string1);
display_GB2312_string(2,60,"东京");

显示效果如下图:
IMG_20160522_163424.jpg
然后通过MDK调试发现中文字符串“东京”被MDK转换成了如下的字符串
333.png
不科学啊,一个汉字应该是对应连个char的啊,怎么变成3个了?还完全牛头不对马嘴了?
这是怎么回事啊?
是MDK设置有问题?还是哪里有点问题啊?求助路过大神点拨~~~
MDK设置了GB2312编码方式(其他几种也测试了,不正常)
QQ图片20160522163253.png

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
嵌入式追溯者
2019-03-24 10:05
#include "reg51.h"       //包含头文件
//#include "mingjiao.h"
sbit LE1=P2^0;           //位选573锁存器使能
sbit LE2=P2^1;           //段选573锁存器使能
sbit bz=P3^7;
#define uchar unsigned char
#define uint  unsigned int

uchar temp,num;          //定义变量
//**************************************************************************************************
delay(uint time)              //int型数据为16位,所以最大值为65535            
{
  uint  i,j;                  //定义变量i,j,用于循环语句
  for(i=0;i<time;i++)         //for循环,循环50*time次
     for(j=0;j<50;j++);       //for循环,循环
   }
//定时器中断子程序
//**************************************************************************************************
t0() interrupt 1 using 1
{
  TH0=0x3c;         //重置定时器初值
  TL0=0xb0;
  if(temp>=19)      //满20次,即20次*50ms=1s
   {
     temp=0x00;     //重置temp为0
     //num++;         //显示变化一次
     bz=1;
        delay(100);  //mingjiao();
         //P1=~num;       //将变化次数放在P1控制的LED上显示
   }
  else
   {
     temp++;        //每进一次中断,temp加1
   }
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
main()
{
   TMOD=0x01;    //0b00000001  用的是定时器0,工作在方式1(16位寄存器)
                 //要实现定时50ms,(65536-T0)x12/12000000=0.05s得T0=15536即0x3cb0
   TH0=0x3c;     //装定时器初值高8位
   TL0=0xb0;     //装定时器初值低8位
   TR0=1;        //启动定时器0
   ET0=1;        //开定时器0中断
   EA=1;         //开总中断

   while(1);     //死循环,等待定时器中断
}

一周热门 更多>