单片机源程序如下:
- //============================================================================
- //======翼芯科技 LED七彩跳变+渐变转换=======指拨开关SW2的1位拨向上============
- //============================================================================
- // 此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
- //程序说明:本程序用于实现LED七彩跳变+渐变转换,按KEY3为跳变,按KEY4为渐变,不同步.IC插到U9位置.指拨开关SW2的1位拨向上.
- //文件名称:main.C
- //日期: 2011/01/23
- //版本: 1.0
- //C编译器: keil 8.05
- //=============================================================================
- #include <STC12C5AXX.H>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RED1 = P0^0; //红色IO口定义
- sbit GREEN1 = P0^1; //绿色IO口定义
- sbit BLUE1 = P0^2; //蓝色IO口定义
- sbit KEY3 = P3^2; //按键3
- sbit KEY4 = P3^3; //按键4
- bit FLAG_MODE;
- uchar T_CNT3;
- uchar T_CNT4;
- uchar MODE;
- uchar code TAB1[7]={1,2,4,3,6,5,7}; //跳变数据
- uchar code TAB2[14]={1,3,3,2,2,6,6,4,4,5,5,7,7,1}; //跳变数据 {1,3,2,6,4,5,7,1}; //跳变数据
- uchar DPTR;
- uchar PWM_HL;
- uchar REPEAT;
- uchar PWM_H;
- uchar PWM_L;
- /******************************************************************
- - 功能描述:定时器0中断,中断时间为1MS,实现按键检测.
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- void TIME0_INT() interrupt 1
- {
- TH0 = (65535-2000)/256;
- TL0 = (65535-2000)%256;
- if (T_CNT3 !=0)
- {
- T_CNT3--;
- if (T_CNT3==0 && KEY3==0)
- {
- MODE=0;
- FLAG_MODE=1;
- }
- }
- else if (KEY3==0) T_CNT3=10;
- if (T_CNT4 !=0)
- {
- T_CNT4--;
- if (T_CNT4==0 && KEY4==0)
- {
- MODE=1;
- FLAG_MODE=1;
- }
- }
- else if (KEY4==0) T_CNT4=10;
-
- }
- /******************************************************************
- - 功能描述:红绿蓝LED输出
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- SET_RGB(uchar LED_REG)
- {
- uchar LEDDATA;
- LEDDATA=LED_REG;
- if(LEDDATA&0X01)
- RED1=1;
- else
- RED1=0;
- if(LEDDATA&0X02)
- GREEN1=1;
- else
- GREEN1=0;
- if(LEDDATA&0X04)
- BLUE1=1;
- else
- BLUE1=0;
- }
- /******************************************************************
- - 功能描述:延时函数
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- delayms(uint x)
- {
- uint t;
- while(x--)
- for(t=1500;t>0;t--)
- {
- if(FLAG_MODE)
- {
- return;
- }
- }
- }
- /******************************************************************
- - 功能描述:延时函数
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- delayus(uint x)
- {
- uint t;
- while(x--)
- for(t=15;t>0;t--);
- }
- /******************************************************************
- - 功能描述: PWM输出
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- SHADE()
- {
- uchar i,j;
- for(i=REPEAT;i>0;i--) //重复次数
- {
-
- for(j=PWM_HL;j>0;j--) //PWM减
- {
- if(FLAG_MODE)
- {
- return;
- }
- PWM_H=j; //PWM_H值
- PWM_L=PWM_HL-j+1; //PWM_L值
- SET_RGB(TAB2[DPTR]);
- for(;PWM_H>0;PWM_H--)
- delayus(1);
- SET_RGB(TAB2[DPTR+1]); //输出
- for(;PWM_L>0;PWM_L--)
- delayus(1);
- } //j
- } //i
-
- }
-
- /******************************************************************
- - 功能描述:主函数
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- void main()
- {
- TMOD = 0x01; //定时器0工作在16位的定时模式.
- TH0 = (65535-2000)/256; //定时器0高位设定
- TL0 = (65535-2000)%256; //定时器0低位设定
- IE = 0x82; //开总中断和定时器0中断
- TR0 = 1; //开定时器0
- //M1:M0 0:0为标准51;0:1输出;1:0输入;1:1开漏输出
- P0M1=0X00; //P0口设为推挽输出
- P0M0=0XFF;
- P0=0;
- MODE=0;
- FLAG_MODE=0;
- PWM_HL=250;
- REPEAT=1;
- while(1)
- {
- switch (MODE)
- {
- case 0:
- for(DPTR=0;DPTR<7;DPTR++) //跳变
- {
- SET_RGB(TAB1[DPTR]);
- delayms(1000); //延时1秒
- if(FLAG_MODE)
- {
- FLAG_MODE=0;
- break;
- }
- }break;
- case 1:
- for(DPTR=0;DPTR<14;DPTR=DPTR+2) //渐变
- {
- SHADE();
- delayms(1000); //延时1秒
- if(FLAG_MODE)
- {
- FLAG_MODE=0;
- break;
- }
- }break;
-
- }
- }
- }
复制代码
所有资料51hei提供下载(原理图):
http://www.51hei.com/bbs/dpj-137471-1.html
|