51单片机 简易计算器的设计与调试
第三个项目
分为矩阵键盘测试,显示键值,简易计算器,密码锁1位,密码锁6位五个任务
第一个任务矩阵键盘测试
利用单片机连接4x4矩阵键盘,按下任意按键,8个数码管一起显示5。
单片机与按键的连接方式主要有两种方式
1,独立按键
硬件连接时每个按键的一端占用单片机的一根接囗线,另一端一般接地,
这样当按键按下时,接口线变为低电平,按键释放时接口线悬空变为高电平;编程时利用位变量定乂,每个按键有单独的变量名,检测时可利用i语句直接检测按键变量的电平状态,就可判断按键是按下还是释放。优点是连线和编程简单,缺点是占用接线太多,一般不超过4个。
2,矩阵按键
矩阵按键:为了节省单片机的接口,利用行列线的形式构建矩阵键盘。一般是利用带触点的非编码键盘构建。按键没有独立变量名,编程时需要进行行列扫描以判断按键触发的位置,并确定对应的键值,编程较复杂。
矩阵键盘部分电路图
航线和列线一端都连接在p1口上,一端连接另一端悬空且航线列线交叉但是不相连。按键按下能将某一行与某一列短路连接
先写零,后找零的原则
按键的去抖
机械式的按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定的触点机械抖动,然后其触点才稳定下来,抖动的时间一般为5—10ms,在触点抖动期间检测按键的通与断的状态
,可能导致判断出错。进行延时检测来解决此问题。
proteus模拟
用接口码连接
keil uvision
#include<reg51.h>
unsigned char disp[]={0xc0,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
void delay(unsigned int i){
int k,j;
for(k=0;k<i;k++)
for(j=0;j<300;j++);
}
void main(){
{
P1=0x0f;
if(P1!=0x0f)
delay(10);
if(P1!=0x0f)
{
P2=0x00;
P0=disp[5];
delay(100);
}
}
}