找回密码
 立即注册

QQ登录

只需一步,快速开始

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

旋转LED显示屏POV制作 空中字 STC8单片机程序

  [复制链接]
跳转到指定楼层
楼主


//------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------

//1、本程序适用于:STC8F系列芯片制作的旋转LED显示屏POV
//2、为方便阅读,使用传统编程思路编写,并未使用框架式编程技巧,
//3、本程序使用24M晶振,STC15 STC8 均可使用
//4、祁绪电子《人人学会单片机》

//------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------

  1. //#include "STC15.H"
  2. #include "STC8.H"
  3. #include <intrins.h>
  4. #define u8 unsigned char
  5. #define u16 unsigned int
  6. #define u32 unsigned long
  7. #define zishu 21        

  8. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  9. //------汉字字模保存数组code
  10. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  11. u8 code hanzi[zishu][32]=
  12. {


  13. {0x10,0x40,0x10,0x80,0x91,0x00,0x73,0xFF,0x15,0x00,0x18,0x80,0x00,0x40,0x00,0x00,0x7F,0xFF,0x40,0x20,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x00,0x00,0x00,0x00},/*"祁",0*/
  14. /* (16 X 16 , 宋体 ) */

  15. {0x04,0x44,0x0C,0xE6,0x35,0x44,0xC6,0x48,0x08,0x48,0x04,0x20,0x24,0x40,0x24,0xFF,0x25,0x92,0xFE,0x92,0x24,0x92,0x2C,0x92,0x14,0xFF,0x64,0x00,0x04,0x00,0x00,0x00},/*"绪",1*/
  16. /* (16 X 16 , 宋体 ) */

  17. {0x00,0x00,0x00,0x00,0x1F,0xF8,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0xFF,0xFE,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1F,0xF9,0x00,0x01,0x00,0x0F,0x00,0x00},/*"电",2*/
  18. /* (16 X 16 , 宋体 ) */

  19. {0x01,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x00,0x41,0x02,0x41,0x01,0x47,0xFE,0x45,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x41,0x00,0x01,0x00,0x01,0x00,0x00,0x00},/*"子",3*/
  20. /* (16 X 16 , 宋体 ) */

  21. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",5*/
  22. /* (8 X 16 , 宋体 ) */

  23. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",7*/
  24. /* (8 X 16 , 宋体 ) */

  25. {0x08,0x01,0x08,0x06,0x8F,0xF8,0x69,0x02,0x09,0x01,0x09,0xFE,0x08,0x01,0x14,0x06,0xE4,0xF8,0x24,0x04,0x27,0xFE,0x24,0x22,0x24,0x22,0x27,0x22,0x20,0x02,0x00,0x00},/*"旋",8*/
  26. /* (16 X 16 , 宋体 ) */

  27. {0x13,0x10,0x1D,0x18,0xF1,0x10,0x17,0xFF,0x11,0x20,0x11,0x20,0x02,0x00,0x12,0x40,0x12,0xD0,0x17,0x48,0xFA,0x44,0x12,0x4B,0x12,0x50,0x12,0x60,0x02,0x00,0x00,0x00},/*"转",9*/
  28. /* (16 X 16 , 宋体 ) */

  29. {0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,0x00,0x00,0x00,0x00},/*"点",10*/
  30. /* (16 X 16 , 宋体 ) */

  31. {0x00,0x00,0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x10,0x10,0x13,0x10,0x1D,0x10,0xF1,0x10,0x17,0xFF,0x11,0x10,0x11,0x10,0x11,0x10,0x10,0x10,0x00,0x00},/*"阵",11*/
  32. /* (16 X 16 , 宋体 ) */

  33. {0x00,0x02,0x00,0x42,0x00,0x22,0x7F,0x1A,0x49,0x02,0x49,0xFE,0x49,0x02,0x49,0x02,0x49,0x02,0x49,0xFE,0x49,0x02,0x7F,0x0A,0x00,0x12,0x00,0x62,0x00,0x02,0x00,0x00},/*"显",12*/
  34. /* (16 X 16 , 宋体 ) */

  35. {0x02,0x04,0x02,0x08,0x42,0x10,0x42,0x60,0x42,0x00,0x42,0x02,0x42,0x01,0x43,0xFE,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x40,0x42,0x20,0x02,0x10,0x02,0x0C,0x00,0x00},/*"示",13*/
  36. /* (16 X 16 , 宋体 ) */

  37. {0x00,0x02,0x00,0x0C,0x7F,0xF0,0x48,0x20,0x49,0x21,0x4D,0x26,0x4B,0xF8,0x49,0x20,0x49,0x20,0x49,0x20,0x4B,0xFF,0x4D,0x20,0x79,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"屏",14*/
  38. /* (16 X 16 , 宋体 ) */

  39. {0x04,0x08,0x04,0x0C,0xFF,0xF8,0x04,0x10,0x04,0x10,0x1F,0x80,0x90,0xBF,0x54,0xAA,0x12,0xAA,0x1F,0xAA,0x12,0xAA,0x54,0xAA,0x90,0xBF,0x1F,0x80,0x00,0x00,0x00,0x00},/*"增",16*/
  40. /* (16 X 16 , 宋体 ) */

  41. {0x40,0x00,0x47,0xC2,0x44,0x41,0x44,0x42,0x7C,0x7C,0x00,0x02,0x01,0xE2,0x79,0x22,0x49,0x22,0x49,0x22,0x4F,0xFE,0x49,0x22,0x49,0x22,0x79,0x2A,0x01,0xE7,0x00,0x00},/*"强",17*/
  42. /* (16 X 16 , 宋体 ) */

  43. {0x04,0x22,0x44,0x42,0x45,0x92,0x7E,0x12,0x44,0x12,0x44,0x12,0x7F,0x92,0x44,0x7E,0x44,0x12,0x00,0x12,0x3E,0x12,0x00,0x92,0x00,0x52,0xFF,0x82,0x00,0x02,0x00,0x00},/*"型",18*/
  44. /* (16 X 16 , 宋体 ) */

  45. {0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00,0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",20*/
  46. /* (8 X 16 , 宋体 ) */

  47. {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00,0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",22*/
  48. /* (8 X 16 , 宋体 ) */

  49. {0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,0x12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00},/*"单",23*/
  50. /* (16 X 16 , 宋体 ) */

  51. {0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00},/*"片",24*/
  52. /* (16 X 16 , 宋体 ) */

  53. {0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00},/*"机",25*/
  54. /* (16 X 16 , 宋体 ) */

  55. };
  56. u8 xdata LED2X128[262];                                        //开辟缓存空间,被定时器随时调用。每列两个字节,多加2个用于移位操作。
  57. sbit HC595_DS=P3^6;                                                //74HC595的数据
  58. sbit HC595_SH=P3^5;                                                //74HC595的时钟
  59. sbit HC595_ST=P3^4;                                                //74HC595的锁存
  60. u16 xdata Timer1_count;
  61. u8 xdata LED2X128_count=0;
  62. u8 xdata Timer1_TL1=0xc2;
  63. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  64. //------LED间距是2.346mm,一圈周长是329.8mm,可以显示16*8=128列+2列黑
  65. //------转一圈约40ms,一列时间就是40ms/(128+2)=307.7us,定时器再分10份就是31us
  66. //------定时器1配置:8位,定时时间31us
  67. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  68. void Timer1_Init()                                                                        
  69. {
  70.         AUXR &= 0xBF;                //定时器时钟12T模式
  71.         TMOD &= 0x0F;                //设置定时器模式
  72.         TMOD |= 0x20;                //设置定时器模式
  73.         TL1 = Timer1_TL1;        //定时器赋初始值256-(24000000÷12T÷130列÷25帧÷10份)
  74.         TH1 = Timer1_TL1;        //定时器赋初始值256-(24000000÷12T÷130列÷25帧÷10份)
  75.         TF1 = 0;                        //清除TF1标志
  76.         TR1 = 1;                        //定时器1开始计时
  77.         ET1=1;
  78. }
  79. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  80. //------定时器1中断处理,
  81. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  82. void Timer1_Routnie (void) interrupt 3                                
  83. {
  84.         u16 k;                //总共显示130列        
  85.         Timer1_count++;
  86.         if(Timer1_count%10==1)
  87.         {
  88.                 LED2X128_count=LED2X128_count%260;//8个字*16列+2黑,每列2字节=(8*16+2)*2=260
  89.                 k=256-LED2X128_count;
  90.                
  91.                 if(k<128)
  92.                 {
  93.                         P4=~LED2X128[k];
  94.                         P2=~LED2X128[k+1];
  95.                         P1=~LED2X128[k+128];
  96.                         P0=~LED2X128[k+129];
  97.                 }
  98.                 else                                                        //两边的正好错开180度,所以只需要显示半圈                        
  99.                 {
  100.                         P4=255;
  101.                         P2=255;
  102.                         P1=255;
  103.                         P0=255;
  104.                 }
  105.                 LED2X128_count+=2;
  106.         }
  107. }

  108. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  109. //------下降沿中断INT3 接收红外PT928的下降沿
  110. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------

  111. void INT3_Routnie() interrupt 11
  112. {
  113.         if(Timer1_count>1305)                //如果转一圈时间长了,那么定时器初值减少1  定时时间延长        
  114.         {
  115.                 Timer1_TL1--;
  116.                 TL1 = Timer1_TL1;
  117.                 TH1 = Timer1_TL1;
  118.         }
  119.         else if(Timer1_count<1285)         //如果转速变快,那么定时器初值增加1  定时时间减少
  120.         {
  121.                 Timer1_TL1++;
  122.                 TL1 = Timer1_TL1;
  123.                 TH1 = Timer1_TL1;
  124.         }
  125.         LED2X128_count=0;                        //定位点从新开始显示
  126.         Timer1_count=0;                                //定位点重新计时        
  127. }

  128. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  129. //------主函数
  130. //------------------------------------------------------------------------------------------------祁绪电子《人人学会单片机》 ------
  131. void main()                                                                   //主函数
  132. {
  133.         u16 i,count;
  134.         u8 num=0,ww=0;
  135.         INTCLKO |= 0x20;                     //外部中断3下降沿中断允许
  136.         Timer1_Init();
  137.         EA=1;
  138.         for(i=0;i<260;i++)
  139.         {
  140.                 LED2X128[i]=hanzi[i/32+1][i%32];
  141.         }
  142.         while(1)                                                           
  143.         {
  144.                 count=65000;                                                               
  145.                 while(count--);                                       
  146.                
  147.                 LED2X128[260]=hanzi[ww][num];         
  148.                 num++;
  149.                 LED2X128[261]=hanzi[ww][num];         
  150.                 num++;
  151.                 if(num>=32)                                                
  152.                 {
  153.                         num=0;
  154.                         ww++;                                                
  155.                         if(ww>=zishu)                                       
  156.                         {
  157.                                 ww=0;
  158.                         }
  159.                 }
  160.                 for(i=0;i<260;i++)                                
  161.                 {                                                               
  162.                         LED2X128[i]=LED2X128[i+2];
  163.                 }//*/
  164.         }
  165. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏12 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:592807 发表于 2021-1-5 08:58 | 只看该作者
请问无线充电是什么原理?
回复

使用道具 举报

板凳
ID:143767 发表于 2021-1-5 10:12 | 只看该作者
说的很清楚,很好!
回复

使用道具 举报

地板
ID:59830 发表于 2021-1-5 15:40 | 只看该作者
看了一下,感觉不错。LED扫描显示 有兴趣的可以动动数 .  点赞
回复

使用道具 举报

5#
ID:390416 发表于 2021-2-8 18:57 | 只看该作者
黄youhui 发表于 2021-1-5 08:58
请问无线充电是什么原理?

电磁感应
回复

使用道具 举报

6#
ID:390416 发表于 2021-2-8 18:58 | 只看该作者
yygdzjs 发表于 2021-1-5 15:40
看了一下,感觉不错。LED扫描显示 有兴趣的可以动动数 .  点赞

你也可以动手试试啊  
回复

使用道具 举报

7#
ID:530691 发表于 2021-2-25 14:09 | 只看该作者
楼主 你这个套件在哪儿购买呀  有购买链接吗  我看你这个无线线圈是自己绕的吗
回复

使用道具 举报

8#
ID:887070 发表于 2021-2-28 20:43 | 只看该作者
想问以下楼主 如果是三色的那种 RGB灯 要怎么控制呀?感觉会很繁琐
回复

使用道具 举报

9#
ID:390416 发表于 2021-3-1 11:25 | 只看该作者
000-0 发表于 2021-2-28 20:43
想问以下楼主 如果是三色的那种 RGB灯 要怎么控制呀?感觉会很繁琐

这种东西 不建议做彩色 太烧钱了     还是做单色的划算
回复

使用道具 举报

10#
ID:887070 发表于 2021-3-11 09:52 | 只看该作者
楼主想请问电机转速大概要求在多少之上?5V 22mA 5500转的那种可以不?
回复

使用道具 举报

11#
ID:390416 发表于 2021-3-11 10:49 | 只看该作者
zhuyaying 发表于 2021-2-25 14:09
楼主 你这个套件在哪儿购买呀  有购买链接吗  我看你这个无线线圈是自己绕的吗

嗯 我们就是 祁绪电子
回复

使用道具 举报

12#
ID:390416 发表于 2021-3-11 10:50 | 只看该作者
一秒钟转30~50圈的样子,转速没啥要求 程序里面自动计算的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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