单片机LCD1602随机乘法口诀显示
时间: 2023-09-03 19:07:04 浏览: 61
以下是基于51单片机和LCD1602的随机乘法口诀显示程序:
```C
#include <reg51.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "lcd1602.h"
void init_rand(void);
unsigned char get_rand(void);
void delay_ms(unsigned int ms);
void show_multiplication(void);
unsigned char rand_seed;
void main(void)
{
lcd_init(); // 初始化LCD1602
init_rand(); // 初始化随机数种子
while (1)
{
show_multiplication(); // 显示随机的乘法口诀
delay_ms(2000); // 延时2秒
lcd_clear(); // 清屏
}
}
// 初始化随机数种子
void init_rand(void)
{
rand_seed = 0x5a;
}
// 生成随机数
unsigned char get_rand(void)
{
rand_seed = rand_seed * 1103515245 + 12345;
return rand_seed >> 8;
}
// 延时函数
void delay_ms(unsigned int ms)
{
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
// 显示随机的乘法口诀
void show_multiplication(void)
{
unsigned char a, b, result;
char str[16];
// 生成两个随机数
a = get_rand() % 9 + 1;
b = get_rand() % 9 + 1;
// 计算结果
result = a * b;
// 显示乘法口诀
sprintf(str, "%d x %d = ?", a, b);
lcd_write_string(0, 0, str);
// 等待用户输入答案
while (1)
{
sprintf(str, "%d", result);
if (!strcmp(lcd_read_string(0, 11, 1), str))
{
lcd_write_string(0, 12, "OK");
break;
}
delay_ms(50);
}
}
```
程序的主要思路是每次生成两个随机数,然后计算它们的乘积,并将乘法口诀显示在LCD1602上。接着等待用户输入答案,直到用户输入正确的答案,程序才会继续下一轮的随机乘法口诀显示。