用kill5写这个代码:秒表系统设计:设计个2位LED数码显示秒表”,显示时间为00一99秒,每秒自动加,另设让一个“开始暂停按键”(按一次开始计时,再按一次停止计时)和一个“复位”键
时间: 2024-03-18 14:38:31 浏览: 21
好的,以下是基于kill5的秒表系统设计代码:
```c
// 引入头文件
#include <kill5.h>
// 定义端口
#define LED_PORT PORTC
#define LED_DDR DDRC
#define KEY_PORT PORTB
#define KEY_DDR DDRB
#define KEY_PIN PINB
// 定义LED数码管显示字符
uint8_t LED_Num[10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
// 定义变量
uint8_t sec1 = 0; // 个位秒
uint8_t sec2 = 0; // 十位秒
uint8_t running = 0; // 计时器是否运行
uint8_t reset = 0; // 是否复位
// 初始化函数
void init() {
// 设置端口方向
LED_DDR = 0xFF; // 输出模式
KEY_DDR = 0x0F; // 输入模式
// 初始化端口状态
LED_PORT = 0xFF; // 数码管关闭
KEY_PORT = 0xFF; // 按键上拉
}
// 显示函数
void display() {
LED_PORT = LED_Num[sec1]; // 显示个位秒
KEY_PORT = ~(1 << 0); // 打开个位秒数码管
_delay_ms(5); // 延时
LED_PORT = LED_Num[sec2]; // 显示十位秒
KEY_PORT = ~(1 << 1); // 打开十位秒数码管
_delay_ms(5); // 延时
}
// 计时函数
void timer() {
if (running) { // 计时器运行
sec1++; // 秒数加1
if (sec1 == 10) { // 个位秒达到10
sec1 = 0; // 个位秒清零
sec2++; // 十位秒加1
if (sec2 == 10) { // 十位秒达到10
sec2 = 0; // 十位秒清零
}
}
}
}
// 按键扫描函数
void key_scan() {
static uint8_t key1_down = 0; // 记录按键1是否按下
static uint8_t key2_down = 0; // 记录按键2是否按下
static uint8_t key3_down = 0; // 记录按键3是否按下
if (!(KEY_PIN & (1 << 0))) { // 按键1按下
if (!key1_down) { // 按键1之前未按下
running = !running; // 计时器状态取反
key1_down = 1; // 记录按键1已按下
}
} else {
key1_down = 0; // 记录按键1未按下
}
if (!(KEY_PIN & (1 << 1))) { // 按键2按下
if (!key2_down) { // 按键2之前未按下
reset = 1; // 标记复位
key2_down = 1; // 记录按键2已按下
}
} else {
key2_down = 0; // 记录按键2未按下
}
if (!(KEY_PIN & (1 << 2))) { // 按键3按下
if (!key3_down) { // 按键3之前未按下
running = 0; // 停止计时器
sec1 = 0; // 秒数清零
sec2 = 0; // 秒数清零
reset = 0; // 取消复位标记
key3_down = 1; // 记录按键3已按下
}
} else {
key3_down = 0; // 记录按键3未按下
}
}
// 主函数
int main() {
init(); // 初始化
while (1) { // 无限循环
display(); // 显示
timer(); // 计时
key_scan(); // 按键扫描
if (reset) { // 复位
sec1 = 0; // 秒数清零
sec2 = 0; // 秒数清零
reset = 0; // 取消复位标记
}
}
return 0;
}
```
注意事项:在编写代码时应注意kill5的语法和函数调用方式,保证程序正确性。同时,需要注意数码管的驱动方式和连接方式,保证数码管正常工作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)