接收的地址怎样用12864显示出来?

2019-03-24 18:51发布

例如接收的一帧数据,存放在数组rx[]={0x87,0x81,0x82,0x83,0x84,0x85} ,现在我该怎样用12864液晶显示出来。显示效果如:87 81 82 83等。 以前都是显示字符串的或者十进制数1000,就直接用分离的方法。 可是显示地址,还不知道用什么方法,

各位,能提供下思路吗? 或者有写过接收数据地址的 讲解下,先谢谢啦!
程序加上:
#include <REGX52.H>
#define uchar unsigned char
#define uint unsigned int
/* 端口定义*/
#define LCD_data P0 //数据口
sbit LCD_RS = P3^5; //寄存器选择输入
sbit LCD_RW = P3^6; //液晶读/写控制
sbit LCD_EN = P3^4; //液晶使能控制
sbit LCD_PSB = P3^7; //串/并方式控制
sbit wela= P2^7;
sbit dula= P2^6;
uchar rx[]={0xfe,0xee};
//uchar idata Serial_buf[]; /*外部数据缓冲区申明使用*/
uchar code dis1[] = {"地址:00000123187"};
uchar code dis2[] = {"电量:123456.78"};
uchar code dis3[] = {"表号:"};
uchar code dis4[] = {"日期:"};
void Delay(uchar i) //延时
{
uint j;
for( ;i>0;i--)
for(j=0;j<700;j++);
}
#define comm 0 //用法:在写命令的时候给零,在写数据的时候给dat 。!
#define dat 1

void wr_lcd(uchar dat_comm,uchar content) //是命令为0,数据为1
{
if(dat_comm)
LCD_RS = 1; //数据
else LCD_RS = 0; /*命令*/
LCD_RW = 0;
LCD_EN = 0;
P0 = content;
Delay(5);
LCD_EN = 1;
Delay(5);
LCD_EN = 0;
}
/*********************************************************/
/* */
/* 设定显示位置 */
/* ******************************************************/
void wr_string(uchar x,uchar y0,uchar *p) /*****写字符串********/
{
uchar pos=0;//初始化
uchar cnt=0;//传递过来的是指针 ,cnt为偏移量,然后一个字符一个字符的写入。
switch(y0)
{
case 0: pos=0x80+x;break;
case 1: pos=0x90+x;break;
case 2: pos=0x88+x;break;
case 3: pos=0x98+x;break;
default: break;
}
wr_lcd(comm,pos);//写地址
while(*(p+cnt)!='')//cnt指针偏移量 实现自加,一位位寻址了,
{
wr_lcd(dat,*(p+cnt));//写地址里面放的数据
cnt++;
};
}
/* LCD初始化设定 */
void lcd_init()
{
wela=0;
dula=0;
Delay(5);
LCD_PSB = 1; //并口方式
wr_lcd(comm,0x30); //基本指令操作
wr_lcd(comm,0x0C); //显示开,关光标
wr_lcd(comm,0x01); //清除LCD的显示内容
}
void LCD_hanshu()
{
lcd_init(); //初始化LCD
wr_string(0,0,dis1); /*分别为:第1列、第1行*/
wr_string(0,1,dis2); /*分别为:第1列、第2行*/
// wr_string(0,2,Serial_buf);/*表号*/
wr_string(0,3,dis4);
}
void main(void)
{
LCD_hanshu();/*液晶初始化及显示*/
printf("%x ",rx); //把rx[]数组里面的数据转换成字符
wr_string(0,2,rx); //把转化的字符显示出来
while(1);
}
难道我格式有问题,编译没有出错,还是? 请各位前辈帮我看看
这样使用printf函数可以吗??,一般都是结合串口上位机实现的!!

[ 本帖最后由 chenxiang1 于 2013-1-29 23:40 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
Li_Lei
1楼-- · 2019-03-24 23:45
数据类型比较乱,你rx是个ram数组,传到函数里怎么成const char *fmt了呢?
没明白0xfe和0xee是神马
把vsprintf的实现源码贴上来看看
chenxiang1
2楼-- · 2019-03-25 02:45
 精彩回答 2  元偷偷看……
Li_Lei
3楼-- · 2019-03-25 05:26
#define LCD_DISP_HEX_CHAR                  'A'         //十六进制显示时全部大写; 'a':定义则为小写
void Send_HEX_Char(uint8 dat) {
  if ((dat&0xf0)>0x90)
                LCD_Write_Data((dat>>4)+(LCD_DISP_HEX_CHAR-10));
        else
                LCD_Write_Data((dat>>4)+'0');
        dat&=0xf;
        if (dat>9)
                LCD_Write_Data(dat+(LCD_DISP_HEX_CHAR-10));
        else
                LCD_Write_Data(dat+'0');
}
void LCD_Display_HEX_uint8 (uint8 address,uint8 dat) {        //16进制显示 无符号整数数值 (8位数据)
        LCD_Write_Command(0x80+address);
        Send_HEX_Char(dat);
}
void LCD_Display_HEX_uint16(uint8 address,uint16 dat)        {//16进制显示 无符号整数数值 (16位数据)
        LCD_Write_Command(0x80+address);
        Send_HEX_Char(dat>>8);
        Send_HEX_Char((uint8)dat);
}
chenxiang1
4楼-- · 2019-03-25 10:04
谢谢 问题已解决了,没来得及回复  真心不好意思!!

一周热门 更多>