利用矩阵式键盘,设计一个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之间的数字时,该计算器就会
矩阵键盘矩阵式键盘的结构与工作原理
当键盘上的按键数量众多时,为了节省I\/O口资源,通常采用矩阵式设计,如图1所示。这种设计的特点是,每行和每列的导线在交叉点并不直接相连,而是通过一个按键作为中继。例如,一个4*4的矩阵键盘只需要一个端口(如P1口),相比于直接使用端口线,能提供16个按键,而如果直接使用,只能增加一个按键(...
利用矩阵式键盘,设计一个10以内数的阶乘计算器,计算结果用六位数码管...
首先,我们需要选择一种合适的单片机进行编程。在本例中,我们可以选择AT89S52单片机作为主控芯片。接下来,我们需要设计电路图并进行硬件搭建。按照题目要求,我们需要使用矩阵式键盘和六位数码管。可通过链接进行查看:https:\/\/www.easyeda.com\/claraliu\/matrix-keyboard-and-6-digit-display 接下来,我们需...
为什么通常将键盘的按键排列成矩阵形式?
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4×4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成4×5=20个键的键盘,而直接用端口线则只能多出1个键(9键)。...
设计一个3 行×4列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能...
void delay_50us(uint t); \/\/延时50微秒,防抖动 uchar keyscan(void); \/\/键盘 void SYS_LED(void); \/\/指示灯 uchar a=0;uchar keynum;void delay_50us(uint t){ uchar j;for(;t>0;t--)for(j=19;j>0;j--);} void SYS_LED(){ SYSLED = 0;delay_50us(100);SYSLE...
单片机汇编矩阵键盘实验(扫描法)
思路一首先通常想到的可能是下面这样的设计:上图形式的按键就是我们通常说的行列式按键,它的驱动思路是这样的:1. 对IO1、2、3配置为推挽输出,依次只让其中一个输出为0其他输出为1。2. 对IO4、5进行读操作,根据读出的结果判断哪个按键按下。例如:配置IO1、2、3为011,读IO4、5,若IO4为0...
单片机与矩阵键盘接口电路设计实验报告
单片机与矩阵键盘接口电路设计实验报告姓名:林蔼龄学号:1060601007班级:10级物理系电子信息工程A班单片机与矩阵键盘接口电路设计实验报告一:实验内容使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4位的4条端口线定义为列线,形成4*4键盘,可以配置16个按键,将...
用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的
;键盘扫描子程序WAIT: MOV P1,#0FFH ;P1口送高电平 CLR P1.0 ;第一行清零 MOV A,P1 ;读P1口 ANL A,#0F0H ;低位屏蔽 XRL A,#0F0H ;判断低位是否有低电平 ,即判断是否有按键按下 JZ NOKEY1 ;地位有低电平继续扫描,否者跳到第而行去扫描 LCALL DELY10ms ;延时10ms去抖在进行判断是否有按键按下 ...
通过单片机外接一个4*4矩阵键盘,设置“0-9”启动”10个按键,进行30秒倒...
1.编码按钮分别为0,1,2,……,9十个按键:可以用矩阵键盘实现,2.用发光二极管作为输出指示灯,灯亮代表锁“开”,灯灭代表锁“不开”,用一个IO口,接上二极管,接上限流电阻,接地。密码正确,另该IO口值为1,否则为0;3.设置开锁密码,并按此密码设计电路。密码可以是0~9十位数。若按...
矩阵键盘矩阵式键盘的按键识别方法
矩阵键盘的按键识别方法通常采用两种策略:行扫描法和高低电平翻转法。1. 行扫描法:这是最常见的识别方法。首先,将所有行线(如Y0-Y3)置低电平,检查列线状态。若有一列变为低电平,则说明有键按下,其位置在该列线与4个行线交叉的按键中。如果所有列线都保持高电平,则无键按下。接着,逐行...
单片机8255矩阵式键盘接口电路设计 完整电路设计及程序代码。_百度知 ...
用bdata定义一个变量 unsigned char bdata key;sbit k1=key^4;sbit k2=key^5;sbit k1=key^6;sbit k4=key^7;然后就跟普通矩阵键盘一样了 只是要不停的刷新数据。define PA_Addr 0x0000 key=XBYTE[PA_Addr];\/\/读取8255PA口数据 XBYTE[PA_Addr]=key;\/\/写8255PA口 ...
宿保欧贝: 恩,基本思路是对应数字进行操作,记录位数进入的先后,最后确定以后整合起来
邯郸县15990667357: 求助!!矩阵键盘做一个简易计算器的程序 - ?
宿保欧贝: 你可以试试用亮个变量存储数值,然后每次检测到按键,就把第一个变量数值*10加上当前按键对应值.同样在检测到按下加号时候,加法标志位变1,然后把第二次输入的数全都存放到第二的变量里.检测到等于号之后直接相加就完了
邯郸县15990667357: 编程实现:由系统生成一个10以内的随机整数,用户从键盘上输入一个10以内的整数,如果两者相等输出“OK” - ?
宿保欧贝: #include <stdio.h>#include <stdlib.h>#include <time.h> int main(void) { int a,b,i=0; int t=0,d=10; srand(time(NULL)); /*初始化随机数种子*/ a=rand()%(d-t+1)+t; /*生成一个[0 10]区间内的整数*/ printf("you have three times to answer:\n"); do{...
邯郸县15990667357: 试编写一段程序,完成从键盘输入一个10以内的数字,在屏幕上输出这个数字的3次方? - ?
宿保欧贝: #include <stdio.h>int main(int argc, char *argv[]) {int a = 0;scanf("%d", &a);printf("%d", a*a*a); }
邯郸县15990667357: 请帮忙看一下这个C语言程序,出了点小问题. /*创建一个包含10个元素的一维数组, 利用键盘输入方式为数组?
宿保欧贝: #include<stdio.h> void main() { int i; int a[10]; printf("请输入10个数:"); for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); }
邯郸县15990667357: /*设计程序,实现从键盘任意输入一个小于十的正整数x,在屏幕上显示x的阶乘 - ?
宿保欧贝: #include<stdio.h> int main(void) {int x,y;printf("请输入一个小于10的正整数:");y=1;scanf("%d",&x);while(x!= 0){y = y * x ;x = x - 1 ;}printf("\nx的阶乘为");printf("%d",y);return 0; } 首选用%d,不是%f,其次是while语句不要用分号!!!友情提示:编程中最好不要出现中文!
邯郸县15990667357: 定义一个长度为10的数组,利用一个循环让用户从键盘输入各元素的值, - ?
宿保欧贝: 你试试.我刚写得#Include<stdio.h> void main() { int i,j,d,a[10]; for(i=0;i<10;i++) scanf("%d",a[i]); printf("enter check num:"); scanf("%d",d); printf("%d",a[d-1]); } 这样就可以勒 当然 也可以改成#Include<stdio.h> void main() { int i,j,d,a[10]; ...
邯郸县15990667357: 求助,C51单片机用矩阵键盘按制两位数管显示的方案 内详! - ?
宿保欧贝: LED = 第1次输入 + 第2次输入 * 10
邯郸县15990667357: 编写一个程序,键盘输入十个数,输出其中最大数和最小数 - ?
宿保欧贝: 这题目我有两种思路,一是如上几位所说,定义两个变量分别储存最大和最小值,然后每次输入都和这两个变量的值进行比较,最后既能得到最大和最小值.第二种方法,可以利用一个数组将所有输入都保存下来,然后进行排序,最后将完成排序的数组的第一个和最后一个元素输出即可.这里的排序个人比较常用冒泡排序法,感觉挺方便的.
邯郸县15990667357: java程序,利用Scanner(System.in),从键盘输入10个数,然后从大到小输出这10 - ?
宿保欧贝: import java.util.Scanner; public class Test43 { public static void main(String[] args) { System.out.println(请输入10个数字,输入每个数字后以回车结束);// 提示语句,输入一个数要按下回车 Scanner sc = new Scanner(System.in);// 这是一个文...