找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个单片机幻彩LED驱动程序怎么修改才能行运?

[复制链接]
跳转到指定楼层
楼主
以一下一个网上看到的幻彩LED驱动程序,我在51开发板上编译通过了,可是
灯圈一直亮,按K1,K2都没反应,求帮助!

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>             //写入头文件
  3. #define uchar unsigned char
  4. sbit Send_Dat=P3^7;               //数据输出,接IN脚
  5. sbit key3=P2^1;
  6. sbit key2=P2^4;
  7. sbit key1=P2^7;
  8. uchar show[720]; // 8*3*10
  9. uchar xdata color[10][3]={
  10.         0xff,0x01,0x00,    //0
  11.         0xff,0x01,0x00,
  12.         0xff,0x01,0x00,
  13.         0xff,0x01,0x00,
  14.         0xff,0x01,0x00,
  15.         0xff,0x01,0x00,
  16.         0xff,0x01,0x00,
  17.         0xff,0x01,0x00,
  18.         0xff,0x01,0x00,
  19.         0xff,0x01,0x00,
  20.         0xff,0x01,0x00,   //10
  21.         0xff,0x01,0x00,
  22.         0xff,0x01,0x00,
  23.         0xff,0x01,0x00,
  24.         0xff,0x01,0x00,
  25.         0xff,0x01,0x00,
  26.         0xff,0x01,0x00,
  27.         0xff,0x01,0x00,
  28.         0xff,0x01,0x00,
  29.         0xff,0x01,0x00,
  30.         0xff,0x01,0x00,  //20
  31.         0xff,0x01,0x00,
  32.         0xff,0x01,0x00,
  33.         0xff,0x01,0x00,
  34.         0xff,0x01,0x00,
  35.         0xff,0x01,0x00,
  36.         0xff,0x01,0x00,
  37.         0xff,0x01,0x00,
  38.         0xff,0x01,0x00,
  39.         0xff,0x01,0x00,  //29

  40. };  //G   R   B
  41. uchar code GRB[7][3]={
  42.         0XFF,0X00,0X00,//绿
  43.         0XFF,0XFF,0X00,//黄
  44.         0X00,0XFF,0X00,//红
  45.         0X00,0XFF,0XFF,//品红
  46.         0X00,0X00,0XFF,//蓝
  47.         0XFF,0X00,0XFF,//青  
  48.         0XFF,0XFF,0XFF,//白
  49. };
  50. void delay();
  51. void delays();      

  52. /*写入数据时序*/
  53. void Send_A_bit(uchar VAL)
  54. {
  55.        if (VAL==1)
  56.        {

  57.               Send_Dat=1;
  58.               _nop_();_nop_();_nop_();_nop_();_nop_();
  59.                                                         _nop_();_nop_();_nop_();_nop_();_nop_();
  60.                                                         _nop_();_nop_();_nop_();_nop_();_nop_();
  61.                                                         _nop_();_nop_();

  62.               Send_Dat=0;         
  63.                                                         _nop_();_nop_();
  64.        }
  65.        else
  66.        {  
  67.               Send_Dat=1;
  68.                                                         _nop_();_nop_();_nop_();_nop_();

  69.               Send_Dat=0;           
  70.               _nop_();_nop_();_nop_();_nop_();_nop_();
  71.                                                         _nop_();_nop_();_nop_();_nop_();
  72.        }           

  73. }
  74. void SendAllData()
  75. {
  76.         unsigned int i;
  77.         for(i=0;i<720;i++)
  78.                 Send_A_bit(show[i]);

  79. }
  80. void WriteData()
  81. {
  82.         unsigned char i,j;
  83.         for(i=0;i<10;i++)
  84.         {
  85.                 for(j=0;j<3;j++)
  86.                 {
  87.                 show[24*i+8*j+0]=color[i][j]/128%2;
  88.                 show[24*i+8*j+1]=color[i][j]/64%2;
  89.                 show[24*i+8*j+2]=color[i][j]/32%2;
  90.                 show[24*i+8*j+3]=color[i][j]/16%2;
  91.                 show[24*i+8*j+4]=color[i][j]/8%2;
  92.                 show[24*i+8*j+5]=color[i][j]/4%2;
  93.                 show[24*i+8*j+6]=color[i][j]/2%2;
  94.                 show[24*i+8*j+7]=color[i][j]%2;
  95.                 }      
  96.         }
  97. }

  98. void change1(unsigned char k)
  99. {
  100.                 unsigned char i,j;
  101.                 for(i=0;i<10;i++)
  102.         {
  103.                 for(j=0;j<3;j++)
  104.                 color[i][j]=GRB[k][j];

  105.         }

  106. }

  107. void change2()
  108. {
  109.         unsigned char i;
  110.                 for(i=0;i<10;i++)
  111.         {
  112.                 if(color[i][0]>0&&color[i][2]==0)
  113.                 {
  114.                                 color[i][0]--;color[i][1]++;
  115.                 }
  116.                 if(color[i][1]>0&&color[i][0]==0)
  117.                 {
  118.                                 color[i][1]--;color[i][2]++;
  119.                 }
  120.                 if(color[i][2]>0&&color[i][1]==0)
  121.                 {
  122.                                 color[i][2]--;color[i][0]++;
  123.                 }
  124.         }
  125. }

  126. /*主函数*/
  127. unsigned char main()
  128. {

  129.        uchar k=0;
  130.              P2=0XFF;
  131.                          change1(0);
  132.        while(1)
  133.        {
  134.                                         change1(k);
  135.                                         Send_Dat=0;
  136.                                         WriteData();SendAllData();
  137.                                         Send_Dat=0;   
  138.                                         delays();
  139.                                         k++;if(k>=7)k=0;
  140.                                         if(key1==0) return 0;
  141.                                         if(key2==0)
  142.                                         {
  143.                                                 change1(0);
  144.                                                 while(key3==1)
  145.                                                 {
  146.                                                         change2();


  147.                                                         Send_Dat=0;
  148.                                                         WriteData();SendAllData();
  149.                                                         Send_Dat=0; //发送数据



  150.                                                 }
  151.                                         }
  152.        }
  153. }






  154. /*小延时函数*/
  155. /*大概1S吧,随便写的*/
  156. void delay()  //100ms
  157. {


  158.         unsigned char i, j, k;

  159.         i = 5;
  160.         j = 10;
  161. //        k = 147;
  162.         k=14;
  163.         do
  164.         {
  165.                 do
  166.                 {
  167.                         while (--k);
  168.                 } while (--j);
  169.         } while (--i);
  170. }


  171. /*大延时函数*/
  172. /*十几秒*/
  173. void delays()
  174. {
  175.   delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();
  176.         delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay(); delay();

  177. }
复制代码


IMG_20200514_093229.jpg (6.61 MB, 下载次数: 60)

灯圈是24颗幻彩LED灯珠

灯圈是24颗幻彩LED灯珠
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:620326 发表于 2020-5-14 10:28 | 只看该作者
这个是开发板芯片  晶振用24MHZ

IMG_20200514_093238.jpg (4.06 MB, 下载次数: 48)

这个是开发板芯片

这个是开发板芯片
回复

使用道具 举报

板凳
ID:620326 发表于 2020-5-14 10:45 | 只看该作者
编译后  

110.png (50.29 KB, 下载次数: 56)

110.png
回复

使用道具 举报

地板
ID:620326 发表于 2020-5-14 10:46 | 只看该作者
编译后

110.png (50.29 KB, 下载次数: 52)

110.png
回复

使用道具 举报

5#
ID:153181 发表于 2020-5-14 12:31 | 只看该作者
你的这个需要确认的电路连接是否有问题,你的原理图没有画出来,没办法判断是哪儿有问题;灯板接到主板的三个脚是否与程序对应? 单片机下载是否成功等等都需要确认好?目前单片机的端口是否有输出?你的灯板驱动电压是否够?这些都需要您自己确认好,否则别人只有无法判断你的问题!
回复

使用道具 举报

6#
ID:195446 发表于 2020-5-14 12:41 | 只看该作者
把 xdata改成 pdata就可以了,数据是放在516内的。
回复

使用道具 举报

7#
ID:620326 发表于 2020-5-14 13:55 | 只看该作者
mffhxa 发表于 2020-5-14 12:41
把 xdata改成 pdata就可以了,数据是放在516内的。

谢谢大师!
我试过的。有人建议过让我修改这个语句改成pdata  还说我RAM不够
回复

使用道具 举报

8#
ID:620326 发表于 2020-5-14 14:37 | 只看该作者
luo12dan66 发表于 2020-5-14 12:31
你的这个需要确认的电路连接是否有问题,你的原理图没有画出来,没办法判断是哪儿有问题;灯板接到主板的三 ...

先谢谢热心的大师!
接线没错的,我按照你的恩路用视波器测了P0口3脚,没有信号输出

130.jpg (3.83 MB, 下载次数: 40)

130.jpg

120.png (58.13 KB, 下载次数: 41)

120.png
回复

使用道具 举报

9#
ID:620326 发表于 2020-5-14 14:39 | 只看该作者
luo12dan66 发表于 2020-5-14 12:31
你的这个需要确认的电路连接是否有问题,你的原理图没有画出来,没办法判断是哪儿有问题;灯板接到主板的三 ...

硬件没有错的
回复

使用道具 举报

10#
ID:620326 发表于 2021-5-12 09:16 | 只看该作者
还没有搞好~!谁来帮助看看哪里的问题
回复

使用道具 举报

11#
ID:139866 发表于 2021-5-12 09:42 | 只看该作者
直接买核心板,想学什么外设就买什么,讲真开发板一点用都没有
回复

使用道具 举报

12#
ID:620326 发表于 2021-5-12 10:44 | 只看该作者
天ノ忆 发表于 2021-5-12 09:42
直接买核心板,想学什么外设就买什么,讲真开发板一点用都没有

大师
你推荐一下,什么核心板
回复

使用道具 举报

13#
ID:844772 发表于 2021-5-12 14:08 | 只看该作者
我觉得你这个板子不行啊,WS2812B通信协议要求的高低电平持续低于1us,要有(0.4|0.85)微秒,要用15W系列的1T单片机才行,你的板子充其量达到0.5微秒。想要再试试,就改void Send_A_bit(uchar VAL)函数:VAL==1时 ,{Send_Dat=1;   _nop_();_nop_(); Send_Dat=0;_nop_();} VAL==0时{Send_Dat=1;   _nop_(); Send_Dat=0;_nop_();_nop_();} ,不过误差太大了,我没试过,觉得够呛。
回复

使用道具 举报

14#
ID:139866 发表于 2021-5-12 14:59 | 只看该作者
POWER-LED 发表于 2021-5-12 10:44
大师
你推荐一下,什么核心板

你用什么芯片就去买什么芯片的核心板
回复

使用道具 举报

15#
ID:620326 发表于 2021-5-13 12:17 | 只看该作者
天ノ忆 发表于 2021-5-12 14:59
你用什么芯片就去买什么芯片的核心板

哦~看样子要换芯片了
回复

使用道具 举报

16#
ID:620326 发表于 2021-5-13 12:21 | 只看该作者
glinfei 发表于 2021-5-12 14:08
我觉得你这个板子不行啊,WS2812B通信协议要求的高低电平持续低于1us,要有(0.4|0.85)微秒,要用15W系列的 ...

谢谢,指导,得换芯片了,这个开发板玩不起来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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