利用矩阵式键盘,设计一个10以内数的阶乘计算器,计算结果用六位数码管显示?

 我来答
templar_1
2023-04-14 · 贡献了超过295个回答
知道答主
回答量:295
采纳率:75%
帮助的人:7.9万
展开全部

首先,我们需要选择一种合适的单片机进行编程。在本例中,我们可以选择AT89S52单片机作为主控芯片。

接下来,我们需要设计电路图并进行硬件搭建。按照题目要求,我们需要使用矩阵式键盘和六位数码管。可通过链接进行查看:

https://www.easyeda.com/claraliu/matrix-keyboard-and-6-digit-display

接下来,我们需要编写程序实现阶乘计算功能并将结果显示在六位数码管上。以下是具体的程序实现方式:

  1. 首先定义一个用于保存输入数字的变量,并初始化为0;另外还需要定义一个用于保存阶乘结果的变量。

2.然后通过键盘读取用户输入的数字,并进行判断是否小于等于10。如果不是,提示用户重新输入。

3.接着,通过一个循环语句计算出所输入数字的阶乘,并将结果保存到之前定义的结果变量中。

4.最后,将计算出的阶乘结果转换为六位十进制数,并通过数码管进行显示。

以下是完整程序的示例:

#include <reg52.h> // 包含AT89S52头文件

#define uchar unsigned char // 定义uchar类型

#define uint unsigned int // 定义uint类型

sbit LSA = P2^2; // 设置LSA-P2.2引脚

sbit LSB = P2^3; // 设置LSB-P2.3引脚

sbit LSC = P2^4; // 设置LSC-P2.4引脚

uchar code table[]={ // 建立表格实现数码管显示

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0xbf,0xff,

0x88,0x83,0xc6,0xa1};

void delay(uint i) // 延时函数

{

while(i--);

}

void Display(uchar FirstBit,uchar Num) // 数码管显示函数

{

LSA=FirstBit; // 选择哪一位数码管

P0=table[Num]; // 显示数字

delay(100); // 延时一段时间

P0=0xff; // 关闭数码管

}

void main()

{

uchar input_num = 0; // 输入的数字

uint result = 1; // 阶乘结果

uchar i; // 循环计数器

while(1)

{

P1 = 0xf0;

if(P1 != 0xf0) // 如果有键按下

{

delay(1000); // 延时去抖

if(P1 != 0xf0) // 确认是否有键按下

{

switch(P1) // 判断按下的是哪个键

{

case 0x7f: input_num = 1;break;

case 0xbf: input_num = 2;break;

case 0xdf: input_num = 3;break;

case 0xef: input_num = 10;break;

}

break; // 跳出while循环

}

}

}

if(input_num != 0 && input_num <= 10) // 判断输入的数字是否符合要求

{

for(i = 1; i <= input_num; i++) // 计算阶乘

{

result *= i;

}

}

else

{

P1 = 0xfe;

Display(0,result/100000); // 显示结果

Display(1,(result%100000)/10000);

Display(2,(result%10000)/1000);

Display(3,(result%1000)/100);

Display(4,(result%100)/10);

Display(5,result%10);

}

最后,我们需要将程序下载到单片机中,并将硬件连接好。这样,当用户输入一个1-10之间的数字时,该计算器就会

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式