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

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

相关推荐
飞凌嵌入式1 天前
【玩转多核异构】T153核心板RISC-V核的实时性应用解析
linux·嵌入式硬件·嵌入式·risc-v
怎么就重名了1 天前
STM32+蓝牙模块+超声波模块+QT
stm32·嵌入式硬件·qt
oshan20121 天前
小华HC32L136K8TA 单片机新建 MDK5 工程模板(二)
单片机·嵌入式硬件
三品吉他手会点灯1 天前
STM32F103学习笔记-16-RCC(第4节)-使用 HSI 配置系统时钟并用 MCO 监控系统时钟
笔记·stm32·单片机·嵌入式硬件·学习
Lester_11011 天前
嵌入式学习笔记 - 关于看门狗定时器的喂狗的操作放在中断还是放在主循环
笔记·单片机·学习
bai5459361 天前
LED闪烁功能代码详解
单片机·嵌入式硬件
吃货界的硬件攻城狮1 天前
【STM32】低功耗模式下的IO配置详解(标准库实现)
stm32·单片机·嵌入式硬件
DIY机器人工房1 天前
嵌入式面试题:物联网协议怎么选?Zigbee/蓝牙/LoRa/4G/WiFi优缺点一文读懂
stm32·嵌入式硬件·嵌入式·diy机器人工房·嵌入式面试题
ivy159868377151 天前
JM20329是一款高性能、低功耗的USB桥接芯片,实现串行接口(如SATA、IDE)与USB接口之间的数据转换。
c语言·开发语言·ide·嵌入式硬件·eureka·音视频·视频编解码
星辰pid1 天前
stm32基于两个SI24R1(NRF24L01)的遥控控制原理(可移植diy遥控小车)
stm32·单片机·嵌入式硬件