[求助] 又要请大家帮忙了!12864想显示半码的变量,怎么办?

cindyzx   2012-5-30 22:22 楼主

12864是st7920带字库的

 

sbit LCD_RS  = P3^0;    
sbit LCD_RW  = P3^1;  

sbit LCD_EN  = P3^2;    

#define LCD_DATA  P2    

/*****LCD功能初始化指令*****/
#define CLEAR_SCREEN 0x01   //清屏指令:清屏且AC值为00H
#define AC_INIT   0x02   //将AC设置为00H。且游标移到原点位置
#define CURSE_ADD  0x06   //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#define FUN_MODE  0x30   //工作模式:8位基本指令集
#define DISPLAY_ON  0x0c   //显示开,显示游标,且游标位置反白
#define DISPLAY_OFF  0x08   //显示关
#define CURSE_DIR  0x14   //游标向右移动:AC=AC+1
#define SET_CG_AC  0x40   //设置AC,范围为:00H~3FH
#define SET_DD_AC  0x80

/*****汉字地址表*****/
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,//第四行汉字位置
};

/*****n(ms)延时子程序*****/
void delayms(uint t)     //约延时n(ms)
{
 uint i;
 while(t--)
 {
  for(i=0;i<125;i++);
 }       
}

/*****等待LCD忙*****/
void WaitBusy(void)      //延时一小段时间,等待LCD空闲
{
 uchar i=5;
    while(i--);
}

/*****写指令代码*****/
void Lcd_WriteCmd(uchar cmdcode)
{
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 1;
 WaitBusy();
    LCD_DATA = cmdcode;
    LCD_EN = 0;
}

/*****写数据*****/
void Lcd_WriteData(uchar dispdata)
{
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 1;
 WaitBusy();
    LCD_DATA = dispdata;
    LCD_EN = 0;
}

/*****初始化LCD*****/
void Lcd_Init()
{
 delayms(50);
    Lcd_WriteCmd(0x30);        //选择基本指令集
 delayms(1);
    Lcd_WriteCmd(0x30);          //选择8bit数据流
 delayms(1);
    Lcd_WriteCmd(0x0c);          //开显示(无游标、不反白)
 delayms(1);
    Lcd_WriteCmd(0x01);          //清除显示,并且设定地址指针为00H
 delayms(20);
}

/*****显示汉字*****/
void hanzi_Disp(uchar x,uchar y,uchar code *s)
{          //x、y为汉字坐标
 Lcd_WriteCmd(addr_tab[8*x+y]);  //写地址
 while(*s>0)
    {
  Lcd_WriteData(*s);    //写数据
  s++;    
    }
}

void main(void)
{
 Lcd_Init();
 while(1)
 {
  hanzi_Disp(0,0,"");
  hanzi_Disp(1,1,"闪烁测试程序");
  hanzi_Disp(2,2,"12:15:30");
  hanzi_Disp(3,2,"");
  do{
  delayms(500);
  hanzi_Disp(2,2,"  ");
  delayms(500);
  hanzi_Disp(2,2,"12:15:30");}while(1);
 
  delayms(500);    
  }
}
这是我的一段测试程序

 

我把分钟从DS1302中读取后 转换为十进制 十位 和个位

想用这个函数 把分钟显示出来

void hanzi_Disp(uchar x,uchar y,uchar code *s)

 

我本来是存了个数组 shuzi[]={'0','1','2','3','4','5','6','7','8','9'};

然后想这么调用

a=十位的十进制数;b=个位的十进制数;

hanzi_Disp( x坐标 , y坐标 , shuizi[a] , shuzi );

行不通 Keil报错 估计是不能写两位

大家帮我想想办法

困扰哦~~~~~~~~~~~~

[ 本帖最后由 cindyzx 于 2012-5-30 22:23 编辑 ]

回复评论 (1)

hanzi_Disp(uchar x,uchar y,uchar code *s) 这个函数需要三个参数,而你写了四个参数,当然报错了!改一下hanzi_Disp(uchar x,uchar y,uchar code *s)这个函数就行了
点赞  2012-5-31 19:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复