如何把定周期红绿灯显示程序变成不定周期的

2019-03-23 18:38发布

用的是Cortex M0+中LPC812单片机
谢谢大神们指教。
源程序如下:

#include "LPC8xx.h"

#define LED1             (1 <<1)              /* LED1 - P0.1  red */   
#define LED2             (1 <<0)            /*LED2 - P0.0  green */
#define MAX_SEC                9
#define uchar unsigned char
#define uint unsigned int

#define SEG_OFFSET    10                    /* 段输出位移 */
#define SEG_PORT     (0xFF<< SEG_OFFSET)   /* P0.10到P0.17作为段输出端口*/
#define COM_PORT     (1 << 7)               /* P0.5到P0.8做位输出端口  */

/***********************************************************************
** 函数名称:segSet
** 函数功能:在SEG_PORT上输出段码
** 入口参数:seg    要输出的段码
** 出口参数:无
** 返回参数:无
***************************************************************************/
void segSet (uint seg)
{
            LPC_GPIO_PORT->PIN0        &= 3;        /*保证所用的两位
(单片机0.0和0.1口)初始状态*/
            LPC_GPIO_PORT->PIN0 |=  COM_PORT;
       
    LPC_GPIO_PORT->PIN0 &= ~SEG_PORT;
    LPC_GPIO_PORT->PIN0 |=  SEG_PORT & ( seg << SEG_OFFSET);
               
}

void myDelay (uint32_t ulTime)   {
    uint32_t i;
   
    while (ulTime--) {
                       
        for (i = 0; i < 2400; i++);
    }
}

void GPIOInit (void)
{
        {
          LPC_SYSCON->SYSAHBCLKCTRL|=(1<<6) ;
           LPC_SWM->PINENABLE0 |= (1 << 2)|(1 << 3)|(1 << 6);
    LPC_GPIO_PORT->DIR0 |= SEG_PORT;
    LPC_GPIO_PORT->DIR0 |= COM_PORT;
}

    LPC_SYSCON->SYSAHBCLKCTRL |= ( 1<< 6); /* 初始化GPIO AHB时钟 */
   
    LPC_GPIO_PORT->DIR0 |= LED1;        /* 将P0.7方向设置为输出  */
    LPC_GPIO_PORT->PIN0 |= LED1;        /* P0.7输出设置为高*/
    LPC_GPIO_PORT->DIR0 |= LED2;
         LPC_GPIO_PORT->PIN0 |= LED2;
                       
}

uchar table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};

int main (void)
{  
        int a = 1;
    SystemInit();                       /* 初始化目标板,切勿删除   */
   GPIOInit();                          /* GPIO初始化 */
             
while(1){
       
             if(a) LPC_GPIO_PORT->PIN0 &= ~LED1;     /* 点亮LED*/                                
              segSet(table[9]);  
        myDelay(1000);                                /* 等效:拔掉com1的连接线*/
                          segSet(table[8]);  
        myDelay(1000);
                          segSet(table[7]);  
        myDelay(1000);
                          segSet(table[6]);  
        myDelay(1000);
                          segSet(table[5]);  
        myDelay(1000);
                          segSet(table[4]);  
        myDelay(1000);
                      segSet(table[3]);  
        myDelay(1000);
                          segSet(table[2]);  
        myDelay(1000);  
                          segSet(table[1]);
                                myDelay(1000);
                    segSet(table[0]);   
        if(a)LPC_GPIO_PORT->PIN0 |=  LED1;    /* 熄灭LED1  */                           
       myDelay(100);                                 /* 延时 100ms */               
          
if(a) {LPC_GPIO_PORT->PIN0 &=  ~COM_PORT;  /*关断数码管*/
                 LPC_GPIO_PORT->PIN0 &= ~LED2;     /* 点亮LED2  */                                   
       }myDelay(7000);                              /*红灯常亮7s */
      if(a) LPC_GPIO_PORT->PIN0 |=  LED2;     /* 熄灭LED2 */                              
       myDelay(1000);   
      
segSet(table[2]);
                        if(a)         LPC_GPIO_PORT->PIN0 &= ~LED2;       /* 点亮LED2 */                                    
      myDelay(800);                                                   
   if(a) {
                        LPC_GPIO_PORT->PIN0 &=  ~COM_PORT;
                   LPC_GPIO_PORT->PIN0 |=  LED2;    /* 熄灭LED2 */                              
                 }                                                   
       myDelay(800);
             
if(a)         LPC_GPIO_PORT->PIN0 &= ~LED2;        
     segSet(table[1]);
                 myDelay(800);                                            
     if(a) {
                                LPC_GPIO_PORT->PIN0 &=  ~COM_PORT;
                                LPC_GPIO_PORT->PIN0 |=  LED2;                                    
                 }    myDelay(800);
              
if(a)        LPC_GPIO_PORT->PIN0 &= ~LED2;                                       
segSet(table[0]);
                  myDelay(800);                                      
    if(a) {
                           LPC_GPIO_PORT->PIN0 &=  ~COM_PORT;
                           LPC_GPIO_PORT->PIN0 |=  LED2;      
                 }  myDelay(800);          
                  
}
}
此帖出自小平头技术问答
0条回答

一周热门 更多>