一起玩转TI MSPM0系列 任务二:用定时器实现数码管从10到0的递减
驱动硬件前都要学习、理解目标硬件的驱动原理、与找到正确的原理图,确认IO、供电电压等信息后,才可以开始。
1、确认硬件

相似数码管模块原理图,元器件相同,但是与我们手上的实物不同。
由于74HC595是颗经典的老芯片,由很多制造商,不同厂商的引脚命名会有所不同,对照其他规格书后,确认SH_CP对应SCLK,,ST_CP对应RCLK。
数码管的可以理解为灯箱,由多个LED组成,按照共阴 或 共阳连接的不同,输出高低电平就可以点亮或者熄灭。
2、驱动原理
74HC595是一个串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在RCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。

总的来说:
SH_CP(SCLK)模拟时钟,DS在上升沿写数据,ST_CP(RCLK)拉高就是应用数据,点亮、熄灭对应数码管。
3、测试代码
①发送数据代码:
void HC595_WriteData(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++){
if(data & 0x80){
HC595_DAT(1);
}else{
HC595_DAT(0);
}
data <<= 1;
HC595_CLK(0);
delay_cycles(32);
HC595_CLK(1);
delay_cycles(32);
}
}0x80二进制数:10000000,再加上左移一位,就可以理解为,每次取最高位的0/1,按照0/1输出高/低电平。并且不断的以1微秒的间隔高低翻转SCLK,等待下次数据的位移,取值,控制DS脚输出。
②应用数据代码:
void Display_0ut()
{
HC595_RCK(0);
delay_cycles(32);
HC595_RCK(1);
delay_cycles(32);
}在数据发送完成后,实现拉高RCLK,应用数据功能。
③显示数字接口:
void HC595_Send_Data(uint8_t dis_num,uint8_t dis_bit)
{
HC595_WriteData(dis_num);
HC595_WriteData(1<<dis_bit);
Display_0ut();
}除了发送数据、应用数据接口外,还有一个“HC595_WriteData(1<<dis_bit);”命令是利用74HC595的特性,当8位数据写满后在发送数据就会传递到下一组数据上的特性,实现了切换显示位置的功能。
以上就完成了数码管数据的显示。
4、任务实现
4.1、配置定时器
如上图,选择客户配置、选择系统主时钟(32M),分频系数8,预分频256,向下计数,配置定时时间位1秒,使能定时器。
如上图,选择客户配置、选择系统主时钟(32M),分频系数8,预分频256,向下计数,配置定时时间位1秒,使能定时器。
4.2、测试代码
定时器回调函数
void TIMER_0_INST_IRQHandler(void)
{
switch(DL_TimerG_getPendingInterrupt(TIMER_0_INST)){
case DL_TIMER_IIDX_ZERO:{
realTemp--;
}break;
default:
break;
}
}定时器回调中,不断递减该变量,实现倒计时。
以上任务2完成!
我要赚赏金
