找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用单片机控制LED灯带的问题

[复制链接]
跳转到指定楼层
楼主
最近在研究单片机控制ws2812b灯带 我用的是1T的单片机STC12c2052AD  晶振11.0592M  
但是控制有问题 我想亮10个灯 但是只亮一个 颜色还不对  有了解的大神吗  指导一下 感激之至
资料如下

  1. #include "STC12C2052AD.H"
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. sbit Din=P3^5;      //数据端口

  5. uchar bdata LED_DAT;
  6. sbit bit0 = LED_DAT^0;
  7. sbit bit1 = LED_DAT^1;
  8. sbit bit2 = LED_DAT^2;
  9. sbit bit3 = LED_DAT^3;
  10. sbit bit4 = LED_DAT^4;
  11. sbit bit5 = LED_DAT^5;
  12. sbit bit6 = LED_DAT^6;
  13. sbit bit7 = LED_DAT^7;

  14. uchar RR,GG,BB;

  15. void delayus(uchar z)
  16. {
  17.         uchar i;
  18.         for (i=0;i<z;i++)
  19.         {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
  20. }

  21. void CODE1()
  22. {
  23.         Din= 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                        
  24.         Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                                                                        
  25. }

  26. void CODE0()
  27. {
  28.         Din= 1;_nop_();_nop_();_nop_();_nop_();                                                                                                        
  29.         Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();                        
  30. }

  31. void Reset()
  32. {
  33.   Din = 0;
  34.   delayus(60);        
  35. }

  36. void SendData()
  37. {
  38.   LED_DAT = GG;
  39.         if(bit7==1) {CODE1();} else {CODE0();}   
  40.         if(bit6==1) {CODE1();} else {CODE0();}   
  41.         if(bit5==1) {CODE1();} else {CODE0();}   
  42.         if(bit4==1) {CODE1();} else {CODE0();}   
  43.         if(bit3==1) {CODE1();} else {CODE0();}   
  44.         if(bit2==1) {CODE1();} else {CODE0();}   
  45.         if(bit1==1) {CODE1();} else {CODE0();}   
  46.         if(bit0==1) {CODE1();} else {CODE0();}
  47.   LED_DAT = RR;
  48.         if(bit7==1) {CODE1();} else {CODE0();}   
  49.         if(bit6==1) {CODE1();} else {CODE0();}   
  50.         if(bit5==1) {CODE1();} else {CODE0();}   
  51.         if(bit4==1) {CODE1();} else {CODE0();}   
  52.         if(bit3==1) {CODE1();} else {CODE0();}   
  53.         if(bit2==1) {CODE1();} else {CODE0();}   
  54.         if(bit1==1) {CODE1();} else {CODE0();}   
  55.         if(bit0==1) {CODE1();} else {CODE0();}
  56.   LED_DAT = BB;
  57.          if(bit7==1) {CODE1();} else {CODE0();}   
  58.          if(bit6==1) {CODE1();} else {CODE0();}   
  59.          if(bit5==1) {CODE1();} else {CODE0();}   
  60.          if(bit4==1) {CODE1();} else {CODE0();}   
  61.          if(bit3==1) {CODE1();} else {CODE0();}   
  62.          if(bit2==1) {CODE1();} else {CODE0();}   
  63.          if(bit1==1) {CODE1();} else {CODE0();}   
  64.          if(bit0==1) {CODE1();} else {CODE0();}
  65. }

  66. void send_string_data(uchar num)
  67. {
  68.         uchar i;
  69.         for (i=0;i<num;i++)
  70.         {
  71.            SendData();
  72.                    Reset()         ;
  73.         }
  74. }

  75. void main()
  76. {  
  77.   // P3M0=0x00;    //强推挽输出 可达20mA 配置P3^5口
  78.   // P3M1=0x20;     //强推挽输出 可达20mA 配置P3^5口
复制代码
看看什么地方出错了  谢谢大家


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

使用道具 举报

沙发
ID:162491 发表于 2017-3-26 15:41 | 只看该作者
本帖最后由 11234 于 2017-3-26 15:42 编辑
  1. void main()
  2. {  
  3.   // P3M0=0x00;    //强推挽输出 配置P3^5口
  4.   // P3M1=0x20;     //强推挽输出 配置P3^5口

  5.    RR=25;GG=25;BB=112;   //深蓝色
  6.    delayus(50);        
  7.    
  8.    send_string_data(10);
  9.            while(1);
  10. }
复制代码
回复

使用道具 举报

板凳
ID:111634 发表于 2017-3-26 22:36 | 只看该作者
与控制循环灯基本无区别,只是增大了驱动电流。
回复

使用道具 举报

地板
ID:162491 发表于 2017-3-27 09:46 | 只看该作者
zl2168 发表于 2017-3-26 22:36
与控制循环灯基本无区别,只是增大了驱动电流。

配置P3口的话 20mA 强推挽输出也不行
回复

使用道具 举报

5#
ID:111634 发表于 2017-3-27 20:21 | 只看该作者
本帖最后由 zl2168 于 2017-3-27 20:24 编辑
11234 发表于 2017-3-27 09:46
配置P3口的话 20mA 强推挽输出也不行

小于 20mA ,就用强推挽输出;大于 20mA ,就另加驱动。哪怕2A、20A都可以。
什么叫单片机,单片机就是控制执行元件、智能控制,至于电流,那是选择执行元件的负载能力。
回复

使用道具 举报

6#
ID:162491 发表于 2017-3-28 10:21 | 只看该作者
zl2168 发表于 2017-3-27 20:21
小于 20mA ,就用强推挽输出;大于 20mA ,就另加驱动。哪怕2A、20A都可以。
什么叫单片机,单片机就是 ...

看下我那个发送数据SendData() 有问题吗 颜色控制有问题现在
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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