任务描述:
使用定时器中断实现数码管数值从10到0 步长为一递减
资源使用,定时器,GPIO
硬件原理
数码管工作原理:
`led数码管`(LED Segment Displays)由多个[发光二极管]封装在一起组成 `“8”字型`的器件,引线已在内部连接完成,
只需引出它们的各个笔划,`公共电极`。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母 `a,b,c,d,e,f,g,dp`来表示。——百度百科

原理图

接线图
Sysconfig配置引脚与TIMER


TIME0 中断
int TimerCnt,TmpVal;
void TIMER_0_INST_IRQHandler(void)
{
switch (DL_Timer_getPendingInterrupt(TIMER_0_INST))
{
case DL_TIMER_IIDX_ZERO:
TimerCnt++;
if (TimerCnt >= 100)
{
TimerCnt = 0;
TmpVal--;
if (TmpVal < 0)
{
TmpVal = 10;
}
}
break;
default:
break;
}
}数码管显示函数
void Disp_Data(uint16_t dataH, uint16_t dataL)
{
uint16_t tempH, tempL;
uint8_t num_q, num_b, num_s, num_g;
tempL = dataL;
num_q = tempL / 1000;
num_b = tempL / 100 % 10;
num_s = tempL / 10 % 10;
num_g = tempL % 10;
HC595_SEND_DATA(Disp_DX[num_q], 3);
HC595_SEND_DATA(Disp_DX[num_b], 2);
HC595_SEND_DATA(Disp_DX[num_s], 1);
HC595_SEND_DATA(Disp_DX[num_g], 0);
tempH = dataH;
num_q = tempH / 1000;
num_b = tempH / 100 % 10;
num_s = tempH / 10 % 10;
num_g = tempH % 10;
HC595_SEND_DATA(Disp_DX[num_q], 7);
HC595_SEND_DATA(Disp_DX[num_b], 6);
HC595_SEND_DATA(Disp_DX[num_s], 5);
HC595_SEND_DATA(Disp_DX[num_g], 4);
}主函数
int main(void)
{
SYSCFG_DL_init();
uint16_t i=0,j=0;
uint8_t val=0;
TmpVal = 10;
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
DL_TimerG_startCounter(TIMER_0_INST);
while (1) {
Disp_Data(0,TmpVal);
}
}实际测试效果



我要赚赏金
