swordshe 发表于 2005-4-22 21:52:21

马老师:看看我的程序问题出在哪啊?

void BCD(int temp)

{

    unsigned char i;

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

    {

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

      temp = temp/10;

    }

}



在1602BLCD显示时,会出在其它非0-9的字符,请问问题出在哪啊?

HJJourAVR 发表于 2005-4-22 23:45:46

swordshe:

   你知不知道你很啰嗦??同一个问题问三遍。

   这些东西能帮就帮,最重要是自己学习自己尝试。



   请不要重复发帖。

bucker 发表于 2005-4-24 15:12:39

void BCD(int temp)

{

    unsigned char i;

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

    {   

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

      temp = temp/10;

    }

}

var = (unsigned char)(temp%10)+0x30; 似乎不对啊,var得到的总是个位数。

即如temp=1234,则var中分别是'4','3','2','1'的Ascii。还有阿,看不到var的定义,不知是不是全局变量数组。


-----此内容被bucker于2005-04-24,15:18:54编辑过

swordshe 发表于 2005-4-25 09:32:59

不好意思



var[]是unsigned char类型的



就像"bucker 沙漠"说的,var中的数应该是ASCII字符,但实际上在1602B LCD上显示就会出现非0-9的数字,像a,R等等,这该怎么解决?

swordshe 发表于 2005-4-25 09:34:22

是全局变量组

bucker 发表于 2005-4-25 18:00:09

看你的函数名好像是需要BCD码,而你的程序却产生ASCII码,我不熟悉1602B LCD到底需要什么编码,你只能自己分析一下。如果需要的是BCD码,那就将程序改为var = (unsigned char)(temp%10);   就可以了。此外你的程序生成的数组内的数据是倒序的,即个位在前,最高位在后的格式,不知你是否需要这样的结果。

swordshe 发表于 2005-4-28 10:47:35

是个位在前,我要的也是ASCII码,我输出的是从高到低,再加上小数点,如54.32,但是在AVR Studio中设断点显示的是“0~9”之点的字符,但显示出的却有时是乱码,显示函数:



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

{

    LCD_set_xy( X, Y );

   

    LCD_write_char( 0, tmp);

}

bucker 发表于 2005-4-28 19:36:31

那就不知是否存在器件的故障,还有,再检查LCD的数据线与单片机的数据是不是D0-D7一一对应等。

swordshe 发表于 2005-4-29 10:31:56

我是将本网站的6pin的例子稍微改了一下,是一一对应的

bucker 发表于 2005-4-29 14:24:19

如果你使用的是应经通过调试的例子,采用固定输出几个字符的方法也得不到想要的结果,就需要检查硬件是否存在故障。
页: [1]
查看完整版本: 马老师:看看我的程序问题出在哪啊?