2024-09-01
售卖作品
00

目录

20 以内加减法训练机
简介
功能特性
硬件设计
硬件组成
电路连接
软件设计
延时函数
显示屏控制
矩阵键盘控制
程序流程
结论

题目 3 :20 以内加减法训练机

基于单片机实现 20 以内整数加减法训练,要求具有加法、减法(结果不出现负数)、加

减法三种训练模式,每次训练随机产生题目。

可以选择每次训练题目的数目,可分为每组 5 题、10 题、15 题目三档。可自动判断对

错并在完成每组题目后给出做正确的次数。要求具有较好的人机交互界面,用户体验好。

具体要求如下:

(1)具有加法、减法、减法混合三种训练模式。

(2)可以选择答题数量(分 5 题、10 题、15 题三档)

(3)在某种训练模式下,可随机产生题目,用户根据提示输入计算结果,机器自动判

断是否正确。

(4)答完一组题目后,可以显示答题正确的次数,当全部答对时,要有祝贺提示(如

屏幕闪烁,LED 闪烁等)

在这里插入图片描述

20 以内加减法训练机

简介

在本文中,我们将介绍一款基于单片机实现的20以内加减法训练机。这款设备旨在帮助用户练习20以内的整数加减法,通过具有良好的人机交互界面和用户体验,使训练过程变得更加有趣和高效。

功能特性

该训练机具有以下功能特性:

  1. 多种训练模式:支持加法、减法和加减法混合三种训练模式。

  2. 题目数量选择:用户可以选择每次训练的题目数量,分为5题、10题和15题三档。

  3. 自动判断对错:机器可以自动判断用户的回答是否正确,并在完成每组题目后给出正确答案的数量。

  4. 答对提示:当用户答对全部题目时,屏幕和LED会闪烁表示祝贺。

硬件设计

硬件组成

  1. 单片机:使用M16单片机作为主控芯片,8MHz晶振。

  2. 显示屏:1602 LCD显示屏用于显示题目和结果。

  3. 矩阵键盘:用于用户输入答案。

电路连接

  1. 将1602 LCD显示屏的各个引脚与单片机的相应IO口连接,初始化显示屏的IO口。

  2. 矩阵键盘的引脚与单片机的IO口连接,用于检测用户输入的按键。

软件设计

延时函数

为了确保系统的稳定性,我们定义了一些延时函数,用于在不同操作之间引入适当的延时:

c
void delay_1us(void) { asm ("nop"); asm ("nop"); asm ("nop"); asm ("nop"); asm ("nop"); asm ("nop"); } void delay_3us(void) { for (int i = 0; i < 3; i++) { delay_1us(); } } void delay_10us(void) { for (int i = 0; i < 10; i++) { delay_1us(); } } void delay_100us(void) { for (int i = 0; i < 100; i++) { delay_1us(); } } void delay_1ms(void) { for (int i = 0; i < 1000; i++) { delay_1us(); } } void delay_nms(unsigned int nms) { while (nms--) { delay_1ms(); } }

显示屏控制

显示屏的初始化和数据写入函数:

c
void initLcd1602IO() { DDRC = 0xFF; PORTA = 0xFF; DDRA = 0xFF; } void LCD_write_com(unsigned char com) { RS_CLR; RW_CLR; EN_SET; LCDIO = com; delay_nms(1); EN_CLR; } void LCD_write_data(unsigned char data) { RS_SET; RW_CLR; EN_SET; LCDIO = data; delay_nms(1); EN_CLR; } void LCD_clear(void) { LCD_write_com(0x01); delay_nms(5); } void LCD_write_str(unsigned char x, unsigned char y, unsigned char *s) { if (y == 0) { LCD_write_com(0x80 + x); } else { LCD_write_com(0xC0 + x); } while (*s) { LCD_write_data(*s); s++; } } void LCD_init(void) { initLcd1602IO(); DDRC |= (1 << PC5) | (1 << PC6) | (1 << PC7); LCD_write_com(0x38); delay_nms(5); LCD_write_com(0x08); delay_nms(5); LCD_write_com(0x01); delay_nms(5); LCD_write_com(0x06); delay_nms(5); LCD_write_com(0x0C); delay_nms(5); LCD_clear(); }

矩阵键盘控制

矩阵键盘的按键检测函数:

c
unsigned char getkey(void) { unsigned char statevalue, key_checkin, key_check; unsigned char key; key_io = 0xf0; key_io = 0xf0; key_checkin = key_ior; if (key_checkin != 0xf0) { delay_nms(10); key_checkin = key_ior; if (key_checkin != 0xf0) { key_io = 0xfe; key_io = 0xfe; key_check = key_ior; switch (key_check) { case 0xee: key = 16; break; case 0xde: key = 12; break; case 0xbe: key = 8; break; case 0x7e: key = 4; break; } key_io = 0xfd; key_io = 0xfd; key_check = key_ior; switch (key_check) { case 0xed: key = 15; break; case 0xdd: key = 11; break; case 0xbd: key = 7; break; case 0x7d: key = 3; break; } key_io = 0xfb; key_io = 0xfb; key_check = key_ior; switch (key_check) { case 0xeb: key = 14; break; case 0xdb: key = 10; break; case 0xbb: key = 6; break; case 0x7b: key = 2; break; } key_io = 0xf7; key_io = 0xf7; key_check = key_ior; switch (key_check) { case 0xe7: key = 13; break; case 0xd7: key = 9; break; case 0xb7: key = 5; break; case 0x77: key = 1; break; } } } else { key = 20; } return key; }

程序流程

  1. 初始化显示屏和键盘

    • 调用LCD_init函数初始化显示屏。

    • 配置矩阵键盘的IO口。

  2. 模式选择

    • 用户通过矩阵键盘选择训练模式(加法、减法或混合模式)。
  3. 题目数量选择

    • 用户选择每次训练的题目数量(5题、10题或15题)。
  4. 题目生成和回答

    • 根据选择的模式,生成随机题目。

    • 用户通过键盘输入答案,系统自动判断答案是否正确。

  5. 结果反馈

    • 完成一组题目后,显示正确答案的数量。

    • 如果全部答对,显示祝贺提示。

结论

这款基于单片机的20以内加减法训练机,通过简单易用的硬件设计和高效的软件流程,提供了一个优秀的练习平台。不仅适用于儿童的数学训练,也可以作为单片机应用的学习案例。希望这篇博客能够帮助大家了解并实现这个有趣的项目。

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!