51单片机上12864显示乱码问题,由于字数限制不相关函数去掉了
程序在12864上都能准确显示,可是添加将一个字节转化成字符串显示时,昨天用是不显示,今天就变为乱码了求解呀代码如下#include<reg52.h>#include<i...
程序在12864上都能准确显示,可是添加 将一个字节转化成字符串显示时,昨天用是不显示,今天就变为乱码了 求解呀代码如下
#include <reg52.h>
#include <intrins.h>
/***
本程序使用12864液晶是 ST7920控制器,5v电压驱动,带背光,内置16x16点阵,
128个字符(8x16点阵)及64x256点阵显示RAM。
***/
#define LCD_Date P0 //数据口
sbit LCD_RS=P2^0; //数据/命令选择端(H/L)
sbit LCD_RW=P2^1; //读写选择(H/L)
sbit LCD_EN=P2^2; //使能信号
sbit LCD_PSB=P2^3; //并/串选择 H:并行 。 L:串行
uchar code addr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
void delay_1ms(uint z)
void Write_Com(uchar com)
void Write_Data(uchar date)
/********************12864初始化***************************************/
void LCD_Init()
{
LCD_PSB=1;//并行口方式
Write_Com(0x30);//基本操作指令
delay_1ms(5);
Write_Com(0x0c);//显示开关光标
delay_1ms(5);
Write_Com(0x01);//清除LCD显示内容
}
uchar str[4];//作为uchartostr函数转换的字符串
/***
讲一个数据字节转化为字符串 好显示在 12864上
***/
uchar * uchartostr(uchar unm)
{
uchar x00,xx,x0,x,n;
x00=unm/100;
xx=unm%100;
x0=xx/10;
x=xx%10;
n=0;
if(x00!=0)
{
str[n]=x00+48;//值加48即为字符
n++;
}
if(!(x00==0&x0==0))
{
str[n]=x0+48;
n++;
}
str[n]=x+48;
n++;
str[n]='\0';
return str;
}
/*****
功能:在12864任意位置显示字符串
*****/
void hanzi_Disp(uchar x,uchar y,uchar code *s)
void main()
{
uchar tmp;//定义一个临时变量
tmp=251;
delay_1ms(100);
LCD_Init();
delay_1ms(2);
hanzi_Disp(0,0,"淘宝电子");
while(1)
{
hanzi_Disp(2,0,"FF"); //这个能正常显示??
hanzi_Disp(2,4,uchartostr(tmp)); //????加上这句话 12864上就一堆乱码,注释掉 就没有
delay_1ms(80000);
// hanzi_Disp(1,2," "); //清除显示
// delay_1ms(800);
}
} 展开
#include <reg52.h>
#include <intrins.h>
/***
本程序使用12864液晶是 ST7920控制器,5v电压驱动,带背光,内置16x16点阵,
128个字符(8x16点阵)及64x256点阵显示RAM。
***/
#define LCD_Date P0 //数据口
sbit LCD_RS=P2^0; //数据/命令选择端(H/L)
sbit LCD_RW=P2^1; //读写选择(H/L)
sbit LCD_EN=P2^2; //使能信号
sbit LCD_PSB=P2^3; //并/串选择 H:并行 。 L:串行
uchar code addr_tab[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置
};
void delay_1ms(uint z)
void Write_Com(uchar com)
void Write_Data(uchar date)
/********************12864初始化***************************************/
void LCD_Init()
{
LCD_PSB=1;//并行口方式
Write_Com(0x30);//基本操作指令
delay_1ms(5);
Write_Com(0x0c);//显示开关光标
delay_1ms(5);
Write_Com(0x01);//清除LCD显示内容
}
uchar str[4];//作为uchartostr函数转换的字符串
/***
讲一个数据字节转化为字符串 好显示在 12864上
***/
uchar * uchartostr(uchar unm)
{
uchar x00,xx,x0,x,n;
x00=unm/100;
xx=unm%100;
x0=xx/10;
x=xx%10;
n=0;
if(x00!=0)
{
str[n]=x00+48;//值加48即为字符
n++;
}
if(!(x00==0&x0==0))
{
str[n]=x0+48;
n++;
}
str[n]=x+48;
n++;
str[n]='\0';
return str;
}
/*****
功能:在12864任意位置显示字符串
*****/
void hanzi_Disp(uchar x,uchar y,uchar code *s)
void main()
{
uchar tmp;//定义一个临时变量
tmp=251;
delay_1ms(100);
LCD_Init();
delay_1ms(2);
hanzi_Disp(0,0,"淘宝电子");
while(1)
{
hanzi_Disp(2,0,"FF"); //这个能正常显示??
hanzi_Disp(2,4,uchartostr(tmp)); //????加上这句话 12864上就一堆乱码,注释掉 就没有
delay_1ms(80000);
// hanzi_Disp(1,2," "); //清除显示
// delay_1ms(800);
}
} 展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询