本人是初学者,想问个特别简单的程序,关于二极管的

[复制链接]
 楼主| 梦那些年 发表于 2013-7-9 09:36 | 显示全部楼层 |阅读模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ropt P1
uchar code table[]={0xfe,0xfd};
bit a=0;
void delay(uint xms)
{
  uint i,j;
for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}
void main()
{
  
while(1)

  {
  
   ropt=table[~a];


  }
}


为什么只有一个LED一直亮着啊,我想象的是两个交替亮
通宵敲代码 发表于 2013-7-9 10:03 | 显示全部楼层
有意思,第一次见有这么用的“ropt=table[~a];”,可能是我孤陋寡闻吧,那位老师教你的啊。
a=0;但~a可不一定就是1,。

还有就是你的延时函数没用上,这么大个bug你竟然么注意??

在着多提醒一句,尽管现在的芯片存储容量相当大,但是该省还得省啊。
ayb_ice 发表于 2013-7-9 10:12 | 显示全部楼层
A没有变化,当然~A也没有变化了
叶伤 发表于 2013-7-9 10:14 来自手机 | 显示全部楼层
错误原因在于ropt=table[~a],楼上说的,bit a=0,则~a=1,因为bit只有0和1,反0即1,延时函数编译器会自动优化。这个程序里a一直为0,所以~a一直为1,P1一直被赋值0xfd。要达到目的可以改成a=~a;ropt=table[a];
小营七郎 发表于 2013-7-9 10:16 | 显示全部楼层
单片机的工作频率要比人眼反应快多了,即使亮了也只是几毫秒的事,不用延时,没有单步执行,你咋看?
限量_个性。 发表于 2013-7-9 10:16 | 显示全部楼层
主要是延时没有用上啊  就算有闪烁  你也看不到啊  ~
叶伤 发表于 2013-7-9 10:20 来自手机 | 显示全部楼层
在PROTEUS里是有闪烁的,看不懂英文,不知道怎么调成实时的。在实物上(仿真板)上是一起亮的,当然,是指改了程序之后
 楼主| 梦那些年 发表于 2013-7-9 12:01 | 显示全部楼层
通宵敲代码 发表于 2013-7-9 10:03
有意思,第一次见有这么用的“ropt=table[~a];”,可能是我孤陋寡闻吧,那位老师教你的啊。
a=0;但~a可不 ...

呵呵,见笑了,初学了几天,没老师教我,正在摸索中..
 楼主| 梦那些年 发表于 2013-7-9 12:04 | 显示全部楼层
叶伤 发表于 2013-7-9 10:14
错误原因在于ropt=table[~a],楼上说的,bit a=0,则~a=1,因为bit只有0和1,反0即1,延时函数编译器会自动 ...

朋友。我还是有点不明白,那不是有while(1)循环吗,这次是1,不断的循环,下次进来不就是0了吗,在下次进来又变成反了吗?
taoest 发表于 2013-7-9 12:20 | 显示全部楼层
梦那些年 发表于 2013-7-9 12:04
朋友。我还是有点不明白,那不是有while(1)循环吗,这次是1,不断的循环,下次进来不就是0了吗,在下次进 ...

~a是将a取反,但是结果并不存在a里,结果用一次就丢弃了。a始终没有变化。

评分

参与人数 1威望 +2 收起 理由
梦那些年 + 2

查看全部评分

hellodjl 发表于 2013-7-9 12:41 | 显示全部楼层
新人,大家支持下,加油
 楼主| 梦那些年 发表于 2013-7-9 12:50 | 显示全部楼层
taoest 发表于 2013-7-9 12:20
~a是将a取反,但是结果并不存在a里,结果用一次就丢弃了。a始终没有变化。 ...

嗯,我知道了,谢谢您的解答
 楼主| 梦那些年 发表于 2013-7-9 13:26 | 显示全部楼层
hellodjl 发表于 2013-7-9 12:41
新人,大家支持下,加油

谢谢!
fythlhan 发表于 2013-7-9 17:55 | 显示全部楼层
支持,加油。
chenkaibsw 发表于 2013-7-9 22:36 | 显示全部楼层
支持,加油,我也努力中
胡斯哲 发表于 2013-7-9 23:52 | 显示全部楼层
通宵敲代码 发表于 2013-7-9 10:03
有意思,第一次见有这么用的“ropt=table[~a];”,可能是我孤陋寡闻吧,那位老师教你的啊。
a=0;但~a可不 ...

高手啊~   不必这么省吧
wuzx-61 发表于 2013-7-9 23:52 | 显示全部楼层
新人,努力!

评分

参与人数 1威望 +2 收起 理由
梦那些年 + 2

查看全部评分

xiaox314 发表于 2013-7-10 08:58 | 显示全部楼层
oldzhang 发表于 2013-7-10 10:42 | 显示全部楼层
本帖最后由 oldzhang 于 2013-7-10 10:43 编辑

a没有变化,当然~a也没有变化了
说的很好,程序中没有a取反的语句;永远用的~a,也就是1;
即使这句改了,也没有用延时。
按照原程序的思路,加上a改变和延时的应该能用。
void main(void)
{
    while(1)
    {
         ropt=table[~a];
         a=~a;
         delay(100);  //取值调快慢
    }
}

评分

参与人数 1威望 +2 收起 理由
梦那些年 + 2

查看全部评分

sfpxfpcfp 发表于 2013-7-10 12:10 | 显示全部楼层
这么复杂,,,,你懂的已经太多了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

88

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部