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

www.zhiqu.org     时间: 2024-06-01

首先,我们需要选择一种合适的单片机进行编程。在本例中,我们可以选择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之间的数字时,该计算器就会



~


#糜香裕# vb 实现阶乘运算,算出1 - - 10的阶乘 -
(13337081964): Function Factor(ByVal n As Integer) As Long Select Case n Case 0, 1 Factor = n Case Else Factor = Factor(n - 1) * n End Select End Function

#糜香裕# 设计一个算法,通过键盘输入一个正整数,计算它的阶乘.java入门根本不懂! -
(13337081964): if(n > 0){ int mul = 1 ; for(int i = 1 ; i <= n ; i ++){ mul = mul * i ; } } n是输入的值,mul是阶乘最后的结果. 冒泡排序法,你可以看看,for循环必学的.

#糜香裕# 编写一个JAVA程序,从键盘输入一个数,计算阶乘.如输入:3,则输出1!+2!+3! -
(13337081964): package com; import java.util.Scanner; public class Help { public static void main(String[] args) { System.out.println("请输入一个一个整数:"); Scanner input=new Scanner(System.in); int a=input.nextInt(); int result=jie(a); System.out....

#糜香裕# 请高手帮我用c#编写一个计算阶乘的计算器 -
(13337081964): private void bn_Click(object sender, EventArgs e) { try { va.Text = txtnum.Text; Operator.Text = "n!"; int sum = 1; for (int i = Convert.ToInt32(txtnum.Text); i > 0; i--) sum *= i; txtnum.Text = sum.ToString(); } catch { txtnum.Text = "error"; } } 有什么不会追问,希望可以帮到楼主

#糜香裕# 求.用89C51单片机设计4*4矩阵式键盘计算器程序 -
(13337081964): /*我写的这个计算器可以算255范围以内的整数计算,本打算再加入小数与做最后的处理工作.可是又太费时间,所以就放那里了.看见了你的提问,也懒得改一改,你看看能不能用.*/ #include<reg51.h> unsigned char Line,Row,Val; void delay(...

#糜香裕# 设计一个简单的计算器. -
(13337081964): 给你这个你应该就会全部了 #include <stdio.h>//===========================================调用阶乘算法============= long keven(int n) { if (n<0) printf("输入错误!"); //a=-1; else if (n==0) return 1 ; else return n*keven(n-1); ...

#糜香裕# 求大神给一个C语言的程序代码做简易计算器? -
(13337081964): 更好看的代码 #include <stdio.h> #include <math.h> double sum(double a, double b) { return a + b; } double minu(double a, double b) { return a - b; } double mult(double a, double b) { return a * b; } double div(double a, double b) { return a / b; } int mod...

#糜香裕# 用matlab语言编写程序:编写一个计算阶乘的函数,再编写一个脚本文件,通过键盘输入计算阶乘的n值. -
(13337081964): hs_fun.m function fx=hs_fun(x) if x>=100 exit end prd=1; for k=1:x prd=prd*k; end prd >> hs_fun(5) prd = 120

#糜香裕# 用VC++做科学计算器时怎样实现阶乘 -
(13337081964): #includeusing namespace std; double fac(int n) { double f; if(n<0) cout <<"n else if (n==0) f=1; else f=fac(n-1)*n; return f; } void main() { while(1) { cout <<"请输入要进行阶乘的数"< int n; cin>>n; cout <<<"!="<< cout <<"如果想退出计算,请输入q,否则按任意键,继续计算"; char c; cin >>c; if (c=='q') break; } }

#糜香裕# 用C语言设计程序
(13337081964): (一) #include stadio< > void main {int n; int s; if(n=0,n<=10,n++) s=s*n:} printf(%d/n,s)