利用矩阵式键盘,设计一个10以内数的阶乘计算器,计算结果用六位数码管显示?
首先,我们需要选择一种合适的单片机进行编程。在本例中,我们可以选择AT89S52单片机作为主控芯片。
接下来,我们需要设计电路图并进行硬件搭建。按照题目要求,我们需要使用矩阵式键盘和六位数码管。可通过链接进行查看:
https://www.easyeda.com/claraliu/matrix-keyboard-and-6-digit-display
接下来,我们需要编写程序实现阶乘计算功能并将结果显示在六位数码管上。以下是具体的程序实现方式:
首先定义一个用于保存输入数字的变量,并初始化为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之间的数字时,该计算器就会