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

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

相关推荐
DIY机器人工房4 小时前
(十三)嵌入式面试题收集:6道
单片机·嵌入式硬件·diy机器人工房
国科安芯4 小时前
国产RISC-V架构MCU在工控系统中的节能性分析
网络·单片机·嵌入式硬件·fpga开发·性能优化·架构·risc-v
夜月yeyue5 小时前
Linux内高端内存
linux·运维·单片机·嵌入式硬件·ci/cd·硬件架构
沉在嵌入式的鱼8 小时前
linux串口对0X0D、0X0A等特殊字符的处理
linux·stm32·单片机·特殊字符·串口配置
学习路上_write8 小时前
AD5293驱动学习
c语言·单片机·嵌入式硬件·学习
影阴9 小时前
存储器和寄存器
stm32·单片机·嵌入式硬件
吃西瓜的年年10 小时前
3. C语言核心语法2
c语言·嵌入式硬件·改行学it
李洛克0710 小时前
RDMA CM UDP 通信完整指南
单片机·网络协议·udp
思茂信息10 小时前
CST电动车EMC仿真——电机控制器MCU滤波仿真
javascript·单片机·嵌入式硬件·cst·电磁仿真
小曹要微笑11 小时前
I2C总线技术解析(纯文字版)
单片机·嵌入式硬件·esp32·iic