单片机源程序如下:
- /*************************************************************
- 旋转LED立体显示字体测试程序 中断标志位方式 去除盲点
- 程序编写:Fucp
- 单片机 STC89C52 或者其他51
- 字模软件用 PC2002
- 逐列取模方式
- 电机旋转方向 逆时针
- /***********************************************************
- 说明:
- 硬件介绍:用单片机的16个IO口独立驱动LED灯
- 无线供电方式给旋转主板供电以及性能较好的RF370电机带动旋转,在5V供电下 显示的效果非常好.电机速度也够快
- 够安静.
- 看程序前请看下原理图,根据原理图来理解比较容易!
- 程序用中断判断红外起点的方法开始显示 每转一圈,列数往后移动一列
- 显示完指定的字数后循环 此种方式在中断中放起点标志位。在显示一圈的过程中
- 如果没有显示完一圈数据中断又来了,会立即跳出,可实现盲点很小的显示
- 感觉一个圆都能显示字
- 字幕配置方法 见初级程序中的说明
- *************************************************************/
- #include "NEW_8051.H"
- #include "task.h"
- #include <stddef.h>
-
- bit BIT_timeout=0;
- uint i=0,j=0;
- #define ucNumRows 176 //定义一周显示字个数 一个字16列 160/16=10个字
- /*********延时子程序**********/
- /*****n(us)延时子程序*****/
- void DelayUs(uint N)
- {
- uint x ;
- for(x=0;x<=N;x++);
- }
- /*********中断子程序**********/
- void int0() interrupt 0 //使用外部中断0
- {
- BIT_timeout=1; //起点标志位
- }
- /********************************/
- void start(void)
- {
- P1=0XFF;
- P2=0XFF;
-
-
- }
- /***************************************/
- void OS_ALLRun(void)
- {
- if(BIT_timeout) //起点判断
- {
- BIT_timeout=0; //清零
-
- j++;
- if( j>1920 )//显示完文字后 循环; j=16*需要显示的字数 这里大概有120个字符 所以120*16=1920
- {
- j=0 ;
- }
- for(i=j;i<ucNumRows+j;i++) //立体显示176列 数据 176/16=11个字
- {
-
- P1=zimo[i*2]; //送数据低位显示
- P2=zimo[i*2+1];//送数据高位显示
-
- DelayUs(15);
- P1=P2=0XFF;
- if(BIT_timeout)//这里如果没有显示完一圈的数据 回到起点了
- //直接跳出 就不会出现头吃尾的现象 而且盲点很小
- {
- return;
- }
- }
-
- }
- }
复制代码
所有资料51hei提供下载:
十字旋转LED.7z
(2.76 MB, 下载次数: 27)
|