STM32记录按键时刻输出Excel文件到SDFlash

一、模拟时钟:

定义变量: uint16_t hour = 10;

uint16_t min = 14;

uint16_t sec = 15;

分别存放时分秒,初始化,并做外部声明,供其他函数使用;

初始化定时器TIM7,开启中断,配置为1S进一次中断:

在中断服务函数中对时间变量进行模拟时钟计时,完成模拟时钟;

二、外部中断按键检测:

开启外部中断后,检测四个按键状态

检测到对应按键按下后,将键值赋值给cmd (cmd已做extern 声明);

按键1按下则赋值1,以此类推。

三、将对应键值及按键时刻输出Excel文件到SDFlash:

Excel文件输出函数:key为调用时处理函数传入的键值;

将按键键值及按键时刻输出到同一文件KEY Pressed Time.xls;

输出格式为:按键x按下,时间:10:14:00;

Result为输出结果判断变量,等于0即成功,等于0输出ok;

 

主函数:

主函数处理函数DemoEXCEL:

Cmd初始值为0,

检测到不为0时(即外部中断服务函数中赋按键值之后),输出当前键值和按键时刻到Excel文件;完成要求。

四、运行结果:

按下如下按键1224313411,串口输出如下:

生成的Excel文件内容如下:

结果与预期结果相同,程序正确。

 

 

 

您可以使用定时器中断来实现倒计时。首先,您需要设置一个计时器,在每个计时器溢出时,触发一个中断。然后,您需要在中断服务程序中更新倒计时值,并检查是否已经达到了0,如果达到了0,则停止计时器。在此过程中,您需要检测按键输入并记录按键的时间,以便在倒计时期间检查是否按下了按键。以下是一个示例代码: ```c #include <reg51.h> #define TIMER0_RELOAD_VALUE 65536-50000 // 50ms sbit KEY = P1^0; unsigned int count_down_value = 10000; // 10s unsigned int key_press_time = 0; unsigned char timer0_interrupt_count = 0; void timer0_isr(void) interrupt 1 { TH0 = TIMER0_RELOAD_VALUE / 256; TL0 = TIMER0_RELOAD_VALUE % 256; timer0_interrupt_count++; if (timer0_interrupt_count >= 20) { // 1s timer0_interrupt_count = 0; count_down_value--; if (count_down_value == 0) { TR0 = 0; // stop timer } } } void main() { TMOD = 0x01; // timer0 mode1 TH0 = TIMER0_RELOAD_VALUE / 256; TL0 = TIMER0_RELOAD_VALUE % 256; ET0 = 1; // enable timer0 interrupt EA = 1; // enable interrupts TR0 = 1; // start timer0 while (1) { if (KEY == 0) { key_press_time++; } else { if (key_press_time > 0 && key_press_time < 10) { // less than 500ms count_down_value += key_press_time * 100; } key_press_time = 0; } } } ``` 在这个示例代码中,我们使用定时器0来计时,每50ms触发一次中断。我们使用一个计数器`timer0_interrupt_count`来记录中断的次数,当中断次数达到20时(即1s),我们更新倒计时值。按下按键时,我们记录按键的时间,当松开按键时,如果按键时间小于500ms,我们将按键时间乘以100并加到倒计时值中。请注意,此示例代码仅用于演示目的,您需要根据自己的需求进行适当修改。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值