标题: 一个按键控制3个led点亮30秒单片机C程序。现在想要让led2和led3由长亮变为交替亮... [打印本页]

作者: xbcwenxue    时间: 2019-3-5 15:41
标题: 一个按键控制3个led点亮30秒单片机C程序。现在想要让led2和led3由长亮变为交替亮...
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit sign_a=0,sign_b=0,sign_c=0,sign_d=0;//标志
uint count1=0,count2=0;                                       
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit key = P3^1;

void keyscan()                                       
{
        static uchar count=0;                                    
        if(key==0)                                       
        {
                count++;                                
                if(count>=100)                        
                {                       
                        count=100;                        
                        if(sign_c==0)               
                        {
                                sign_a=1;               
                                sign_c=1;               
                                EA = 0;                       
                                count2+=600;        
                                EA = 1;                        
                        }
                }
        }
        else                                                
        {
                if(sign_c==1)                        
                {
                        sign_c=0;                        
                        sign_d=1;                        
                }
                count=0;                              
        }
}
void main(void)
{
            TMOD = 0x01;
        TH0 =(65536-50000)/256;               
        TL0 =(65536-50000)%256;               
        TR0=1;
        EA = 1;
        ET0 = 1;
        while(1)
        {
                keyscan();                              
                if(sign_b==1)                     
                        LED1 = 0,LED2 = 0,LED3 = 0;                        
                else
                        LED1 = 1,LED2 = 1,LED3 = 1;                                                                  
        }   
}
void time0() interrupt 1
{
        TH0 =(65536-50000)/256;               
        TL0 =(65536-50000)%256;               
        if(sign_a==1)                                 
        {
                count1++;                                
                if(count1>=20)                        
                {
                        count1=0;                        
                        sign_a=0;                       
                        sign_b=1;                        
                }
        }
        if((sign_b==1)&(sign_d==1))
        {
                count2--;                                
                if(count2==0)                        
                {
                        sign_b=0;                       
                        sign_d=0;                        
                }
        }
}

作者: xuewenjie1212    时间: 2019-3-5 17:27
帅气 看看看 查看一下 老板牛逼
作者: 菜鸟来了    时间: 2019-3-5 18:09
延时自己写一个,main函数里面写:      
   while(1)
        {
                keyscan();                             
                if(sign_b==1)
                 {     
                      uchar i;   
                      LED1 = 0;
                      while(sign_b==1)
                             {               
                                  LED2 = i,LED3 = i;
                                  i=~i;
                                  延时();                        
                              }
                  }                              
                 else
                  {
                       LED1 = 1,LED2 = 1,LED3 = 1;  
                   }                                                               
          }  
作者: 菜鸟来了    时间: 2019-3-5 19:01
不是很确定你的交替是指什么,
我在3楼的代码是led2和led3同时亮灭交替,
如果要led2和led3的流水交替就改一个地方,
把LED3 = i改成LED3 = ~i
作者: xbcwenxue    时间: 2019-3-6 09:21
菜鸟来了 发表于 2019-3-5 19:01
不是很确定你的交替是指什么,
我在3楼的代码是led2和led3同时亮灭交替,
如果要led2和led3的流水交替就 ...

谢谢大哥。已经搞好。
再帮忙看下整个代码。可不可以再简化
作者: 春风十里吹    时间: 2019-3-6 15:11
xbcwenxue 发表于 2019-3-6 09:21
谢谢大哥。已经搞好。
再帮忙看下整个代码。可不可以再简化

能简化,将void time0() interrupt 中 两个if合成一个,用到 &&,可试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1