请教下关于STC8H1K08内存问题
2024-7-12 15:30 来自 nibinxiaoyang 发布 @ 综合讨论
以下是我的源代码,
现在的应用要求是一个幻彩灯,一路遥控,两路按键,一路ADC,其余就是想有30种左右的幻彩效果,
结果我完善了所有逻辑功能开始写幻彩,一个程序就8000了,咱么这个这么占内存吗?
以下是我源代码:#define RGB_PIN P3_5//RGB灯的引脚
#define RGB_NUMLEDS 30 //RGB灯的个数
#define RGB_PIN_MODE {P3M1&=~0x20;P3M0|=0x20;}//推挽输出
#define PWM_DUTY_MAX 1000//PWM最大占空比值
#define IR_REC_PIN P3_6
#define IR_REC_PIN_MODE {P3M1|=0x40;P3M0&=~0x40;}//P3_6高阻输入
#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#define ws2812b_IO P1_1//RGB灯的引脚
#define ws2812b_IO1 P3_5//RGB灯的引脚
#define WS_NUM 30 //RGB灯的个数
#include "lib/ADC.h"
//#include "lib/UART.h"
#include "lib/rgb.h"
#include "lib/ir.h"
//#include "lib/delay.h"
uint8 MOD = 1;
uint8 ZXBL = 1;
uint8 LED_SL = 30;
uint8 IR_KEY = 0;
uint8 ON_OFF = 0;
uint8 B_100us = 0;
uint8 GM_ADC = 0;
uint8 i;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
void WS2812_bit(bit data_bit);
void SendData(u8 dat);
void Init_GPIO();
void WS2812_rand_color(u8 R, u8 G, u8 B);
void WS2812_WriteReset(void);
void reset(void);
void DisP_Color(u32 dat);
void delay_ms(u8 ms);
void Breathing_lamp_Alternate(unsigned int time);
void Breathing_lamp_Red(unsigned int time);
unsigned char LED_DAT;
#define bit0 (LED_DAT & 0x01)
#define bit1 (LED_DAT & 0x02)
#define bit2 (LED_DAT & 0x04)
#define bit3 (LED_DAT & 0x08)
#define bit4 (LED_DAT & 0x10)
#define bit5 (LED_DAT & 0x20)
#define bit6 (LED_DAT & 0x40)
#define bit7 (LED_DAT & 0x80)
void delay_ms(u8 ms);
void Timer0Init(void) //100微秒@24.000MHz
{
AUXR &= 0x7f; //定时器时钟12T模式
TMOD &= 0xf0; //设置定时器模式
TL0 = 0x38; //设定定时初值
TH0 = 0xff; //设定定时初值
}
void EX_1(void) interrupt 2 using 3{
if(P3_3){
delay(30);
if(P3_3){
MOD = MOD + 1;
if(MOD >= 4){
MOD = 0;
}
}
}
ZXBL = 0;
}
void EX_0(void) interrupt 0 using 1{
if(P3_2){
delay(30);
if(P3_2){
MOD = MOD + 1;
if(MOD >= 4){
MOD = 0;
}
}
}
ZXBL = 0;
}
void T_IRQ0(void) interrupt 1 using 2{
ir_rec_callback();//红外接收回调函数
if(ir_rx_available()){
IR_KEY = ir_rx_ircode();
B_100us = 1;
}
}
void setup()
{
}
void Breathing_lamp_Red(unsigned int time)
{
u8 j, x, num, move;
u32 colors = {0xFF00FF,0xFF8000}; // 红色
u32 color0, color1;
u8 brightness = 0;
for (num = 0; num < 1; num++)
{
color0 = colors;
for (x = 0; x < 127; x++)
{
brightness = (brightness + 1) % 128;
color1
现在的应用要求是一个幻彩灯,一路遥控,两路按键,一路ADC,其余就是想有30种左右的幻彩效果,
结果我完善了所有逻辑功能开始写幻彩,一个程序就8000了,咱么这个这么占内存吗?
以下是我源代码:#define RGB_PIN P3_5//RGB灯的引脚
#define RGB_NUMLEDS 30 //RGB灯的个数
#define RGB_PIN_MODE {P3M1&=~0x20;P3M0|=0x20;}//推挽输出
#define PWM_DUTY_MAX 1000//PWM最大占空比值
#define IR_REC_PIN P3_6
#define IR_REC_PIN_MODE {P3M1|=0x40;P3M0&=~0x40;}//P3_6高阻输入
#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#define ws2812b_IO P1_1//RGB灯的引脚
#define ws2812b_IO1 P3_5//RGB灯的引脚
#define WS_NUM 30 //RGB灯的个数
#include "lib/ADC.h"
//#include "lib/UART.h"
#include "lib/rgb.h"
#include "lib/ir.h"
//#include "lib/delay.h"
uint8 MOD = 1;
uint8 ZXBL = 1;
uint8 LED_SL = 30;
uint8 IR_KEY = 0;
uint8 ON_OFF = 0;
uint8 B_100us = 0;
uint8 GM_ADC = 0;
uint8 i;
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
void WS2812_bit(bit data_bit);
void SendData(u8 dat);
void Init_GPIO();
void WS2812_rand_color(u8 R, u8 G, u8 B);
void WS2812_WriteReset(void);
void reset(void);
void DisP_Color(u32 dat);
void delay_ms(u8 ms);
void Breathing_lamp_Alternate(unsigned int time);
void Breathing_lamp_Red(unsigned int time);
unsigned char LED_DAT;
#define bit0 (LED_DAT & 0x01)
#define bit1 (LED_DAT & 0x02)
#define bit2 (LED_DAT & 0x04)
#define bit3 (LED_DAT & 0x08)
#define bit4 (LED_DAT & 0x10)
#define bit5 (LED_DAT & 0x20)
#define bit6 (LED_DAT & 0x40)
#define bit7 (LED_DAT & 0x80)
void delay_ms(u8 ms);
void Timer0Init(void) //100微秒@24.000MHz
{
AUXR &= 0x7f; //定时器时钟12T模式
TMOD &= 0xf0; //设置定时器模式
TL0 = 0x38; //设定定时初值
TH0 = 0xff; //设定定时初值
}
void EX_1(void) interrupt 2 using 3{
if(P3_3){
delay(30);
if(P3_3){
MOD = MOD + 1;
if(MOD >= 4){
MOD = 0;
}
}
}
ZXBL = 0;
}
void EX_0(void) interrupt 0 using 1{
if(P3_2){
delay(30);
if(P3_2){
MOD = MOD + 1;
if(MOD >= 4){
MOD = 0;
}
}
}
ZXBL = 0;
}
void T_IRQ0(void) interrupt 1 using 2{
ir_rec_callback();//红外接收回调函数
if(ir_rx_available()){
IR_KEY = ir_rx_ircode();
B_100us = 1;
}
}
void setup()
{
}
void Breathing_lamp_Red(unsigned int time)
{
u8 j, x, num, move;
u32 colors = {0xFF00FF,0xFF8000}; // 红色
u32 color0, color1;
u8 brightness = 0;
for (num = 0; num < 1; num++)
{
color0 = colors;
for (x = 0; x < 127; x++)
{
brightness = (brightness + 1) % 128;
color1
免责声明:
本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;
上一篇: 为什么STC用的如此广泛?
下一篇: SHT30传感器芯片死机