C51单片机用随机函数随机生成被乘数与乘数,每按下一次K1键时会模拟显示一道10以内的乖法口诀,第1、3位数码管显示被乘数与乘数,第4位数码管显示“=”号,第5、6位数码管显示乘积。
时间: 2023-12-11 16:02:50 浏览: 78
单片机C语言程序设计07 数码管随机模拟显示乘法口诀(基于8051+Proteus仿真)
5星 · 资源好评率100%
好的,以下是符合您要求的C51单片机代码,可以使用KEIL C51编译器进行编译:
```
#include <reg52.h>
#include <stdlib.h>
#include <time.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2; //数码管选择端口LSA
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code dofly_DuanMa[17]={ //共阳数码管0-F显示段码值
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xC6,0xA1,0x86,0x8E,0xFF,0x00
};
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Display(uint num) //数码管显示函数
{
uchar ge,shi,bai,qian; //定义千百十个变量
qian=num/1000; //提取千位
bai=num%1000/100; //提取百位
shi=num%100/10; //提取十位
ge=num%10; //提取个位
LSA=0; //以下4行代码,选中第0位数码管
P0=dofly_DuanMa[qian]; //发送千位数字段码值
delay(100); //延时
LSA=1; //关闭当前数码管
LSB=0; //以下4行代码,选中第1位数码管
P0=dofly_DuanMa[bai]; //发送百位数字段码值
delay(100); //延时
LSB=1; //关闭当前数码管
LSC=0; //以下4行代码,选中第2位数码管
P0=dofly_DuanMa[shi]; //发送十位数字段码值
delay(100); //延时
LSC=1; //关闭当前数码管
LSA=0; //以下4行代码,选中第3位数码管
P0=dofly_DuanMa[ge]; //发送个位数字段码值
delay(100); //延时
LSA=1; //关闭当前数码管
}
void main()
{
uint a, b, c;
srand(time(0)); //初始化随机种子
while(1)
{
if (P3_0 == 0) //检测K1按键是否按下
{
delay(50); //消除按键抖动
if (P3_0 == 0)
{
a = rand() % 10; //生成0-9之间的随机数
b = rand() % 10;
c = a * b;
Display(a * 100 + b * 10); //显示被乘数和乘数
P0 = dofly_DuanMa[16]; //显示等号
delay(1000);
Display(c); //显示乘积
delay(2000);
}
while (P3_0 == 0); //等待按键释放
}
}
}
```
这个代码会随机生成两个0-9之间的数字,然后计算它们的积,并在5位共阳数码管上模拟显示乘法口诀。当按下K1键时,会生成一个新的10以内的乘法口诀,并在数码管上显示。第1、3位数码管显示被乘数与乘数,第4位数码管显示“=”号,第5、6位数码管显示乘积。每次循环会有2秒的延迟,等待下一次按键触发。
阅读全文