找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51七彩LED控制程序

[复制链接]
跳转到指定楼层
楼主
ID:236847 发表于 2017-10-1 09:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include <intrins.h>        //51基本运算(包括_nop_空函数)

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
sbit k3=P3^2;  //定义按键K3
sbit led=P2^0;
u8 t=1;
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
sbit RR=P0^0;//red红灯
sbit GG=P0^1;//green绿灯
sbit BB=P0^2;//blue蓝灯

u8 r,g,b,min,max;

void ledout(unsigned char r,g,b)
{        unsigned char n;
   for (n=0;n<255;n++)
        {               
                if(g>n)
                        GG=0;
                else
                        GG=1;
                if(b>n)
                        BB=0;
                else
                        BB=1;
                if(r>n)
                        RR=0;
                else
                        RR=1;
            _nop_();
                _nop_();
                _nop_();
        }
}

void Colors(u16 c)
{
        if(c==1)
        {
                 ledout(255,0,0);
        }
        if(c==2)
        {
                 ledout(250,250,0);
        }
        if(c==3)
        {
                 ledout(0,250,250);
        }
        if(c==4)
        {
                 ledout(250,0,250);
        }
        if(c==5)
        {
                 ledout(0,250,0);
        }
        if(c==6)
        {
                 ledout(0,0,250);
        }
        if(c==7)
        {
                u8 i;
                min=5;
                max=250;
                r=min;
                g=min;
               
                  for (i=min;i<=max;i++)
                {
                        b=max+min-i-1;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }
                for (i=min;i<=max;i++)
                {
                        g=i;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }
                for (i=min;i<=max;i++)
                {
                        r=max+min-i-1;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }
                for (i=min;i<=max;i++)
                {
                         b=i;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }
                for (i=min;i<=max;i++)
                {
                         g=max+min-i-1;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }
                for (i=min;i<=max;i++)
                {
                        r=i;
                        ledout(r,g,b);
                        if(t!=7)
                        {
                          return ;
                        }
                }                                                         
        }
}

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函 数 名         : Int1Init()
* 函数功能                   : 设置外部中断1
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Int0Init()
{
        //设置INT0
        IT0=1;//跳变沿出发方式(下降沿)
        EX0=1;//打开INT0的中断允许。       
        EA=1;//打开总中断       
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{       

        Int0Init();  //        设置外部中断0

        while(1)
        {
                  P1=~smgduan[t];
                Colors(t);
                EA=1;
        }

}

/*******************************************************************************
* 函 数 名         : Int0()        interrupt 0
* 函数功能                   : 外部中断0的中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Int0()        interrupt 0                //外部中断0的中断函数
{
       
        delay(1000);         //延时消抖
        if(k3==0)
        {
                led=~led;
                if(t<7)
                {
                        t=t+1;
                }
                else
                {
                   t=1;
                }
        }
        while(!k3) ;
               
}



main.c.rar

1.13 KB, 下载次数: 15, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:238171 发表于 2017-10-10 18:08 | 只看该作者
Thank you..........
回复

使用道具 举报

板凳
ID:244589 发表于 2017-11-13 16:30 | 只看该作者
怎么说呢??我是觉得  你要是附上一些效果图  或者  PCB图片的话,我们会好理解很多, 不过还是要给你点个赞
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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