catshit_one 发表于 2013-3-22 21:42:39

1602这种乱码情况有人遇到过吗,请看图片


请看第一行的最后两个字符,倒数第二个还查不到啊

//在1602上显示日期时间函数
void Time_Disp(unsigned char * date ,unsigned char * time)
{
        //LCD_send_command(0x01);       //清屏
        //年
        LCD_write_char(0,0,'2');
        LCD_write_char(0,1,'0');
        LCD_write_char(0,2,date/10+0x30);
        LCD_write_char(0,3,date%10+0x30);
        LCD_write_char(0,4,'-');
        //月
        LCD_write_char(0,5,date/10+0x30);
        LCD_write_char(0,6,date%10+0x30);
        LCD_write_char(0,7,'-');
        //日
        LCD_write_char(0,8,date/10+0x30);
        LCD_write_char(0,9,date%10+0x30);
        LCD_write_char(0,10,' ');
        //时
        LCD_write_char(0,11,time/10+0x30);
        LCD_write_char(0,12,time%10+0x30);
        LCD_write_char(0,13,':');
        //分
        LCD_write_char(0,14,time/10+0x30);
        LCD_write_char(0,15,time%10+0x30);
}

mengfc 发表于 2013-3-22 22:05:13

感觉还是你程序的问题,你看一下分的取值范围是否正确

keshipt 发表于 2013-3-22 22:36:20

1.可能如楼上所说取值不对
2.Keil 0xFD Bug是否已经修复

catshit_one 发表于 2013-3-23 08:35:38

keshipt 发表于 2013-3-22 22:36 static/image/common/back.gif
1.可能如楼上所说取值不对
2.Keil 0xFD Bug是否已经修复

0xfd的bug从论坛上下载个补丁修复,但是最后都显示编译器没找到,修复完成……取值范围还没看,不过之前在其他电脑,其他板子上都用这个程序,显示也没啥问题。还有就是这个乱码时而出现时而正常.

lryxr2507 发表于 2013-3-23 08:48:07

给你一个OXFD的补丁修复压缩包, 重点如前面两位所讲的那样,看下分的取值是否正确.

sufeila 发表于 2013-3-23 09:13:07

//分

time=time%60----------------------------------------------------------增加
      LCD_write_char(0,14,time/10+0x30);
      LCD_write_char(0,15,time%10+0x30);

catshit_one 发表于 2013-3-23 09:25:26

lryxr2507 发表于 2013-3-23 08:48 static/image/common/back.gif
给你一个OXFD的补丁修复压缩包, 重点如前面两位所讲的那样,看下分的取值是否正确. ...

谢谢,用过补丁之后出现这个界面
算是成功吗?
还有发现这乱码出现的位置也不固定,有时会出现在小时和年的位置上。我用的是stc12c5a60s2
取值直接输出到1602上看是正常的,只是这时乱码也变了
您看看
//在1602上显示日期时间函数
void Time_Disp(unsigned char * date ,unsigned char * time)
{
        unsigned char displine;
        displine='2';
        displine='0';
        displine=date/10+0x30;
        displine=date%10+0x30;
        displine='-';
        displine=date/10+0x30;
        displine=date%10+0x30;
        displine='-';
        displine=date/10+0x30;
        displine=date%10+0x30;
        displine=' ';
        displine=time/10+0x30;
        displine=time%10+0x30;
        displine=':';
        displine=time/10+0x30;
        displine=time%10+0x30;
        displine=0;
        displine=time+0x30;
        LCD_disp_string(0,0,displine);
}

lryxr2507 发表于 2013-3-23 09:49:07

catshit_one 发表于 2013-3-23 09:25 static/image/common/back.gif
谢谢,用过补丁之后出现这个界面
算是成功吗?
还有发现这乱码出现的位置也不固定,有时会出现在小时和年 ...

这个修正是不成功的,解压后选择你的KEIL版本点击修正,会出现如附图所示的对话框,你要选择你KEIL安装的位置,然后找到BIN文件,点击下面的打开即可。

catshit_one 发表于 2013-3-23 10:43:24

lryxr2507 发表于 2013-3-23 09:49 static/image/common/back.gif
这个修正是不成功的,解压后选择你的KEIL版本点击修正,会出现如附图所示的对话框,你要选择你KEIL安装的 ...

重装了keil,再修正只有ax51.exe未找到,算修正成功吗?还有,我是win7 64位 I5笔记本这个有影响吗?
或者编译优化选项设置和STC12有冲突?
我试了下不同优化级别,乱码出现的位置和时间都不同 ;但都是“@5”这个乱码

liweiqiang668 发表于 2013-3-23 11:20:11

應該是數位轉換問題,以前有發生過,LCD_write_char(0,15,time%10+0x30);改
LCD_write_char(0,15,time%10/10+0x30);可以嗎?

zhonggp 发表于 2013-3-23 14:01:53

6楼正解

catshit_one 发表于 2013-3-23 14:12:15

sufeila 发表于 2013-3-23 09:13 static/image/common/back.gif
//分

time=time%60----------------------------------------------------------增加


这个不能保证值是正确的,只能保证不显示未知字符,如果加%60就变成“45”一直在跳了

catshit_one 发表于 2013-3-23 14:14:04

本帖最后由 catshit_one 于 2013-3-23 19:32 编辑

liweiqiang668 发表于 2013-3-23 11:20 static/image/common/back.gif
應該是數位轉換問題,以前有發生過,LCD_write_char(0,15,time%10+0x30);改
LCD_write_char(0,15,time

这样写不对吧,是不是写错了,/10%10这样才对吧,多谢提醒

Gost 发表于 2013-3-23 15:46:22

没遇到过

mengfc 发表于 2013-3-23 20:51:12

如果程序没有问题,并且其他位偶尔也出现,你应该检查一下硬件了,是否有接触不良、虚焊的地方,或者更换一下芯片及LCD模块。

944522464 发表于 2013-3-23 21:26:21

你是否有判断新片读出的时间格式对不对?

sco518 发表于 2013-3-23 21:54:59

把1602写数据的延时稍微加大一点。

catshit_one 发表于 2013-3-24 20:37:10

sufeila 发表于 2013-3-23 09:13 static/image/common/back.gif
//分

time=time%60----------------------------------------------------------增加


经过指点,加上些限制,现在不是乱码了,但不是正常时间数据;

当然加上这些限制是一个好习惯,学习了
还是1302读出数据的问题,把STC单片机降为12T模式也不行
最后用下面这个办法算是解决了,虽然很无语,虽然还是不知道什么原因,求指导

/*从DS302读出时钟数据*/
void ds1302_read_time(uchar *buf)
{
             uchar i;
                uchar time_buf;
        time_buf=ds1302_read_byte(ds1302_year_add);                //年
        time_buf=ds1302_read_byte(ds1302_month_add);                //月
        time_buf=ds1302_read_byte(ds1302_date_add);                //日
        time_buf=ds1302_read_byte(ds1302_hr_add);                //时
        time_buf=ds1302_read_byte(ds1302_min_add);                //分
        time_buf=ds1302_read_byte(ds1302_sec_add);//秒
        time_buf=ds1302_read_byte(ds1302_day_add);                //周
        time_buf=ds1302_read_byte(ds1302_hr_add);                //时
        time_buf=ds1302_read_byte(ds1302_min_add);                //分
                time_buf=ds1302_read_byte(ds1302_min_add);                //分
                        time_buf=ds1302_read_byte(ds1302_min_add);                //分
                                time_buf=ds1302_read_byte(ds1302_min_add);                //分
        time_buf=ds1302_read_byte(ds1302_sec_add);//秒
                time_buf=ds1302_read_byte(ds1302_hr_add);                //时
                        time_buf=ds1302_read_byte(ds1302_hr_add);                //时
                                time_buf=ds1302_read_byte(ds1302_hr_add);                //时
        time_buf=ds1302_read_byte(ds1302_day_add);                //周

        for(i=0;i<8;i++)
        {         //BCD处理
                buf=BCDtoi(time_buf);
        }
}

millwood0 发表于 2013-3-24 20:43:09

经过指点,加上些限制,现在不是乱码了,但不是正常时间数据;

You probably want to find why you are having such difficulties. After that, finding the cure is easy.

电子爱好者_MCU 发表于 2013-3-24 21:02:02

屏没问题 能够显示就不存在问题 我想知道你的时间是时钟芯片DS1302做的吗?假若是的,DS1302的译码采用BCD吗,并不是我们想的那样。如果不是,那么就应该是取值范围的问题了

lijungei 发表于 2013-5-16 15:05:58

我的也乱码   不过调整了一下线路就可以了

benqme 发表于 2013-5-16 16:22:45

看看在说
页: [1]
查看完整版本: 1602这种乱码情况有人遇到过吗,请看图片