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

继续进行点灯,今天来点简单的,红蓝双色爆闪灯,上电即可爆闪,红色接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*/

相关推荐
西城微科方案开发11 小时前
华润微CS98P370D2L:高性价比低功耗8位MCU
单片机·嵌入式硬件
时光の尘12 小时前
【嵌入式大厂面经】·CAN总线常见考点(持续更新中···)
stm32·单片机·mcu·物联网·can·ack
小叮当⇔12 小时前
系统认为 “从网络 / AI 生成的文件” 不安全,禁止预览但允许手动打开
嵌入式硬件
国科安芯13 小时前
空间辐射环境下电机伺服系统的抗扰动控制:AS32S601 抗辐射 MCU 在航天机电执行机构中的多场景应用与可靠性评估
单片机·嵌入式硬件·mcu·cocos2d·risc-v
国科安芯14 小时前
AS32S601 抗辐射 MCU 在星载高速光通信链路的集成设计与性能验证
网络·单片机·嵌入式硬件·risc-v·安全性测试
行者将至X14 小时前
第一篇:RA-ECO-RA4M2 开发板开箱与开发环境体验评测
单片机·嵌入式硬件
染予14 小时前
将星历算法移植到stm32F427要面临的问题
stm32·单片机·嵌入式硬件
山木嵌入式15 小时前
零基础入门单片机:从核心组成到最小系统全解析
单片机·最小系统·单片机入门
笨笨饿15 小时前
80_聊聊SPI以及它们的变体
linux·c语言·网络·stm32·单片机·算法·个人开发
嵌入式×边缘AI:打怪升级日志16 小时前
单片机八股文(面向中小厂实习)
单片机·嵌入式硬件