本帖最后由 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,"东京");
显示效果如下图:
然后通过MDK调试发现中文字符串“东京”被MDK转换成了如下的字符串
不科学啊,一个汉字应该是对应连个char的啊,怎么变成3个了?还完全牛头不对马嘴了?
这是怎么回事啊?
是MDK设置有问题?还是哪里有点问题啊?求助路过大神点拨~~~
MDK设置了GB2312编码方式(其他几种也测试了,不正常)
//#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); //死循环,等待定时器中断
}
主要是这个显示屏带的字库是用GB2312编码的
进来是不是很失望没福利啊
拉下人气。不过问题已经解决了
一周热门 更多>