求,基于51单片机的4*6键盘扫描C程序.
2个回答
2013-09-12
展开全部
/********************************************************************
* 描述 : 该文件实现了 4 * 4 键盘的试验。两位通过数码管来显示当前的按键值。
*********************************************************************/
#include<reg51.h>
#include<intrins.h>#define uint unsigned int
#define uchar unsigned charuchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。* 输入 : 无
* 输出 : 按键值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1 = Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp=0x01;
for(i=0; i<4; i++)
{
if(!(P1 & temp))
{
return (i+j*4); //返回取得的按键值
}
temp <<= 1;
}
}
}/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0)
{
Delay_1ms(15); //按键消抖
if(P1 != 0xf0)
{
Key_Value = Keyscan();
}
}
P0 = table[Key_Value / 10]; //显示高位键值
P2 = 0x00;
Delay_1ms(5);
P0 = table[Key_Value % 10]; //显示低位键值
P2 = 0x04;
Delay_1ms(5);
}
}
* 描述 : 该文件实现了 4 * 4 键盘的试验。两位通过数码管来显示当前的按键值。
*********************************************************************/
#include<reg51.h>
#include<intrins.h>#define uint unsigned int
#define uchar unsigned charuchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Keyscan()
* 功能 : 实现按键的读取。* 输入 : 无
* 输出 : 按键值
***********************************************************************/
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1 = Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp=0x01;
for(i=0; i<4; i++)
{
if(!(P1 & temp))
{
return (i+j*4); //返回取得的按键值
}
temp <<= 1;
}
}
}/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar Key_Value; //读出的键值
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0)
{
Delay_1ms(15); //按键消抖
if(P1 != 0xf0)
{
Key_Value = Keyscan();
}
}
P0 = table[Key_Value / 10]; //显示高位键值
P2 = 0x00;
Delay_1ms(5);
P0 = table[Key_Value % 10]; //显示低位键值
P2 = 0x04;
Delay_1ms(5);
}
}
2013-09-12
展开全部
帮你设计
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询