219程序为:LED七彩跳变+渐变的转换YX-222(LED流星灯8段16段-软件生成生成数据1
YX-225(用DM134实现16段,8段,4段16级灰度拖尾)
YX-231(红外遥控LED跳变渐变定色)
YX-222(LED流星灯8段16段-软件生成生成数据1
电路原理图如下:
单片机源程序如下:
- //============================================================================
- //================翼芯科技 用DM134实现16段,8段,4段16级灰度拖尾================
- //============================================================================
- // 此源码版权属 翼芯科技 全权享有,如欲引用,敬请署名并告知
- // 严禁随意用于商业目的,违者必究,后果自负
- //程序说明:本程序用DM134实现16段,8段,4段16级灰度拖尾,各重复1次,不同步.IC插到U9位置.
- //文件名称:main.C
- //日期: 2011/01/23
- //版本: 1.0
- //C编译器: keil 8.05
- //=============================================================================
- #include <STC12C5AXX.H>
- #define uchar unsigned char
- #define uint unsigned int
- sbit DAT = P3^2; //DM134数据输出
- sbit CLK = P3^3; //DM134时钟输出
- sbit LE = P3^4; //DM134锁存口
- sbit EN = P4^4; //DM134使能口
- uchar code MOV_CNT[3]={31,24,20};
- uchar code DEC_CNT[3]={1,2,4};
- uchar DAT_BUF[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- uint DATA_REG; //DM134输出数据变量
- /******************************************************************
- - 功能描述:延时函数
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- delayms(uint x)
- {
- uint t;
- while(x--)
- for(t=1500;t>0;t--);
- }
- /******************************************************************
- - 功能描述:向DM134发送数据
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- void sendbyte(uint byte)
- {
- uint num,i;
- num=byte;
- for(i=16;i>0;i--)
- {
- CLK=0;
- DAT=num&0x8000;
- num=num<<1;
- CLK=1;
- }
- LE=1;
- LE=0;
- }
- /******************************************************************
- - 功能描述:PMW输出
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- void SCAN(void)
- {
- uchar SPEED,PWM;
- for(SPEED=100;SPEED>0;SPEED--) //调速度
- {
- for(PWM =16;PWM>0;PWM--)
- {
- (DAT_BUF[1] > PWM)? (DATA_REG |= 0X8000) : (DATA_REG &=0X7FFF);
- (DAT_BUF[2] > PWM)? (DATA_REG |= 0X4000) : (DATA_REG &=0XBFFF);
- (DAT_BUF[3] > PWM)? (DATA_REG |= 0X2000) : (DATA_REG &=0XDFFF);
- (DAT_BUF[4] > PWM)? (DATA_REG |= 0X1000) : (DATA_REG &=0XEFFF);
- (DAT_BUF[5] > PWM)? (DATA_REG |= 0X0800) : (DATA_REG &=0XF7FF);
- (DAT_BUF[6] > PWM)? (DATA_REG |= 0X0400) : (DATA_REG &=0XFBFF);
- (DAT_BUF[7] > PWM)? (DATA_REG |= 0X0200) : (DATA_REG &=0XFDFF);
- (DAT_BUF[8] > PWM)? (DATA_REG |= 0X0100) : (DATA_REG &=0XFEFF);
- (DAT_BUF[9] > PWM)? (DATA_REG |= 0X0080) : (DATA_REG &=0XFF7F);
- (DAT_BUF[10] > PWM)? (DATA_REG |= 0X0040) : (DATA_REG &=0XFFBF);
- (DAT_BUF[11] > PWM)? (DATA_REG |= 0X0020) : (DATA_REG &=0XFFDF);
- (DAT_BUF[12] > PWM)? (DATA_REG |= 0X0010) : (DATA_REG &=0XFFEF);
- (DAT_BUF[13] > PWM)? (DATA_REG |= 0X0008) : (DATA_REG &=0XFFF7);
- (DAT_BUF[14] > PWM)? (DATA_REG |= 0X0004) : (DATA_REG &=0XFFFB);
- (DAT_BUF[15] > PWM)? (DATA_REG |= 0X0002) : (DATA_REG &=0XFFFD);
- (DAT_BUF[16] > PWM)? (DATA_REG |= 0X0001) : (DATA_REG &=0XFFFE);
- sendbyte(DATA_REG); //输出DM134数据
- }
- }
- }
- /******************************************************************
- - 功能描述:主函数
- - 隶属模块:无
- - 函数属性:无
- - 参数说明:无
- - 返回说明:无
- - 注:.....
- ******************************************************************/
- void main(void)
- {
- uchar i,j,SEG,REPEAT;
- //M1:M0 0:0为标准51;0:1输出;1:0输入;1:1开漏输出
- P3M1=0X00; //P0口设为推挽输出
- P3M0=0XFF;
- P4M1=0X00; //P4口设为推挽输出
- P4M0=0XFF;
- EN=0;
-
- P0=0;
- while(1)
- {
- for(SEG=0;SEG<3;SEG++) //段指针
- {
- for(REPEAT=1;REPEAT>0;REPEAT--) //重复次数
- {
- DAT_BUF[0]=16; //灰度初始化
- for(i=0;i<MOV_CNT[SEG];i++) //整个数据左移1次
- {
- for(j=16;j>0;j--) //16个数据向后移动一位
- {
- DAT_BUF[j]=DAT_BUF[j-1];
- }
- SCAN(); //PWM输出
- if(DAT_BUF[0]!=0) //数据减
- DAT_BUF[0]-=DEC_CNT[SEG];
- }
- delayms(300); //延时
- }
- }
- }
- }
复制代码 全部程序均可完全编译与使用
所有资料51hei提供下载:
附件.zip
(207.64 KB, 下载次数: 175)
|