打印

流水灯程序问题请教各位大侠

[复制链接]
1483|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kulapicar|  楼主 | 2011-11-7 22:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一名学生,目前在学习郭天祥老师单片机的视频,第一次发帖,请教各位大侠:
Q:8个发光二极管组成流水灯,要求每个管亮100ms,从左往右,从右往左,以此循环,流动时让蜂鸣器发出“滴滴”声,自己写了个程序,能够运行,但是感觉很复杂,请教各位大侠能否更简练?(原理图在附件里面)
程序如下:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit lfm=P3^3;          //蜂鸣器定P3.3
uchar num;
void delay(uint z);
void main()
{
num=0xfe;            //二极管共阳极
while(1)
{
  
  P1=num;
  num=_crol_(num,1);
  lfm=0;
  delay(100);
  lfm=1;
  delay(100);
  if(num==0x7f)
  {
   num=0x7f;
   while(1)
   {
    P1=num;
    num=_cror_(num,1);
    lfm=0;
    delay(100);
    lfm=1;
    delay(100);
    if(num==0xfe)
    break;
   }
  }
}

}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
  for(j=110;j>0;j--);
}

STC-B原理图.pdf

88.65 KB

STC单片机原理图

相关帖子

沙发
kulapicar|  楼主 | 2011-11-7 22:39 | 只看该作者
不好意思,程序本来排版是好的,有缩进的,现在重发一下

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit lfm=P3^3; //蜂鸣器定P3.3
uchar num;
void delay(uint z);
void main()
{       
        num=0xfe; //二极管共阳极
        while(1)
        {
               
                P1=num;
                num=_crol_(num,1);
                lfm=0;
                delay(100);
                lfm=1;
                delay(100);
                if(num==0x7f)
                {
                        num=0x7f;
                        while(1)
                        {
                                P1=num;
                                num=_cror_(num,1);
                                lfm=0;
                                delay(100);
                                lfm=1;
                                delay(100);
                                if(num==0xfe)
                                break;
                        }
                }
        }
       
}

void delay(uint z)
{
        uint i,j;
        for(i=z;i>0;i--)
                for(j=110;j>0;j--);
}

使用特权

评论回复
板凳
wei271964349| | 2011-11-7 22:57 | 只看该作者
我也在看郭天翔的视频
中国教育多出几个这样的人就好啦  
要是他再出个EDA技术VHDL版就好啦  
在此表示对郭天翔老师感谢

使用特权

评论回复
地板
Salfe| | 2011-11-20 12:34 | 只看该作者
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit lfm=P3^3;          //蜂鸣器定P3.3
uchar num;
uint m;
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint z);
void Buzzer(uchar n)
{
    lfm=0;
    delay(n);
    lfm=1;
    delay(n);
}
void main()
{
m=1;
while(1)
{
if(m==1)
{
   m++;
   P1=table[m];
   Buzzer(100);
if(m==8)
{
   m--;
   P1=table[m];
   Buzzer(100);
}
}}}

void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
  for(j=110;j>0;j--);
}

我也是菜鸟,刚写了这个,不知道能不能实现,欢迎批评!

使用特权

评论回复
5
zefengyuan1989| | 2011-11-20 21:49 | 只看该作者
4# Salfe
程序while()怎么循环,好像只能执行一次m=1,你没能让有效循环起来吧,m++.m--没有任何意义了

使用特权

评论回复
6
zefengyuan1989| | 2011-11-20 21:56 | 只看该作者
4# Salfe
为何不在code table[]写一组往返一次的值,你也不用比较两次了

使用特权

评论回复
7
Salfe| | 2011-11-21 18:07 | 只看该作者
6# zefengyuan1989 对了,是错了!!呵呵,谢谢。不知道这样行吗?
void main()
{
m=1;
while(1)
{
  for(m=1;m<9;m++)
  {
   P1=table[m];
   Buzzer(100);
}
for(m=8;m>0;m--)
  {  
   P1=table[m];
   Buzzer(100);
}
}

使用特权

评论回复
8
zefengyuan1989| | 2011-11-21 21:07 | 只看该作者
7# Salfe
这个能用

使用特权

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

本版积分规则

0

主题

3

帖子

1

粉丝