找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机旋转LED源程序

[复制链接]
跳转到指定楼层
楼主
ID:367428 发表于 2019-10-4 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. /*************************************************************
  2.                    旋转LED立体显示字体测试程序 中断标志位方式 去除盲点
  3. 程序编写:Fucp

  4. 单片机 STC89C52 或者其他51
  5. 字模软件用  PC2002
  6. 逐列取模方式

  7. 电机旋转方向 逆时针
  8. /***********************************************************
  9. 说明:
  10.          硬件介绍:用单片机的16个IO口独立驱动LED灯
  11. 无线供电方式给旋转主板供电以及性能较好的RF370电机带动旋转,在5V供电下 显示的效果非常好.电机速度也够快
  12. 够安静.

  13.         看程序前请看下原理图,根据原理图来理解比较容易!
  14.     程序用中断判断红外起点的方法开始显示 每转一圈,列数往后移动一列
  15. 显示完指定的字数后循环        此种方式在中断中放起点标志位。在显示一圈的过程中
  16. 如果没有显示完一圈数据中断又来了,会立即跳出,可实现盲点很小的显示
  17. 感觉一个圆都能显示字

  18. 字幕配置方法 见初级程序中的说明
  19. *************************************************************/
  20. #include "NEW_8051.H"
  21. #include "task.h"
  22. #include <stddef.h>

  23. bit BIT_timeout=0;
  24. uint i=0,j=0;
  25. #define ucNumRows 176 //定义一周显示字个数 一个字16列 160/16=10个字
  26. /*********延时子程序**********/
  27. /*****n(us)延时子程序*****/
  28. void DelayUs(uint N)
  29. {
  30.     uint x ;
  31.     for(x=0;x<=N;x++);
  32. }

  33. /*********中断子程序**********/
  34. void int0() interrupt 0        //使用外部中断0
  35. {
  36.         BIT_timeout=1; //起点标志位        
  37. }

  38. /********************************/
  39. void start(void)
  40. {
  41.         P1=0XFF;
  42.         P2=0XFF;
  43.         
  44.         
  45. }
  46. /***************************************/
  47. void OS_ALLRun(void)
  48. {

  49.         if(BIT_timeout)        //起点判断
  50.          {                        
  51.                 BIT_timeout=0; //清零
  52.                
  53.                 j++;                                            
  54.         if( j>1920 )//显示完文字后 循环; j=16*需要显示的字数         这里大概有120个字符 所以120*16=1920
  55.         {
  56.             j=0 ;
  57.         }            
  58.         for(i=j;i<ucNumRows+j;i++)  //立体显示176列 数据   176/16=11个字
  59.         {                              
  60.            
  61.                         P1=zimo[i*2];        //送数据低位显示
  62.                         P2=zimo[i*2+1];//送数据高位显示        
  63.                                                 
  64.                         DelayUs(15);
  65.                         P1=P2=0XFF;                                                        
  66.            if(BIT_timeout)//这里如果没有显示完一圈的数据 回到起点了
  67.                                   //直接跳出 就不会出现头吃尾的现象 而且盲点很小
  68.                    {
  69.                                    return;
  70.                    }
  71.                 }
  72.                   
  73.         }
  74. }
复制代码

所有资料51hei提供下载:
十字旋转LED.7z (2.76 MB, 下载次数: 27)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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