swordshe 发表于 2005-4-21 14:26:04

马老师:放入固定数还是会出现问题,可能是显示函数出问题了,帮我看看问题出在哪?

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)

{

    LCD_set_xy( X, Y );

   

    while (*s)

    {

      LCD_write_char( 0, *s );

   s ++;

    }

}



void LCD_write_uchar(unsigned char X,unsigned char Y,unsigned char tmp)

{

    LCD_set_xy( X, Y );

      

    LCD_write_char( 0, tmp);

}



void show()

{

    LCD_write_uchar(0,0,var);

   

    LCD_write_uchar(1,0,var);

   

    LCD_write_string(2,0,".");

   

    LCD_write_uchar(3,0,var);



    LCD_write_uchar(4,0,var);

   

}






-----此内容被swordshe于2005-04-28,10:59:19编辑过

machao 发表于 2005-4-21 15:52:14

先不做转换,将unsigned char var中放入固定的数,如{5,4,3,2,1} ,看你的显示是否正确。如果正确,说明你的转换函数有问题。

swordshe 发表于 2005-4-21 16:23:21

有时显示还是乱码



转换程序如下:

void BCD(int temp)

{

    unsigned char i;

    for(i=0;i<4;i++)

    {

      var = (unsigned char)(temp%10)+0x30;

      temp = temp/10;

    }

}



转换函数该如何写,才不会出现乱码呢?

machao 发表于 2005-4-24 00:21:58

for(i=0;i<4;i++)

    {

      var = (unsigned char)(temp%10)+0x30;

      temp = temp/10;

    }



循环了几次?var=??!



   是否你的乱码总是出现在最高位呢?如果是的话问题就是它了。



    如果你是初学者的话,你的学习方法不好。我已经将思路讲清楚了,你应该自己学习如何找出你程序的问题。



    在我的“综合实践一”中,已经叫大家学习使用AVR STUDIO进行软件的模拟调试,你应该仔细的学习,在AVR STUDIO中调试一下你的程序,看看问题出现在什么地方。这样一个简单的程序自己不学习如何调试,老是问别人什么行呢。

swordshe 发表于 2005-4-25 09:41:14

temp 是0~1023之间的unsigned int数,所以没定义var



还有,我在AVR STUDIO设置断点查看时,var中的变量在watch窗口中显示的是0-9之间的ASCII字符,但在LCD上显示时,有的就出现其它非0-9的ASCII字符

swordshe 发表于 2005-4-25 09:42:44

不好意思,我是前不久才开始学的

machao 发表于 2005-4-25 12:09:09

那就可能不是转换函数的问题了,应该查你的显示函数。



   在你的整个程序中,先不改变var中的数,即保持var中的数据不改变,一直不断循环显示var中的数,显示出问题吗?





   如改动如下进行调试,然后再将增加的语句去掉。

void BCD(int temp)

{

    unsigned char i;

    for(i=0;i<4;i++)

    {

      var = (unsigned char)(temp%10)+0x30;

      temp = temp/10;

    }

    var = 0x30;

    var = 0x31;

    var = 0x32;

    var = 0x33;

    var = 0x30;

}

swordshe 发表于 2005-4-28 10:52:16

还是出问题,显示函数如下:

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)

{

    LCD_set_xy( X, Y );

   

    while (*s)

    {

      LCD_write_char( 0, *s );

        s ++;

    }

}



void LCD_write_uchar(unsigned char X,unsigned char Y,unsigned char tmp)

{

    LCD_set_xy( X, Y );

   

    LCD_write_char( 0, tmp);

}



void show()

{

    LCD_write_uchar(0,0,var);

   

    LCD_write_uchar(1,0,var);

   

    LCD_write_string(2,0,".");

   

    LCD_write_uchar(3,0,var);



    LCD_write_uchar(4,0,var);

   

}




-----此内容被swordshe于2005-04-28,10:55:44编辑过

machao 发表于 2005-4-28 11:57:37



    LCD_write_string(2,0,".");

改成

    LCD_write_uchar(2,0,".");   试一下

swordshe 发表于 2005-4-28 16:40:32

参数类型不一致,编译出错。

"."是字符型指针变量,而var[]则是unsigned char 变量。

"type error in argument 3 to 'LCD_write_uchar';found 'pointer to char' expected 'unsigned char'"

machao 发表于 2005-4-28 17:30:15

改成 LCD_write_uchar(2,0,0x2e);

0x2e是“.”的ASCII码,转一个小圈子,先找到问题。

swordshe 发表于 2005-4-29 10:29:15

应该一样有问题,我上次试过

LCD_write_uchar(0,0,0x34);

有时也会出现问题。

wsmcjm 发表于 2005-8-12 21:22:29

var = (unsigned char)(temp%10)+0x30;

      temp = temp/10;

    后面+0x30是什么意思,楼主可以帮忙解释一下吗?

我以前调试秒钟时也出现过烂码,不过是在LED上显示的,后来也是用马超老师的方法改正过来的。

LCD的显示还没有试过。

HJJourAVR 发表于 2005-8-15 09:50:21

ASCII变换

0 --> '0' =0x30

1 --> '1' =0x31

9 --> '9' =0x39

Ryan 发表于 2007-9-3 09:56:38

我怎么没图象啊??
页: [1]
查看完整版本: 马老师:放入固定数还是会出现问题,可能是显示函数出问题了,帮我看看问题出在哪?