首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

串口数据以十六进制在液晶上怎么显示

2012-04-02 
串口数据以十六进制在液晶上如何显示我已经将串口数据转为相应的十进制数并把每位分离出来了,而且有+0x30,

串口数据以十六进制在液晶上如何显示
我已经将串口数据转为相应的十进制数并把每位分离出来了,而且有+0x30,但是最后在液晶上显示的都是0,不知道是为什么
相关代码如下
ge=ge+0x30;
write_date(ge);
如果我在前面令ge=1的话,液晶上是能显示出1的,想不通问题出在哪里了,求指教
全程序如下
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcden=P2^7;
sbit lcdrs=P2^5;
uint a,b,c,d,s,j,k,ge,shi,bai,qian,wan,shiwan,baiwan,qianwan;
uchar flag;
uchar reg[10] = {0,0,0,0,0,0,0,0,0,0};//特别注意,uchar的取值范围为0——255
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)//指令程序,显示模式设置
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)//数据程序,写在液晶要显示的字符
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()//初始化
{
P2=0;
lcden=0;
write_com(0x38); //设置显示模式为16*2显示,5*7点阵,8位数据接口
write_com(0x0f); //设置开显示,显示光标,光标闪烁
write_com(0x06); //设置写入的方式
write_com(0x80); //数据指针设置
}
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
P0=0xff;
EA=1;//这是总中断
ES=1;//这是串口中断,打开串口中断表示让串口以中断方式工作
if(flag==2) //判断两个字节是否全部接受
{
init();
ES=0;
flag=0;
c=0;
a=reg[1]*256; 
b=a+reg[0];  
ge=b%10000%1000%100%10;//取值
shi=b%10000%1000%100/10;
bai=b%10000%1000/100;
qian=b%10000/1000;
wan=b/10000;
//ge=1;如果我不注销这一行,液晶就会显1
ge=ge+0x30; 我怀疑问题是出在这个位置
shi=shi+0x30;
bai=bai+0x30;
qian=qian+0x30;
wan=wan+0x30;
ES=1;
write_date(ge);
delay(20);
}
}


void ser() interrupt 4  
{
RI=0;
reg[c]=SBUF;
c++;
flag++;
   
}

[解决办法]
液晶有驱动逻辑图。
一般有片选端口
数据端口
时钟端口
使能端口
忙闲信号端口
数据锁存端口
有些还有指令数据区分端口。

仔细看看逻辑图,严格按照逻辑图编辑代码。
如果有demo代码,好好看看即可顺利移植。

热点排行