用单片机控制LED灯带的问题
时间:10-02
整理:3721RD
点击:
最近在研究单片机控制ws2812b灯带 我用的是1T的单片机STC12c2052AD 晶振11.0592M
但是控制有问题 我想亮10个灯 但是只亮一个 颜色还不对 有了解的大神吗 指导一下 感激之至
资料如下
代码如下:
看看什么地方出错了 谢谢大家
但是控制有问题 我想亮10个灯 但是只亮一个 颜色还不对 有了解的大神吗 指导一下 感激之至
资料如下
代码如下:
- #include "STC12C2052AD.H"
- #include <intrins.h>
- #define uchar unsigned char
- sbit Din=P3^5; //数据端口
- uchar bdata LED_DAT;
- sbit bit0 = LED_DAT^0;
- sbit bit1 = LED_DAT^1;
- sbit bit2 = LED_DAT^2;
- sbit bit3 = LED_DAT^3;
- sbit bit4 = LED_DAT^4;
- sbit bit5 = LED_DAT^5;
- sbit bit6 = LED_DAT^6;
- sbit bit7 = LED_DAT^7;
- uchar RR,GG,BB;
- void delayus(uchar z)
- {
- uchar i;
- for (i=0;i<z;i++)
- {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
- }
- void CODE1()
- {
- Din= 1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- void CODE0()
- {
- Din= 1;_nop_();_nop_();_nop_();_nop_();
- Din= 0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
- }
- void Reset()
- {
- Din = 0;
- delayus(60);
- }
- void SendData()
- {
- LED_DAT = GG;
- if(bit7==1) {CODE1();} else {CODE0();}
- if(bit6==1) {CODE1();} else {CODE0();}
- if(bit5==1) {CODE1();} else {CODE0();}
- if(bit4==1) {CODE1();} else {CODE0();}
- if(bit3==1) {CODE1();} else {CODE0();}
- if(bit2==1) {CODE1();} else {CODE0();}
- if(bit1==1) {CODE1();} else {CODE0();}
- if(bit0==1) {CODE1();} else {CODE0();}
- LED_DAT = RR;
- if(bit7==1) {CODE1();} else {CODE0();}
- if(bit6==1) {CODE1();} else {CODE0();}
- if(bit5==1) {CODE1();} else {CODE0();}
- if(bit4==1) {CODE1();} else {CODE0();}
- if(bit3==1) {CODE1();} else {CODE0();}
- if(bit2==1) {CODE1();} else {CODE0();}
- if(bit1==1) {CODE1();} else {CODE0();}
- if(bit0==1) {CODE1();} else {CODE0();}
- LED_DAT = BB;
- if(bit7==1) {CODE1();} else {CODE0();}
- if(bit6==1) {CODE1();} else {CODE0();}
- if(bit5==1) {CODE1();} else {CODE0();}
- if(bit4==1) {CODE1();} else {CODE0();}
- if(bit3==1) {CODE1();} else {CODE0();}
- if(bit2==1) {CODE1();} else {CODE0();}
- if(bit1==1) {CODE1();} else {CODE0();}
- if(bit0==1) {CODE1();} else {CODE0();}
- }
- void send_string_data(uchar num)
- {
- uchar i;
- for (i=0;i<num;i++)
- {
- SendData();
- Reset() ;
- }
- }
- void main()
- {
- // P3M0=0x00; //强推挽输出 配置P3^5口
- // P3M1=0x20; //强推挽输出 配置P3^5口
- RR=25;GG=25;BB=112; //深蓝色
- delayus(50);
-
- send_string_data(10);
- while(1);
- }
看看什么地方出错了 谢谢大家
LED_DAT这个IO口定义的是多少?是不是定义的P3IO口,用记事本打开两个H文件,搜一下sbit看看0xA0定义的什么,除了P3还有没有别的?