一起玩转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完成!