找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 458|回复: 8
收起左侧

哪位大神指点一下,网上的程序烧录进单片机没反应,也不知道哪里错了

[复制链接]
ID:1009425 发表于 2023-12-6 13:47 | 显示全部楼层 |阅读模式
sfr P3              = 0xB0;
sfr LEDWTML         = 0xce;
sfr LEDWTMH         = 0xcf;
sfr LEDAT1          = 0xc7;
sfr PWMEN           = 0x90;
sfr PWM2DIVL        = 0xad;
sfr PWM2DIVH        = 0xae;
sfr PWM2DUTL        = 0x9f;
sfr PWM2DUTH        = 0x91;
sfr PWM2CKD         = 0xb3;
sfr PWM2CON         = 0xbb;
sfr LEFLG           = 0xbf;
#define CKCON (*(unsigned char volatile xdata *)0x8030)
#define P34F  (*(unsigned char volatile xdata *)0x801C)
#define LEDUTL (*(unsigned char volatile xdata *)0x8060)
#define LEDUTH (*(unsigned char volatile xdata *)0x8061)
#define PWMIE(N) (N<<7) //N=0-1
#define PWMTOG(N) (N<<6) //N=0-1
#define PWMMOD(N) (N<<3) //N=0-7
#define PWMPOL(N) (N<<2) //N=0-1
#define PWMCKS_SYS 0
#define PWMCKS_IL 1
#define PWMCKS_IH 2     //LEFLG
#define LEF1 (1<<3)
#define LEBSY1 (1<<2)
#define IHCKE (1<<7)
void PWM_init(void)
{
P3   =16;
P34F = 5; //设置 P34 为 PWM 引脚功能
CKCON |= IHCKE; //打开 IRCH 时钟
PWM2DIVH = 0; //设置位周期时间
PWM2DIVL = 20;
PWM2DUTH = 0; //设置位码 0 时间
PWM2DUTL = 6;
LEDUTH = 0; //设置位码 1 时间
LEDUTL = 13;
PWM2CON = PWMIE(0) | PWMTOG(0) | PWMMOD(3) | PWMPOL(0) | PWMCKS_IH; //设置IRCH 为PWM时钟源,发送 3 个字节后插入暂停时间
PWM2CKD = 0; //设置预分频系数,设置为 0 表示不分频
LEDWTMH = 0; //设置暂停时间
LEDWTML = 50;
PWMEN |= (2<<2); //PWM2 使能
}
code unsigned char LED_DAT[][3] = //LED 数据表
{
{0xff,0x00,0x00},
{0xff,0xff,0x00},
{0x00,0xff,0x00},
{0x00,0xff,0xff},
{0x00,0x00,0xff},
{0xff,0x00,0xff},
};
void main(void)
{
unsigned char i;
unsigned char color_index=0;
PWM_init();
while(1)
{
for(i=0;i<24;i++) //每级 RGB LED 为 3 个字节数据,8 级为 24 字节
{
while(LEFLG & LEBSY1); //等待数据全部发送
LEDAT1 = LED_DAT[color_index][i%3]; //写入 LED 数据到 LEDAT 寄存器
}
color_index ++; //循环变色
if(color_index> 6) color_index =0;
}
  }

回复

使用道具 举报

ID:161164 发表于 2023-12-7 09:36 | 显示全部楼层
啥芯片?
预期反应是啥?
没反应又是啥?
回复

使用道具 举报

ID:1009425 发表于 2023-12-12 14:49 | 显示全部楼层
1.“PWMEN |= (2<<2); //PWM2 使能” 改为 “PWMEN |= (1<<2); //PWM2 使能”
2.需要复位280us以上
回复

使用道具 举报

ID:1009425 发表于 2024-1-20 12:47 | 显示全部楼层
//航顺8位单片机,锦锐CA51F551S1,只可调光,调速,调灯组数,不会跑马。程序调试OK
sfr P3              = 0xb0;
sbit EA                         = 0xAF;
sfr LEDWTML         = 0xce;
sfr LEDWTMH         = 0xcf;
sfr LEDAT1             = 0xc7;
sfr PWMEN           = 0x90;
sfr PWM2DIVL        = 0xad;
sfr PWM2DIVH        = 0xae;
sfr PWM2DUTL        = 0x9f;
sfr PWM2DUTH        = 0x91;
sfr PWM2CKD         = 0xb3;
sfr PWM2CON         = 0xbb;
sfr LEFLG           = 0xbf;
#define CKCON (*(unsigned char volatile xdata *)0x8030)
#define P34F  (*(unsigned char volatile xdata *)0x801C)
#define LEDUTL (*(unsigned char volatile xdata *)0x8060)
#define LEDUTH (*(unsigned char volatile xdata *)0x8061)
#define PWMIE(N) (N<<7) //N=0-1
#define PWMTOG(N) (N<<6) //N=0-1
#define PWMMOD(N) (N<<3) //N=0-7
#define PWMPOL(N) (N<<2) //N=0-1
#define PWMCKS_SYS   0
#define PWMCKS_IL    1
#define PWMCKS_IH    2     //LEFLG
#define LEF1 (1<<3)
#define LEBSY1 (1<<6)
#define IHCKE (1<<7)

void main(void)
{               
                EA = 1;       
                CKCON =(1<<7);                                                        //打开IRCH时钟
    P34F  =5;
        PWM2CON = PWMIE(0) | PWMTOG(0) | PWMMOD(3) | PWMPOL(0) | PWMCKS_IH;                //设置PWM时钟源为IRCH
        PWM2CKD = 0;                                                                                                                                                                       
       
        //设置PWMDIV、PWMDUT
        PWM2DIVH = 0;                       
        PWM2DIVL = 30;               

       
        PWM2DUTH = 0;               
        PWM2DUTL = 7;       
       
        LEDUTH        = 0;               
        LEDUTL        = 14;               
       
        LEDWTMH        = 0;
        LEDWTML        = 50;       
       
                                                                //开全局中断
        PWMEN |= (1<<2); //PWM2 使能

        while(1)
        {
        unsigned int j,k;//定义一个16位无符号整形变量
        unsigned char i;
                static unsigned char color_index = 0;
                code unsigned char LED_DAT[][3] =
                {
            {0x00,0x2F,0x00},         //绿,红,蓝
                        {0x2F,0x00,0x00},
                        {0x00,0x00,0x2F},
                        {0x00,0x2F,0x2F},
            {0x2F,0x2F,0x00},
                        {0x2F,0x00,0x2F},
                        {0x2F,0x2F,0x2F},
                };               
                for(i=0;i<24;i++)              //LED个数i*3
                {
                        while(LEFLG & LEBSY1);
                        LEDAT1 = LED_DAT[color_index][i%3];
                }
                color_index ++;
                if(color_index> 6) color_index =0;    //LED数据组数N-1
      for(j=0;j<1500;j++)  //延时0.2s
        {
            for(k=1000;k>0;k--);
        }
        }
}
回复

使用道具 举报

ID:1009425 发表于 2024-1-20 15:49 | 显示全部楼层
8位2812点亮图片

8位2812

8位2812

WS2812.rar

1.52 KB, 下载次数: 1

回复

使用道具 举报

ID:1009425 发表于 2024-1-20 15:53 | 显示全部楼层
lkc8210 发表于 2023-12-7 09:36
啥芯片?
预期反应是啥?
没反应又是啥?

D:\123.JPG
回复

使用道具 举报

ID:1009425 发表于 2024-1-20 19:45 | 显示全部楼层
锦锐CA51F551S1芯片手册

航顺-CA51F551S1.pdf

2.37 MB, 下载次数: 0

规格书与例程

回复

使用道具 举报

ID:1009425 发表于 2024-1-20 19:47 | 显示全部楼层
lkc8210 发表于 2023-12-7 09:36
啥芯片?
预期反应是啥?
没反应又是啥?

锦锐CA51F551S1,自带WS2812硬件驱动
回复

使用道具 举报

ID:382454 发表于 2024-1-22 16:20 | 显示全部楼层
照抄也要抄的对啊。。。。。。。人才。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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