我想用拨码开关输入时间,按输入时间进行延时

2019-07-15 17:17发布

本帖最后由 yangjing6191519 于 2015-5-8 20:00 编辑

附图一张http://bbs.elecfans.com/jishu_481183_1_1.html原理图proteus
程序在此keil:http://bbs.elecfans.com/forum.ph ... ypeid%26typeid%3D93
void main(void)
{ UINT8 M,N,P;
  UINT16 hour,min,l;
  unsigned long m;
  M=P0;//拨码开关从P0口输入
  N=M&0xf0;//取P0口前四位作为定时时间的小时
  P=M&0x0f;//        取P0口后四位作为定时时间的分钟
                                
        switch(N)
                { case 0x00:hour=0;
                        case 0x10:hour=3600;//将小时化为秒
                        case 0x20:hour=7200;
                        case 0x30:hour=10800;
                        case 0x40:hour=14400;
                        case 0x50:hour=18000;
                        case 0x60:hour=21600;
                        case 0x70:hour=25200;
       }
                switch(P)
                { case 0x00:min=0;//降分钟化为秒
                        case 0x01:min=300;
                        case 0x02:min=600;
                        case 0x03:min=900;
                        case 0x04:min=1200;
                        case 0x05:min=1500;
                        case 0x06:min=1800;
                        case 0x07:min=2100;
                        case 0x08:min=2400;
                        case 0x09:min=2700;
                        case 0x0a:min=3000;
                        case 0x0b:min=3300;
       }

      m=hour+min;        //一共要掩饰的时间秒为单位        

                        delay1s(m);//延时设定的时间
                         led1=1;
                         led2=1;
                         led3=1;
                         led4=1;
                        
}

void delay1s(unsigned long MS)//延时1s的程序 {UINT8 h,i,j,k;
while(MS--)
{for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--); } }                 



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
yangjing6191519
1楼-- · 2019-07-16 15:29
 精彩回答 2  元偷偷看……
Arvinhw
2楼-- · 2019-07-16 19:32
yangjing6191519 发表于 2015-5-7 15:09
怎样判断跳出?KEIL检错显示的是0error

可能是哪个地方的判断逻辑问题,你加个中断点,然后用固定值调试一下,应该可以看出问题在哪了
yangjing6191519
3楼-- · 2019-07-16 22:29
Arvinhw 发表于 2015-5-7 15:21
可能是哪个地方的判断逻辑问题,你加个中断点,然后用固定值调试一下,应该可以看出问题在哪了

我用固定值了,例如delay1s(10);运行没问题;可是在这里不是后面说的都不运行,就是直接越过,不进行延时
Arvinhw
4楼-- · 2019-07-16 23:11
yangjing6191519 发表于 2015-5-7 15:26
我用固定值了,例如delay1s(10);运行没问题;可是在这里不是后面说的都不运行,就是直接越过,不进行延时

delay1s(10)的时候整体都没有问题吗?是不是unsigned long MS数据结构定义的不合适?
yangjing6191519
5楼-- · 2019-07-17 01:45
Arvinhw 发表于 2015-5-7 15:32
delay1s(10)的时候整体都没有问题吗?是不是unsigned long MS数据结构定义的不合适?

#include"reg52.h"                                                                     /* µ÷ÓÃÍ·Îļþ£¬µ¥Æ¬»úÄÚ²¿¼Ä´æÆ÷¶¼¶¨ÒåÔÚ´Ë£¬ÓõÄʱºòÐèÒªÏȵ÷Óà */
#include <intrins.h>
#define DataPort P0,P1
sbit led1=P1^4;
sbit led2=P1^5;
sbit led3=P1^6;
sbit led4=P1^7;
sbit A1 = P1^0;                                                                        /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */
sbit B1 = P1^1;                                                                        /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */
sbit C1 = P1^2;                                                                        /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */
sbit D1 = P1^3;               
/**************************** ÿÏàͨµç˳Ðò(Õýת) *******************************/
#define Coil_D1_CW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;} /* DÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_C1_CW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;} /* CÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_B1_CW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;} /* BÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_A1_CW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;} /* AÏàͨµç,ÆäËûÏà¶Ïµç */

/**************************** ÿÏàͨµç˳Ðò(·´×ª) *******************************/
#define Coil_A1_CCW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;}/* AÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_B1_CCW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;}/* BÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_C1_CCW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;}/* CÏàͨµç,ÆäËûÏà¶Ïµç */
#define Coil_D1_CCW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;}/* DÏàͨµç,ÆäËûÏà¶Ïµç */

#define Coil_Off() { A1 = 0; B1 = 0; C1 = 0; D1 = 0;}   /* ËùÓÐÏà¶Ïµç */
typedef        unsigned char UINT8;                            /* ¸øunsigned charÖØж¨ÒåÒ»¸ö±ðÃûUINT8£¬ÓõÄʱºòÖ±½ÓдUINT8¾Í¿ÉÒÔ */
typedef unsigned int  UINT16;                                            /* ¸øunsigned intÖØж¨ÒåÒ»¸ö±ðÃûUINT16£¬ÓõÄʱºòÖ±½ÓдUINT16¾Í¿ÉÒÔ */

                                                        /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */


void delay1s(unsigned long MS);

/*******************************************************************************
* º¯  Êý  Ãû      : DelayMs
* Ãè      Êö      : ºÁÃëÑÓʱ.
* Êä      Èë      : UINT8 Ms£º
*                   ÒªÑÓʱµÄMsʱ¼ä. MsÖµ·¶Î§Îª0-65535£¬ÊýÖµÔ½´óÑÓʱʱ¼äÔ½³¤
* ·µ      »Ø      : ÎÞ.
*******************************************************************************/
void DelayMs( UINT16 Ms )
{
        UINT8 i;

        while (Ms--)
          {
            for ( i = 0; i < 114; i++ );                        /* Ñ­»·114´ó¸ÅÊÇ1MSʱ¼ä */
          }
}

/*******************************************************************************
* º¯  Êý  Ãû      : main
* Ãè      Êö      : Ö÷º¯Êý
* Êä      Èë      : ÎÞ.
* ·µ      »Ø      : ÎÞ.
********************************************************************************/


void main(void)
{ UINT8 M,N,P;
  UINT16 hour,min,l;
  unsigned long m;
  M=P0;
  N=M&0xf0;
  P=M&0x0f;       
                               
        switch(N)
                { case 0x00:hour=0;
                        case 0x10:hour=3600;
                        case 0x20:hour=7200;
                        case 0x30:hour=10800;
                        case 0x40:hour=14400;
                        case 0x50:hour=18000;
                        case 0x60:hour=21600;
                        case 0x70:hour=25200;
       }
                switch(P)
                { case 0x00:min=0;
                        case 0x01:min=300;
                        case 0x02:min=600;
                        case 0x03:min=900;
                        case 0x04:min=1200;
                        case 0x05:min=1500;
                        case 0x06:min=1800;
                        case 0x07:min=2100;
                        case 0x08:min=2400;
                        case 0x09:min=2700;
                        case 0x0a:min=3000;
                        case 0x0b:min=3300;
       }

      m=hour+min;               
       led1=0;
                         led2=0;
                         led3=0;
                         led4=0;
                        delay1s(m);
                         led1=1;
                         led2=1;
                         led3=1;
                         led4=1;
         
                for( l = 0 ; l< 512; l++ )                          /* Õý´«Ò»È¦ÐèÒª360/(0.17578125*4) = 512 ´ÎÑ­»·*/
    {
        Coil_D1_CW()                                    /* DÏàͨµç,ת¶¯(5.625/64)*2¶È = 0.17578125¶È*/
        DelayMs(100);                                    /* ÑÓʱ,¿ÉÒÔͨ¹ý¸Ä±äÑÓʱ¸Ä±äƵÂÊ */
        Coil_C1_CW()                                    /* CÏàͨµç */
        DelayMs(100);                                 
        Coil_B1_CW()                                    /* BÏàͨµç */
        DelayMs(100);
        Coil_A1_CW()                                    /* AÏàͨµç */
        DelayMs(100);

      }

       

    Coil_Off();                                      /* µç»úÍ£Ö¹ÔËÐÐ,×îºÃ¼ÓÉϸþä,·ñÔòµç»ú»áÓÐÒ»Ïàͨµç¶øÎÞÐÎÖÐÔö¼ÓÁ˹¦ºÄ */                                              /* Ö÷Ñ­»· */
    while(1);
                         
         

    }

      
       
void delay1s(unsigned long MS)
{UINT8 h,i,j,k;
        while(MS--)
        {for(h=5;h>0;h--)
        for(i=4;i>0;i--)
        for(j=116;j>0;j--)
        for(k=214;k>0;k--);
        }

}

yangjing6191519
6楼-- · 2019-07-17 01:56
 精彩回答 2  元偷偷看……

一周热门 更多>