矩阵键盘用Proteus仿真在数码管显示
单片机源程序如下:
- /*******************************************************************************
- 文件名称: main.c
- 作 者:
- 版 本: V1.00
- 说 明: 矩阵键盘扫描实验
- 修改记录:
- *******************************************************************************/
- /*******************************************************************************
- * 功能描述: *
- * 扫描矩阵键盘 *
- * 当有键按下时按照按键的位置 *
- * 显示当前的键值
- *接线说明:P00~P07-SA~SG,P10~P13-R1~R4,P14~P17-C1~C4,P20-C0
- *******************************************************************************/
- #include <reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define PSEG P0
- #define PKEY P1
- sbit C0 = P2^0;//位定义
- void delayms(uint);
- uchar scan(void);
- uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- /**********主函数******************************************/
- void main(void)
- {
- uchar key;
- C0=1;
- while(1)
- {
- key=scan(); //读取键盘值
- if(key!=16)
- PSEG=seg[key]; //显示
- }
- }
- /***********延时函数***************************************/
- void delayms(uint j)
- {
- uchar i;
- for(;j>0;j--)
- {
- i=250;
- while(--i);
- i=249;
- while(--i);
- }
- }
- /***********键盘扫描函数***********************************/
- uchar scan(void)
- {
- uchar k=16,m,n,in;
- PKEY=0xf0; //扫描所有行
- if((PKEY&0xf0)!=0xf0)
- {
- for(m=0;m<4;m++)
- {
- PKEY=~(0x01<<m);
- for(n=0;n<4;n++)
- {
- in=PKEY;
- in=in>>(4+n);
- if((in&0x01)==0)
- {
- delayms(10);
- if((in&0x01)==0){k=n+m*4;break;}
- }
- }
- if(k!=16){break;}
- }
- }
- return(k);
- }
复制代码
所有资料51hei提供下载:
Proteus.zip
(24.5 KB, 下载次数: 28)
|