智能车制作

标题: 51单片机,遇到奇怪的事情 [打印本页]

作者: qiangnancy    时间: 2012-8-3 16:51
标题: 51单片机,遇到奇怪的事情
   闲着没事做,就做下51初级编程,跑马灯,如下程序目的是实现的功能:
1、8盏灯,从外往里(两个亮)跑过去
2、然后,全部熄灭,由里及外跑出来
3、再移位从第一站亮到第8盏,再移位从第8亮到第1盏
   但是,跑完第2步,第三步开始就乱跑了,凌乱了,瞎亮了开始。
   然而,单独跑移位的程序是没问题的,单独跑第1步、第2步也是没问题的。
   合起来跑就出问题了。
   不知道问题何在?

作者: qiangnancy    时间: 2012-8-3 16:51
#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit beep=P2^5;

sbit shiwei=P2^6;//声明U1锁存器锁存端
sbit gewei=P2^7;//声明U2锁存器的锁存端
uint table[10]={0xcf,0x03,0x5d,0x5b,0x93,0xda,0xde,0x43,0xdf,0xdb};          //数码管编码

uint table[4]={0x7e,0xbd,0xdb,0xe7};

void delay10ms()
{
        unsigned char i, j;
        for(i=20;i>0;i--)
        for(j=248;j>0;j--);
}

void delay02s(void) //延时0.2秒子程序
{
        unsigned char i,j,k;
        for(i=20;i>0;i--)
        for(j=20;j>0;j--)
        for(k=248;k>0;k--);
}

void delay05s()                //延时0.5秒子程序
{
    unsigned char i,j,k;
        for(i=15;i>0;i--)
        for(j=202;j>0;j--)
        for(k=818;k>0;k--);
}



void main()
{
           uint m;
                P1=0xff;
                   delay05s();
                delay05s();
                delay05s();

        while(1)

   {   
   
        for (m=0;m<=3;m++)
   {
                   P1=table[m];
                delay05s();
                delay05s();
   }
   
                   P1=0xff;
                   delay05s();
                delay05s();


        for(m=3;m>=0;m--)
        {
                   P1=table[m];
                delay05s();
                delay05s();
   }

                   P1=0xff;
                   delay05s();




                P1=0xfe;
  for( m=0;m<8;m++)
       
        {
                delay02s();
                P1<<=1;
                P1=P1|0x01;

        }

                P1=0xff;
                   delay05s();
               
               
           P1=0x7f;
        for( m=0;m<8;m++)
       
        {               
                delay05s();
                P1>>=1;
           P1=P1|0x80;

        }

                P1=0xff;
                   delay05s();
                delay05s();
                delay05s();


        for( m=0;m<8;m++)
       
        {
                P1=0xff;
                delay05s();
                P1=0x00;
                delay05s();
        }


        }

}



作者: Magnetoplas    时间: 2012-8-4 09:02
两次给table[]赋值?
作者: Lee_Hour    时间: 2012-8-4 10:36
定义数码管编码和它的锁存端有什么意义?
作者: qiangnancy    时间: 2012-8-5 19:41
Lee_Hour 发表于 2012-8-4 10:36
定义数码管编码和它的锁存端有什么意义?

没用,本来是想做数码管显示的,不过也没有用到啊
作者: Lee_Hour    时间: 2012-8-6 09:21
qiangnancy 发表于 2012-8-5 19:41
没用,本来是想做数码管显示的,不过也没有用到啊

你的两个table一样的,底下调用时到底是调用的哪个呢
作者: qiangnancy    时间: 2012-8-8 19:54
Lee_Hour 发表于 2012-8-6 09:21
你的两个table一样的,底下调用时到底是调用的哪个呢

第一个调用table,第二个不调用。

作者: Nelson90    时间: 2012-9-7 10:37
我反复看了多遍,好帖,得支持




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2