51单片机编程问题,如何在1602上显示出矩阵键盘的十六进制码,主要是如何把保存的十六进制数转化成十进制?
51单片机编程问题,如何在1602上显示出矩阵键盘的十六进制码,主要是如何把保存的十六进制数(如0xee)转化成十进制数238?C语言。请高手指点。程序如下,还有很多问题...
51单片机编程问题,如何在1602上显示出矩阵键盘的十六进制码,主要是如何把保存的十六进制数(如0xee)转化成十进制数238?C语言。请高手指点。
程序如下,还有很多问题,但最迫切知道上述问题。。。。
#include "at89x52.h"
#include "intrins.h"
#define uchar unsigned char
sbit RS=P3^0;
sbit RW=P3^1;
sbit E =P3^2;
uchar code dis[]={"Put In Key !"};
/*uchar key[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //键码 */
uchar disp[4];
uchar displ[]={"0123456789ABCDEFX"};
uchar x,y,jz;
void delay(uchar n);
bit busy();
void xzl(uchar zl);
void xxs(uchar xs);
void xwz(uchar wz);
void clr();
void csh();
void js();
void keys();
void main() //主函数
{ P1=0x0f;
delay(50);
csh();
aa: clr();
xwz(0x02);
for(x=0;dis[x]!='\0';x++)
{ xxs(dis[x]);
}
delay(20);
while(P1!=0x0f)
{ keys();
js();
clr();
xwz(0x46);
xxs(displ[0]);
xxs(displ[16]);
y=disp[2];
xxs(displ[y]);
y=disp[3];
xxs(displ[y]);
delay(20);
}
goto aa;
}
void delay(uchar n) //延时n*1ms
{
unsigned char a,b,c;
for(c=n;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
bit busy() //忙检测
{ bit Busy;
RS=0;
RW=1;
E=1;
_nop_();
Busy=(bit)(P0&0x80);
E=0;
return Busy;
}
void xzl(uchar zl) //写指令
{ while(busy());
RS=0;
RW=0;
E=0;
_nop_();
P0=zl;
_nop_();
E=1;
_nop_();
E=0;
}
void xxs(uchar xs) //写显示
{ while(busy());
RS=1;
RW=0;
E=0;
_nop_();
P0=xs;
_nop_();
E=1;
_nop_();
E=0;
}
void xwz(uchar wz) //写位置
{ xzl(wz|0x80);
}
void clr() //清屏
{ xzl(0x01);
delay(5);
}
void csh() //初始化
{ delay(15);
xzl(0x38);
delay(15);
xzl(0x38);
delay(15);
xzl(0x38);
delay(5);
xzl(0x0c);
delay(5);
xzl(0x06);
delay(5);
xzl(0x01);
delay(5);
}
void js() //计算
{ disp[2]=jz/16;
disp[3]=jz%16;
}
void keys() //键盘扫描
{ uchar i,j,k,jz;
P1=0x0f;
i=P1;
if((i&0x0f)!=0x0f) //按键判断是否按下?
{ delay(20); //延时消抖20ms
i=P1;
if((i&0x0f)!=0x0f) //确定是否真按下了?
{ j=i;
P1=0xf0;
k=P1;
jz=j|k; //合成键码
return;
}
}
else P1=0xff;
return;
} 展开
程序如下,还有很多问题,但最迫切知道上述问题。。。。
#include "at89x52.h"
#include "intrins.h"
#define uchar unsigned char
sbit RS=P3^0;
sbit RW=P3^1;
sbit E =P3^2;
uchar code dis[]={"Put In Key !"};
/*uchar key[]={ 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //键码 */
uchar disp[4];
uchar displ[]={"0123456789ABCDEFX"};
uchar x,y,jz;
void delay(uchar n);
bit busy();
void xzl(uchar zl);
void xxs(uchar xs);
void xwz(uchar wz);
void clr();
void csh();
void js();
void keys();
void main() //主函数
{ P1=0x0f;
delay(50);
csh();
aa: clr();
xwz(0x02);
for(x=0;dis[x]!='\0';x++)
{ xxs(dis[x]);
}
delay(20);
while(P1!=0x0f)
{ keys();
js();
clr();
xwz(0x46);
xxs(displ[0]);
xxs(displ[16]);
y=disp[2];
xxs(displ[y]);
y=disp[3];
xxs(displ[y]);
delay(20);
}
goto aa;
}
void delay(uchar n) //延时n*1ms
{
unsigned char a,b,c;
for(c=n;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
bit busy() //忙检测
{ bit Busy;
RS=0;
RW=1;
E=1;
_nop_();
Busy=(bit)(P0&0x80);
E=0;
return Busy;
}
void xzl(uchar zl) //写指令
{ while(busy());
RS=0;
RW=0;
E=0;
_nop_();
P0=zl;
_nop_();
E=1;
_nop_();
E=0;
}
void xxs(uchar xs) //写显示
{ while(busy());
RS=1;
RW=0;
E=0;
_nop_();
P0=xs;
_nop_();
E=1;
_nop_();
E=0;
}
void xwz(uchar wz) //写位置
{ xzl(wz|0x80);
}
void clr() //清屏
{ xzl(0x01);
delay(5);
}
void csh() //初始化
{ delay(15);
xzl(0x38);
delay(15);
xzl(0x38);
delay(15);
xzl(0x38);
delay(5);
xzl(0x0c);
delay(5);
xzl(0x06);
delay(5);
xzl(0x01);
delay(5);
}
void js() //计算
{ disp[2]=jz/16;
disp[3]=jz%16;
}
void keys() //键盘扫描
{ uchar i,j,k,jz;
P1=0x0f;
i=P1;
if((i&0x0f)!=0x0f) //按键判断是否按下?
{ delay(20); //延时消抖20ms
i=P1;
if((i&0x0f)!=0x0f) //确定是否真按下了?
{ j=i;
P1=0xf0;
k=P1;
jz=j|k; //合成键码
return;
}
}
else P1=0xff;
return;
} 展开
3个回答
展开全部
给你举个例子吧
unsigned char SD,KK;
unsigned int HA=0;
SD=0x11; //你说的16进制对吧
KK=16*(SD>>4);
HA=KK;
KK=(SD&0x0f);
HA+=KK;//HA里面存放的就是SD的十进制
简单一点HA=(16*(SD>>4))+(SD&0x0f);
步行者===电子单片机
unsigned char SD,KK;
unsigned int HA=0;
SD=0x11; //你说的16进制对吧
KK=16*(SD>>4);
HA=KK;
KK=(SD&0x0f);
HA+=KK;//HA里面存放的就是SD的十进制
简单一点HA=(16*(SD>>4))+(SD&0x0f);
步行者===电子单片机
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
改数字,因为1602默认的都是固定值。如果显示动态的 得+ table[]=S/10+48;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如何把保存的十六进制数转化成十进制 这句话什么意思?? 只是转换的话直接写多一个转换用的子函数不就行了?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询