上次炫了一下七彩旋转LED后,没有及时的上次资料,这里补上
散件资料.rar
(2.44 MB, 下载次数: 5173)
参考程序.rar
(19.75 KB, 下载次数: 130)
企鹅 1556546395
主程序:
- /*************************************************************************
- ** 程序名称: ZA1LA3-R3旋转LED红外遥控旋转LED柱面显示遥控码
- ** 功能描述:显示红色led走字模式,,遥控改变文字效果 学习遥控以及595串口的使用
- ** 作 者: yyl
- ** 日 期: 2014-4-1
- 单片机芯片 STC15F2Kxxxx 或者其他51 选用内部晶振频率11.0592MHz
- 字模软件用 PC2002
- **------------------------------------------------------------------------------------------------------
- ** 修 改 人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ***************************************************************************/
- /*****************************************************
- 说明:
- 用595扩充单片机的IO口,每个595有8位两个串起来就是16位,
- 刚好一列,此程序的595是低位在前,所以发送数据需要先送低位
- 采用无线供电方式电流可达500MA,足够使用(当显示白色的时候
- 电流最大,将近200ma)。以及12560电机,在12V电源下 显示的效果
- 非常好.电机速度快且安静.
- 调试学习程序前请务必看一下原理图,根据原理图来理解比较容易!
- 程序用判断红外起点的方法开始显示 每转一圈,列数往后移动一列
- 显示完指定的字数后循环 此种弊端是没用中断,一圈的开始后必须要显示完
- 指定的列数才能退出,如果电机速度太快会造成头吃尾的后果,后面会介绍避免
- 头吃尾的方法,让整一圈都能显示字 盲点很小。
- 学习知识:
- 只为简单的理解显示的原理,利用人眼视觉暂存,用电机旋转做列扫描,
- 每送一列数据延时 再送下一列数据,原理比较简单,跟点阵显示差不多。
- /***************************************************/
- #include "rotatingled.h"
- uchar i=0,j=0;
- uchar Buff[192]=0xff;
- /*********************************************************************************************************
- ** 函数名称: main
- ** 功能描述: 主函数,用户程序从这里执行
- ** 输 入: 无
- ** 输 出: 无
- ** 全局变量: 无
- ** 调用模块:
- **
- ** 作 者:yyl
- ** 日 期: 20140321
- **-------------------------------------------------------------------------------------------------------
- ** 修 改 人:
- ** 日 期:
- **------------------------------------------------------------------------------------------------------
- ********************************************************************************************************/
- void main(void)
- {
- EA = 1; //总中断
- IT0 = 1; //外部中断为边沿触发
- EX0 = 1; //允许外部中断
- IT1 = 1; //外部中断为边沿触发
- EX1 = 1; //允许外部中断
- /****************定时器1初始化****************///160微秒@22.1184MHz
- AUXR |= 0x40; //定时器时钟1T模式
- TMOD &= 0x0F; //设置定时器模式
- TL1 = 0x92; //设置定时初值
- TH1 = 0xF1; //设置定时初值
- TF1 = 0; //清除TF1标志
- TR1 = 1; //定时器1开始计时
- ET1 =1;
- memcpy(Buff,txt1,160);//显示俊元电子0x
- OE=0;
- i=key_code>>4;
- memcpy(&Buff[160],&txt2[i*16],16);//显示红外码值高位
- i=key_code&0x0f;
- memcpy(&Buff[176],&txt2[i*16],16);//显示红外码值低位
-
- while(1)
- { if( new_code )
- { new_code=0;
- i=key_code>>4;
- memcpy(&Buff[160],&txt2[i*16],16);//显示红外码值高位
- i=key_code&0x0f;
- memcpy(&Buff[176],&txt2[i*16],16);//显示红外码值低位
- }
-
-
- if(IRFLAG)
- {
- IRFLAG=0;
-
- for(i=0;i<96;i++)
- {
- Write595 (Buff[i*2+1]);
- Write595 (Buff[i*2]);
- RCLK=0;
- Delay1us();
- RCLK=1; //上升沿把8位数据并行输出
- Delay100us();//延时让LED亮起来 每列延时的时间
- Write595(0xff); //送高电平关闭显示
- Write595(0xff);
- RCLK=0;
- Delay1us();
- RCLK=1;
-
- }
- }
- }
- }
复制代码
|