发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: hhchenxinag
手机看帖
扫描二维码
随时随地手机跟帖
21
江枫渔火| | 2013-1-30 12:16 | 只看该作者 回帖奖励 |倒序浏览
以前是除以10,现在除以16不就是了~

使用特权

评论回复
22
computer00| | 2013-1-30 13:16 | 只看该作者
code char hexTable[] = "0123456789ABCDEF";

void showRx(char * buf, int len)
{
int i;
for(i = 0; i < len; i++)
{
  lcdPutChar(hexTable[(buf[i] >> 4) & 0xf];
  lcdPutChar(hexTable[buf[i] & 0xf];
  lcdPutChar(' ');
}
}

使用特权

评论回复
23
hhchenxinag|  楼主 | 2013-1-30 15:36 | 只看该作者
呵呵 第一次发帖,感谢大家对我的帮助,特别是 ccxlslr 的耐心讲解与帮助解决了,真心的这个坛子很热情。 下面我整体编辑下!
#include <REGX52.H>
#include <stdio.h>
#include <stdarg.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;
char a[10];
int cnt;
char rx[]={0xfe,0x51,0x30,0x40,0x20};
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)!='\0')//cnt指针偏移量 实现自加,一位位寻址了,
        {
                wr_lcd(dat,*(p+cnt));//写地址里面放的数据
        //wr_lcd(dat,*p);
                cnt++;
        }
}

/*void wr_data(uchar x,uchar y0,uchar date )//***********************显示单个字符**********/
/*{
  uchar pos=0;
  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);//comm为零。函数意思是移动光标到此
  wr_lcd(dat,date);//写入这个数据  dat和 comm是 1,0的标志
}*/
void wr_data(uchar x,uchar y0,uchar *date )//***********************显示单个字符**********//
{
  uchar pos=0;
  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);//comm为零。函数意思是移动光标到此
  wr_lcd(dat,*date);//写入这个数据  dat和 comm是 1,0的标志
  wr_lcd(dat,*(date+1));//写入这个数据  dat和 comm是 1,0的标志
}
/*  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 lcd_char_printf(const char *fmt,...)  /*这个函数keil自带的有,具体可以去网上查找执行过程*/
{
    uchar buf[15],b;//        ,c               
    va_list vp;       
    va_start(vp, fmt);
    vsprintf(buf, fmt, vp);       
        wr_data(b,2,buf);
        if(fmt<0) // 一帧数据显示完,给b赋0;一般读取下此数据,可根据自己实际添加
                b=0;
        b++;
        }
//}
void main(void)
{       
    char i;
        LCD_hanshu();/*液晶初始化及显示*/       
        for(i=0;i<5;i++)
        {       
        lcd_char_printf("%bx",rx[i]);//执行函数
        }

        while(1);
}
完结。。

使用特权

评论回复
24
hhchenxinag|  楼主 | 2013-1-30 15:57 | 只看该作者
computer00 发表于 2013-1-30 13:16
code char hexTable[] = "0123456789ABCDEF";

void showRx(char * buf, int len)

谢谢 问题已解决 也整理了!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则