编写程序,通过点按矩阵键盘的按钮,2位数码管显示00~15 16个数字。在按钮未按下时,数码管不显示。

编写程序,通过点按矩阵键盘的按钮,2位数码管显示00~15 16个数字。在按钮未按下时,数码管不显示。

(1)硬件图

Proteus仿真图:
在这里插入图片描述

(2)软件设计

①头文件部分
#ifndef ShowNum_H
#define ShowNum_H
//delay延时函数
void delay(int j){
char i =250;
for(;j>0;j–){
while(–i);
i=100;
}
}
//key函数
int key(){
int keyval=-1;
P1=0x0f;
if(P1!=0x0f)
delay(2);
if(P1!=0x0f){
switch(P1){
case (0X0e):keyval=0;break;
case (0X0d):keyval=1;break;
case (0X0b):keyval=2;break;
case (0X07):keyval=3;break;
}
}
P1=0XF0;
switch(P1){
case (0Xe0):keyval=keyval+0;break;
case (0Xd0):keyval=keyval+4;break;
case (0Xb0):keyval=keyval+8;break;
case (0X70):keyval=keyval+12;break;
}
return keyval;
}
//showNum二位数码管显示函数
void showNumByCA(int num){
int box[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0xf82,0xf8,0x80,0x90,0x40};
unsigned char k;
for(k=0;k<40;k++){
int numR = num%10;
int numL = num/10;
P2=0xfd;
P0=box[numL];
delay(20);
P2=0xfe;
P0=box[numR];
delay(20);
}
}
#endif
②主程序部分
#include<reg51.h>
#include <ShowNum.h>
void main(){
int keyValue;
while(1){
keyValue=key();
if(keyValue==-1){
P2=0xff;
}else{
showNumByCA(keyValue);
}
delay(20);
P2=0xff;
}
}

(3)效果图

在这里插入图片描述

在这里插入图片描述

(4)实验结论及分析

1.模块化编程

本次实验加入了头文件(.h文件)。将实验中用到的所有函数(延时函数void delay(int j),判断按钮函数int key(),二位数码管显示函数void showNumByCA(int num))。通过这样设置,可使主程序耦合度最低,结构清晰。

2.程序的核心思想

①:利用判断按钮函数int key()得知按下的是哪个按钮。
②:①中得出的keyvalue传入二位数码管显示函数void showNumByCA(int num))。
③:显示数字完毕后,执行循环,程序步入①中。①②③①②③①…循环。
3.实验中遇到的问题
①:有时侯按钮按下时不识别。推测消抖的过程出现问题。
②:仿真显示数字完毕后不会自动熄灭。推测key()函数出现问题,导致二位数码管显示函数接收了错误的keyvalue值。

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值