应广单片机实现红蓝双色爆闪灯

继续进行点灯,今天来点简单的,红蓝双色爆闪灯,上电即可爆闪,红色接pa.3.pa.4,蓝色接pa6.和pa.7,低电平点亮LED灯,想要高电平点亮,或是驱动N管点亮灯,可以稍作修改。端口电平输出0改1,1改0即可。

不多说,上代码!

#include "extern.h"

/*调试输出开关,关闭之后测试端口不输出了*/

//#define DEBUG

/*1m 标记*/

bit msFlag;

/*us计数*/

byte ucUsCnt;

/*ms 计数*/

byte ucMsCnt;

Word Reload_T16;

/*可以用示波器观察对应端口*/

#ifdef DEBUG

bit US100_OUT :pa.7

bit MS_OUT :pa.6

bit MS10_OUT :pa.0

#endif

byte ucLedst;

BIT COM1 : PA.3;

BIT COM2 : PA.4;

BIT COM3 : PA.6;

BIT COM4 : PA.7;

#define SEG_A COM4

#define SEG_B COM3

#define SEG_C COM2

#define SEG_D COM1

/*中断服务程序*/

void Interrupt(void)

{

pushaf;

if(Intrq.T16)

{

STT16 Reload_T16;

Intrq.T16 = 0;

ucUsCnt++;

if(ucUsCnt>9)

{

ucUsCnt=0;

/*100us*10=1ms*/

msFlag=1;

}

/*100u task,紧急任务放这边,但这里的任务尽量少,

心脏部位,尽量减少干扰,需要保证tick精准*/

#ifdef DEBUG

if(US100_OUT)

{

US100_OUT=0;

}

else

{

US100_OUT=1;

}

#endif

}

popaf;

}

/*T16设置*/

Void Timer16_Init(void)

{

/*向上计数 1600就发生中断 1600/16M=0.0001s=100us,理论设计*/

//Reload_T16 = 32768 - 1600;

/*根据测算(示波器校准),除去误差(约为20个sysclk周期),设置1580这个值可能更准确,

SYSCLK越快,误差越小.从进入中断开始,到重新设置计数器,中间大概需要20个sysclk周期*/

Reload_T16 = 32768 - 1580;

/*设置计数器值*/

STT16 Reload_T16;

/*配置T16 控制寄存器*/

$ T16M IHRC,/1,BIT15;

INTRQ.T16 = 0;

INTEN.T16 = 1;

msFlag=0;

ucUsCnt=0;

}

void Flash(void)

{

switch(ucMsCnt)

{

case 0:

COM1=1;

COM2=1;

COM3=0;

COM4=0;

nop;

break;

case 62:

COM1=1;

COM2=1;

COM3=1;

COM4=1;

nop;

break;

case 124:

COM1=0;

COM2=0;

COM3=1;

COM4=1;

nop;

break;

case 186:

COM1=1;

COM2=1;

COM3=1;

COM4=1;

nop;

break;

}

}

void FPPA0 (void)

{

/*注意,修改了sysclk,Reload_T16要做细微调整,可以试着改动sysclk,

会发现Reload_T16误差变大*/

.ADJUST_IC SYSCLK=IHRC/8,IHRC=16MHz,init_ram,VDD=5V;

.delay 20*2000;

// $ SHOW_EN in ;

$ COM1 OUT,low;

$ COM2 OUT,low;

$ COM3 OUT,low;

$ COM4 OUT,low;

/*初始化T16*/

Timer16_Init();

#ifdef DEBUG

$ US100_OUT out,low;

$ MS_OUT out,low;

$ MS10_OUT out,low;

#endif

ucLedst=0;

Engint;

while (1)

{

/*1ms标记*/

if(msFlag)

{

ucMsCnt++;

if(ucMsCnt>249)

{

/*1ms*10=10ms*/

ucMsCnt=0;

}

Flash();

msFlag=0;

}

}

}

/*creat by zhongvv QQ85547259*/

相关推荐
smartpi_ai8 分钟前
离线语音模块误识别问题全面解决方案:命令词设计、防误触与灵敏度调优指南
人工智能·单片机·语音识别
LCG元11 分钟前
STM32F103 驱动 HX711 称重实战:DOUT 就绪时序、增益切换陷阱与两点标定精度实测
stm32·单片机·嵌入式硬件
小李不想当小白2 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
朝发如雪3 小时前
快速掌握单片机基础(6)(数据处理与传送指令)(跳转与分支指令)(栈操作与混合编程)(程序状态寄存器操作指令)(内存映射)
单片机·arm
blue_ice .3 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
深圳市恒锐丰科技杨生3 小时前
EG4318 / EG4319 / EG4320 铅酸电池三段式充电副边管理芯片|屹晶 EGmicro
嵌入式硬件·硬件工程
深圳市恒锐丰科技杨生3 小时前
EG1253 电流模式 PWM 控制器|屹晶 EGmicro
嵌入式硬件·硬件工程
远翔调光芯片^138287988723 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
时空自由民.4 小时前
WSL解决USB 串口连接问题与linux串口权限问题
linux·单片机
飞睿科技7 小时前
从一颗雷达芯片到一台生命体征仪:飞睿 UWB 雷达的“一芯两用”
嵌入式硬件·物联网·uwb