打印

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

[复制链接]
3507|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
梦那些年|  楼主 | 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];

使用特权

评论回复
5
小营七郎| | 2013-7-9 10:16 | 只看该作者
单片机的工作频率要比人眼反应快多了,即使亮了也只是几毫秒的事,不用延时,没有单步执行,你咋看?

使用特权

评论回复
6
限量_个性。| | 2013-7-9 10:16 | 只看该作者
主要是延时没有用上啊  就算有闪烁  你也看不到啊  ~

使用特权

评论回复
7
叶伤| | 2013-7-9 10:20 | 只看该作者
在PROTEUS里是有闪烁的,看不懂英文,不知道怎么调成实时的。在实物上(仿真板)上是一起亮的,当然,是指改了程序之后

使用特权

评论回复
8
梦那些年|  楼主 | 2013-7-9 12:01 | 只看该作者
通宵敲代码 发表于 2013-7-9 10:03
有意思,第一次见有这么用的“ropt=table[~a];”,可能是我孤陋寡闻吧,那位老师教你的啊。
a=0;但~a可不 ...

呵呵,见笑了,初学了几天,没老师教我,正在摸索中..

使用特权

评论回复
9
梦那些年|  楼主 | 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了吗,在下次进来又变成反了吗?

使用特权

评论回复
10
taoest| | 2013-7-9 12:20 | 只看该作者
梦那些年 发表于 2013-7-9 12:04
朋友。我还是有点不明白,那不是有while(1)循环吗,这次是1,不断的循环,下次进来不就是0了吗,在下次进 ...

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

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
梦那些年 + 2
11
hellodjl| | 2013-7-9 12:41 | 只看该作者
新人,大家支持下,加油

使用特权

评论回复
12
梦那些年|  楼主 | 2013-7-9 12:50 | 只看该作者
taoest 发表于 2013-7-9 12:20
~a是将a取反,但是结果并不存在a里,结果用一次就丢弃了。a始终没有变化。 ...

嗯,我知道了,谢谢您的解答

使用特权

评论回复
13
梦那些年|  楼主 | 2013-7-9 13:26 | 只看该作者
hellodjl 发表于 2013-7-9 12:41
新人,大家支持下,加油

谢谢!

使用特权

评论回复
14
fythlhan| | 2013-7-9 17:55 | 只看该作者
支持,加油。

使用特权

评论回复
15
chenkaibsw| | 2013-7-9 22:36 | 只看该作者
支持,加油,我也努力中

使用特权

评论回复
16
胡斯哲| | 2013-7-9 23:52 | 只看该作者
通宵敲代码 发表于 2013-7-9 10:03
有意思,第一次见有这么用的“ropt=table[~a];”,可能是我孤陋寡闻吧,那位老师教你的啊。
a=0;但~a可不 ...

高手啊~   不必这么省吧

使用特权

评论回复
17
wuzx-61| | 2013-7-9 23:52 | 只看该作者
新人,努力!

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
梦那些年 + 2
18
xiaox314| | 2013-7-10 08:58 | 只看该作者

使用特权

评论回复
19
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
20
sfpxfpcfp| | 2013-7-10 12:10 | 只看该作者
这么复杂,,,,你懂的已经太多了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

88

帖子

0

粉丝