搜索
bottom↓
回复: 16

求助帖:一个液晶的忙等待程序,有源码,有一点想请问...

[复制链接]

出0入0汤圆

发表于 2012-8-23 21:03:39 | 显示全部楼层 |阅读模式
本帖最后由 卢台长 于 2012-8-24 16:36 编辑

关于1602忙信号检查调试结果:

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned char
bit a,b;
bit check(uchar dat)
{
        uchar value;
          P0=dat;
        value=(bit)(P0&0x80);
        return value;
}
void main()
{
        while(1)
        {
                a=check(0x80);
                b=check(0x00);       
        }                       
}


可是我还发现了一个问题,当我第二次又去执行的时候,a和b的值如下:


还是我的程序有问题?????

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-8-23 21:19:23 | 显示全部楼层

出0入0汤圆

发表于 2012-8-23 22:31:38 | 显示全部楼层
返回的是最高位,行不?

出0入0汤圆

 楼主| 发表于 2012-8-24 01:22:51 | 显示全部楼层
gracialee 发表于 2012-8-23 22:31
返回的是最高位,行不?

你能解释下吗,怎么是最高位啊。

出0入0汤圆

发表于 2012-8-24 06:00:37 | 显示全部楼层
  1. bit lcd_check_busy()
  2. ...
  3.        return (bit)(P0&0x80);
  4. }
复制代码
a better approach, in my view, is to return a char, rather than a bit:
  1. unsigned char lcd_check_busy()
  2. {
  3. ...
  4.        return (P0&0x80)?1:0;

  5. }
复制代码
你能解释下吗,怎么是最高位啊。


P0.7 is connected to D7.

出0入0汤圆

发表于 2012-8-24 12:22:02 | 显示全部楼层
millwood0 发表于 2012-8-24 06:00
a better approach, in my view, is to return a char, rather than a bit:

P0.7 is connected to D7.

这哥们不愧是大师,程序和解释很清晰的。

出0入0汤圆

 楼主| 发表于 2012-8-24 14:12:50 | 显示全部楼层
millwood0 发表于 2012-8-24 06:00
a better approach, in my view, is to return a char, rather than a bit:

P0.7 is connected to D7.

谢谢啊,你下面写的很好,程序理解的也很清晰。

不过我还是搞不明白,  value=(bit)(P0&0x80);     我的理解是,P0&0x80按位与的结果,进行强制类型转换,把最后一位传给value,我理解的是按值传递的方法。
                      return  value;                         问题来了,液晶最高位不是忙检测吗,下面就想不通了,望能解释啊

出0入0汤圆

发表于 2012-8-24 14:39:25 | 显示全部楼层
你是不是还没有弄清数据的格式:D7D6D5D4D3D2D1D0 这是8位的数据。

出0入0汤圆

 楼主| 发表于 2012-8-24 14:47:15 | 显示全部楼层
gracialee 发表于 2012-8-24 14:39
你是不是还没有弄清数据的格式:D7D6D5D4D3D2D1D0 这是8位的数据。

老兄,那你说给我听听啊,是怎么一回事。

出0入0汤圆

发表于 2012-8-24 15:18:01 | 显示全部楼层
本帖最后由 Lu.Shi 于 2012-8-24 17:11 编辑
卢台长 发表于 2012-8-24 14:12
谢谢啊,你下面写的很好,程序理解的也很清晰。

不过我还是搞不明白,  value=(bit)(P0&0x80);      ...


我和你的理解不一样,value = (bit) ( P0 & 0x80 ),它先是按位相与,然后得到的值是0x00或0x80,所以只是对P0^7的检测,然后再强制类型转换,转换成bit型,所以为0x00时value = 0,为0x80时value = 1,在这里应该强制类型转换时非零为1,零为0。

出0入0汤圆

发表于 2012-8-24 15:23:30 | 显示全部楼层
。。。。。具体是第几位,或是这个类型转换是怎么转的,你自己哪个51试试看不就知道了嘛

出0入0汤圆

 楼主| 发表于 2012-8-24 16:30:23 | 显示全部楼层
本帖最后由 卢台长 于 2012-8-24 16:31 编辑
Lu.Shi 发表于 2012-8-24 15:18
我和你的理解不一样,value = (bit) ( P0 & 0x80 ),它先是按位相与,然后得到的值是0x00或0x80,然后再 ...


说得好,我刚刚去调试了下
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned char
bit a,b;
bit check(uchar dat)
{
        uchar value;
          P0=dat;
        value=(bit)(P0&0x80);
        return value;
}
void main()
{
        while(1)
        {
                a=check(0x80);
                b=check(0x00);       
        }                       
}

可是我还发现了一个问题,当我第二次又去执行的时候,a和b的值如下:

还是我的程序有问题?????

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-8-24 17:09:39 | 显示全部楼层
卢台长 发表于 2012-8-24 16:30
说得好,我刚刚去调试了下
#include
#define uchar unsigned char

我认为这个是程序的问题,记得我刚开始使用51的时候,比如对某一个端口赋初值:
P0=0x00;
P0=0x01;
中间没有延时函数,这时赋初值就不是我们表面上看的这样P0^0=0,紧接着P0^0=1,具体的原因应该datasheet上有,所以这个地方可能a,b值输出不对,顺便问一下,你的执行是在线调试还是软件仿真呀?
以上观点纯属个人理解,不对还请见谅。

出0入0汤圆

 楼主| 发表于 2012-8-24 17:32:10 | 显示全部楼层
Lu.Shi 发表于 2012-8-24 17:09
我认为这个是程序的问题,记得我刚开始使用51的时候,比如对某一个端口赋初值:
P0=0x00;
P0=0x01;

我是用keil 3 调试的,你可以把我上面写的代码复制下去调试下

出0入0汤圆

发表于 2012-8-27 11:34:10 | 显示全部楼层
卢台长 发表于 2012-8-24 17:32
我是用keil 3 调试的,你可以把我上面写的代码复制下去调试下

我把你的这段代码调试了一下,确实是你说的问题,它在check的调用函数中只要执行到大于两遍value = ( bit )( P0 & 0x80)后,a就一直为零,我想了一下,还是不明白,所以还是再等等有没有高人解答。

出0入0汤圆

 楼主| 发表于 2012-8-28 00:19:53 | 显示全部楼层
Lu.Shi 发表于 2012-8-27 11:34
我把你的这段代码调试了一下,确实是你说的问题,它在check的调用函数中只要执行到大于两遍value = ( bit ...

是的,学习就是需要不断探索,解决一个一个问题。 呵呵。

出0入0汤圆

发表于 2012-8-28 21:42:48 | 显示全部楼层
不要强制转换了,直接与过返回不是更方便么
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 00:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表