(单片机原理与应用)并行口设计数字键盘实验

来源:互联网 发布:火箭nba 知乎 编辑:程序博客网 时间:2024/05/20 18:03

一、实验内容

并行口实现数字0~9、A~F、L、U、P、n总共19个键盘,将按键的结果用4位数码管(例如:7SEG-MPX-CA-BLUE)显示(可选——按键控制移位)出来。

二、实验目的

掌握动态显示、动态扫描键盘的工作原理及硬、软件的设计、调试方法

掌握80C51接口硬件电路设计方法及软件编程方法

了解80C51外部中断的使用和编程方法

三、实验设备

DELL台式机 、keilC51版本7、proteus版本6

四、实验电路图


五、程序流程图


六、程序源码 

#include<reg51.h>#define uchar unsigned char#define uint unsigned int //0-9,A~F,L,U,P,n的数码管断码uchar code DSY_CODE[]={ 0x3f,0x06,0x5b,0x4f,  0x66,0x6d,0x7d,0x07,  0x7f,0x6f,0x77,0x7c,  0x39,0x5e,0x79,0x71,  0x38,0x3e,0x73,0x37};sbit P2_0=P2^0;uchar pre_key=20,key=20;//延时void DelayMS(uint ms){uchar t;while(ms--)for(t=0;t<120;t++);}//键盘矩阵扫描void keys_scan(){uchar temp;P0=0x0f;P2_0=0;DelayMS(1);//按键后P2_0=0,00001111将变成P2_0=0,0000XXXX,X中有1个为0,3个仍为1//下面的异或操作会把3个1变成0,唯一的0变成1temp=P0^0x0f;//判断按键发生于0~3列中的哪一列switch(temp){case 1:key=0;break;case 2:key=1;break;case 4:key=2;break;case 8:key=3;break;}P0=0xf0;P2_0=1;DelayMS(1);//按键后,P2_0=1,11110000将变成P2_1=X,XXXX0000,X中有1个为0,3个仍为1//下面的表达式会判断P2_1或者会将高4位移到低4位,并将其中唯一的0变为1,其余为0if(P2_0==0)key+=16;else{temp=P0>>4^0x0f;switch(temp){case 1:key+=0;break;case 2:key+=4;break;case 4:key+=8;break;case 8:key+=12;break;}}}void main(){ P1=0x00;P2_0=0;while(1){P0=0xf0;P2_0=1;if(P0!=0xf0||P2_0!=1)keys_scan();//扫描键盘获取按键序号Keyif(pre_key!=key){P1=DSY_CODE[key];//显示pre_key=key;}DelayMS(100); }  }


0 0
原创粉丝点击