马老师:放入固定数还是会出现问题,可能是显示函数出问题了,帮我看看问题出在哪?
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编辑过 先不做转换,将unsigned char var中放入固定的数,如{5,4,3,2,1} ,看你的显示是否正确。如果正确,说明你的转换函数有问题。 有时显示还是乱码
转换程序如下:
void BCD(int temp)
{
unsigned char i;
for(i=0;i<4;i++)
{
var = (unsigned char)(temp%10)+0x30;
temp = temp/10;
}
}
转换函数该如何写,才不会出现乱码呢? for(i=0;i<4;i++)
{
var = (unsigned char)(temp%10)+0x30;
temp = temp/10;
}
循环了几次?var=??!
是否你的乱码总是出现在最高位呢?如果是的话问题就是它了。
如果你是初学者的话,你的学习方法不好。我已经将思路讲清楚了,你应该自己学习如何找出你程序的问题。
在我的“综合实践一”中,已经叫大家学习使用AVR STUDIO进行软件的模拟调试,你应该仔细的学习,在AVR STUDIO中调试一下你的程序,看看问题出现在什么地方。这样一个简单的程序自己不学习如何调试,老是问别人什么行呢。 temp 是0~1023之间的unsigned int数,所以没定义var
还有,我在AVR STUDIO设置断点查看时,var中的变量在watch窗口中显示的是0-9之间的ASCII字符,但在LCD上显示时,有的就出现其它非0-9的ASCII字符 不好意思,我是前不久才开始学的 那就可能不是转换函数的问题了,应该查你的显示函数。
在你的整个程序中,先不改变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;
} 还是出问题,显示函数如下:
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编辑过 把
LCD_write_string(2,0,".");
改成
LCD_write_uchar(2,0,"."); 试一下 参数类型不一致,编译出错。
"."是字符型指针变量,而var[]则是unsigned char 变量。
"type error in argument 3 to 'LCD_write_uchar';found 'pointer to char' expected 'unsigned char'" 改成 LCD_write_uchar(2,0,0x2e);
0x2e是“.”的ASCII码,转一个小圈子,先找到问题。 应该一样有问题,我上次试过
LCD_write_uchar(0,0,0x34);
有时也会出现问题。 var = (unsigned char)(temp%10)+0x30;
temp = temp/10;
后面+0x30是什么意思,楼主可以帮忙解释一下吗?
我以前调试秒钟时也出现过烂码,不过是在LED上显示的,后来也是用马超老师的方法改正过来的。
LCD的显示还没有试过。 ASCII变换
0 --> '0' =0x30
1 --> '1' =0x31
9 --> '9' =0x39 我怎么没图象啊??
页:
[1]