找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2362|回复: 5
打印 上一主题 下一主题
收起左侧

一个按键控制3个led点亮30秒单片机C程序。现在想要让led2和led3由长亮变为交替亮...

[复制链接]
跳转到指定楼层
楼主
ID:484913 发表于 2019-3-5 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;                        
                }
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77064 发表于 2019-3-5 17:27 | 只看该作者
帅气 看看看 查看一下 老板牛逼
回复

使用道具 举报

板凳
ID:346616 发表于 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;  
                   }                                                               
          }  
回复

使用道具 举报

地板
ID:346616 发表于 2019-3-5 19:01 | 只看该作者
不是很确定你的交替是指什么,
我在3楼的代码是led2和led3同时亮灭交替,
如果要led2和led3的流水交替就改一个地方,
把LED3 = i改成LED3 = ~i
回复

使用道具 举报

5#
ID:484913 发表于 2019-3-6 09:21 | 只看该作者
菜鸟来了 发表于 2019-3-5 19:01
不是很确定你的交替是指什么,
我在3楼的代码是led2和led3同时亮灭交替,
如果要led2和led3的流水交替就 ...

谢谢大哥。已经搞好。
再帮忙看下整个代码。可不可以再简化
回复

使用道具 举报

6#
ID:478073 发表于 2019-3-6 15:11 | 只看该作者
xbcwenxue 发表于 2019-3-6 09:21
谢谢大哥。已经搞好。
再帮忙看下整个代码。可不可以再简化

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

评分

参与人数 1黑币 +10 收起 理由
我们的青春阿 + 10

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表