89C52单片机矩阵键盘行列扫描程序

来源:本站
导读:目前正在解读《89C52单片机矩阵键盘行列扫描程序》的相关信息,《89C52单片机矩阵键盘行列扫描程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《89C52单片机矩阵键盘行列扫描程序》的详细说明。
简介:本文为89C52单片机矩阵键盘行列扫描程序,一起来学习一下:

89C52单片机矩阵键盘行列扫描程序

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit wela=P2^6;

sbit dela=P2^7;

uchar code wela_table[]={

0xFE,0xFD,0xFB,0xF7,

0xEF,0xDF,0xBF,0x7F};

uchar code dela_table[]={

0x3F,0x06,0x5B,0x4F,

0x66,0x6D,0x7D,0x07,

0x7F,0x6F,0x77,0x7C,

0x39,0x5E,0x79,0x71};

uchar temp,num;

void Init();

void DelayMs(uchar a);

void DelayUs2(uchar b);

void KeyScan();

void Display();

/*---------------------------------------------------------------

主函数

------------------------------------------------------------------*/

void main()

{

Init();

while(1)

{

KeyScan();

Display();

}

}

/*----------------------------------初始化函数----------------------------*/

void Init()

{

num=0;

}

/*---------------------------------键盘扫描--------------------------------*/

void KeyScan()

{

/*--------------------------第一行检测--------------------------*/

P3=0xFE;

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

DelayMs(250);

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

switch(temp)

{

case 0x70: num=1;

break;

case 0xB0: num=2;

break;

case 0xD0: num=3;

break;

case 0xE0: num=4;

break;

}

}

while(temp!=0xF0)

{

temp=P3;

temp=temp&0xF0;

Display();

}

}

/*--------------------------第二行检测--------------------------*/

P3=0xFD;

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

DelayMs(50);

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

switch(temp)

{

case 0x70: num=5;break;

case 0xB0: num=6;break;

case 0xD0: num=7;break;

case 0xE0: num=8;break;

}

}

while(temp!=0xF0)

{

temp=P3;

temp=temp&0xF0;

Display();

}

}

/*--------------------------第三行检测--------------------------*/

P3=0xFB;

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

DelayMs(50);

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

switch(temp)

{

case 0x70: num=9;break;

case 0xB0: num=10;break;

case 0xD0: num=11;break;

case 0xE0: num=12;break;

}

}

while(temp!=0xF0)

{

temp=P3;

temp=temp&0xF0;

Display();

}

}

/*--------------------------第四行检测--------------------------*/

P3=0xF7;

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

DelayMs(50);

temp=P3;

temp=temp&0xF0;

if(temp!=0xF0)

{

switch(temp)

{

case 0x70: num=13;break;

case 0xB0: num=14;break;

case 0xD0: num=15;break;

case 0xE0: num=0;break;

}

}

while(temp!=0xF0)

{

temp=P3;

temp=temp&0xF0;

Display();

}

}

}

/*----------------------------------延时函数-----------------------------*/

void DelayMs(uchar a)

{

while(a)

{

DelayUs2(245);

DelayUs2(245);

a--;

}

}

void DelayUs2(uchar b)

{

while(b)

{

b--;

}

}

/*-------------------------------显示函数------------------------------------*/

void Display()

{

P0=0xFF;

wela=1;

wela=0;

P0=dela_table[num];

dela=1;

dela=0;

P0=wela_table[5];

wela=1;

wela=0;

DelayUs2(50);

}

提醒:《89C52单片机矩阵键盘行列扫描程序》最后刷新时间 2024-03-14 00:55:08,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《89C52单片机矩阵键盘行列扫描程序》该内容的真实性请自行鉴别。