#include <stc12c5a60s2.h>
#include "lamp_device.h"
#include "intrins.h"
#include "UART1.h"
#include "sys_configure.h"
extern uchar xdata display_buffer[WS2812B_Lamp_number*3];
/****************************************************
函数功能 复位彩灯,
实现原理 将DS拉低50us以上将会复位所有的WS2812B
复位脉冲过后WS2812B将会把传入的缓存里面的数据显示出来
****************************************************/
void reset_led(uchar IO)
{
uchar i;
P0=(~IO)&P0;
for(i=0;i<100;i++);
}
void sys_init(void)
{
P0M0=0xff;
//P2M0=0xff;
P0=0;
//P2=0;
}
/******************************************************************
函数功能:发送数据到霓虹灯WS2812B
功能实现:将LED显示缓存display_buffer数组中的数据提取出来并将每一位
数据发送到WS2812b上
发送1 将DS拉高840nS再拉低400nS
发送0 将DS拉高400nS再拉低840nS
******************************************************************/
void send_24bit_data(u32 datas,uchar IO,uchar lamp_num)
{
uchar i;
u32 m=0;
EA=0;
while(lamp_num--)
{
m=0x800000;
for(i=0;i<24;i++)
{
if(datas&m)
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
P0=0x00;
}
else
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
P0=0x00;
_nop_();
_nop_();
}
m>>=1;
}
}
EA=1;
}
void LED_Send_Buffer_Data(uchar IO,uint lamp_num)
{
uint i;
uint j,k,m;
lamp_num*=3;
//uart_send_1bit(0xff);
for(i=0;i<lamp_num;i++)
{
//uart_send_1bit(0xDD);
k=display_buffer[i];
//uart_send_1bit(k);
m=0x80;
for(j=0;j<8;j++)
{
if(k&m)
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
P0=0x00;
}
else
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
P0=0x00;
_nop_();
_nop_();
}
m>>=1;
}
}
}
void LED_Send_Buffer_Data1(uint start_add,uint stop_add,uchar IO)
{
uint i,lamp_num,M,Addr;
uchar j,k,m;
lamp_num=stop_add-start_add+1;
// uart_send_1bit(0xD1);
// uart_send_1bit(stop_add);
// uart_send_1bit(start_add);
// uart_send_1bit(lamp_num);
for(i=0;i<lamp_num;i++)
{
Addr=(start_add+i)*3;
//uart_send_1bit(Addr);
for(M=0;M<3;M++)
{
k=display_buffer[Addr+M];
m=0x80;
for(j=0;j<8;j++)
{
if(k&m)
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
P0=0x00;
}
else
{
P0=0xff&IO;
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();
P0=0x00;
_nop_();
_nop_();
}
m>>=1;
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
程序_WS2812BSTC12_stc驱动ws2812_WS2812_ws2812功能_渐变ws2812
共39个文件
c:6个
lst:6个
obj:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 15 下载量 94 浏览量
2021-09-10
21:56:09
上传
评论 6
收藏 60KB RAR 举报
温馨提示
基于STC12A60S2 的WS2812驱动以及逻辑功能实现的代码(定点点亮,渐变流水,跳跃闪烁灯多种丰富的控制)
资源推荐
资源详情
资源评论
收起资源包目录
源程序,源程序是什么意思,C,C++源码.rar (39个子文件)
源程序
output
delay.obj 2KB
lamp_device.obj 9KB
main.__i 85B
UART1.obj 2KB
main.build_log.htm 2KB
delay.__i 113B
lamp_counter_new.__i 146B
main.lnp 219B
main 25KB
lamp_device.__i 131B
UART1.__i 113B
main.hex 7KB
lamp_counter_new.obj 11KB
main.obj 5KB
STARTUP.obj 789B
project
UART1.lst 1KB
main.uvopt 7KB
main.uvgui_Administrator.bak 77KB
main.build_log.htm 2KB
STARTUP.A51 5KB
other.c 2KB
lamp_counter_new.lst 6KB
STARTUP.LST 11KB
delay.lst 1KB
main.uvproj 14KB
main.m51 25KB
lamp_device.lst 6KB
main.uvgui.Administrator 77KB
main.LST 2KB
main.c 787B
src
lamp_counter_new.h 361B
sys_configure.h 93B
delay.h 156B
lamp_counter_new.c 2KB
delay.c 289B
lamp_device.c 3KB
lamp_device.h 376B
UART1.h 101B
UART1.c 382B
共 39 条
- 1
心梓
- 粉丝: 809
- 资源: 8057
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页