当前位置:首页 > 单片机 > 单片机
[导读]/实验目的:熟悉键盘矩阵的扫描方法//程序中没有做按键去抖,也没有考虑多个键同时按下的情况。 //最低两位数码管显示相应的按键(如按下S10,在显示10;按下S25,则显示25) //无按键按下的时候显示FF //按键跟按

/实验目的:熟悉键盘矩阵的扫描方法

//程序中没有做按键去抖,也没有考虑多个键同时按下的情况。
//最低两位数码管显示相应的按键(如按下S10,在显示10;按下S25,则显示25)
//无按键按下的时候显示FF
//按键跟按键的扫描结果满足如下关系:
// 按键 扫描结果(result) 按键 扫描结果
// K10 0XE7 K18 0XB7
// K11 0XEB K19 0XBB
// K12 0XED K20 0XBD
// K13 0XEE K21 0XBE
// K14 0XD7 K22 0X77
// K15 0XDB K23 0X7B
// K16 0XDD K24 0X7D
// K17 0XDE K25 0X7E

//硬件要求:拨码开关S4全部置ON
// 拨码开关S6全部置ON,拨码开关S5第5-6位置ON,其他位置OFF
// 其它拨码开关置OFF

#include //包含单片机内部资源预定义
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

int result;
void delay(); //delay函数申明
void init(); //I/O口初始化函数申明
void scan(); //按键扫描程序申明
void display(int x); //显示函数申明
//---------------------------------------------------
//主程序
void main()
{
while(1) //循环工作
{
init(); //调用初始化子程序
scan(); //调用按键扫描子程序
display(result); //调用结果显示子程序
}
}

//---------------------------------------------------
//初始化函数
void init()
{
ADCON1=0X07; //设置A口为普通I/O口
TRISA=0X0f; //设置A口高2位为输出,低4位为输入
TRISC=0XF0; //设置C口高4位为输入,低4位为输出
TRISD=0X00; //设置D口为输出
PORTA=0XFF;
PORTD=0XFF; //先清除所有显示
}

//---------------------------------------------------
//按键扫描程序
void scan()
{
PORTC=0XF7; //C3输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0xf0; //清除低4位
if(result!=0xf0) //判断高4位是否为全1(全1代表没按键按下)?
{
result=result|0x07; //否,加上低4位0x07,做为按键扫描的结果
}
else //是,改变低4位输出,重新判断是否有按键按下
{
PORTC=0XFb; //C2输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0xf0; //清除低4位
if(result!=0xf0) //判断高4位是否为全1(全1代表没按键按下)
{
result=result|0x0b; //否,加上低4位0xb,做为按键扫描的结果
}
else //是,改变低4位输出,重新扫描
{
PORTC=0XFd; //C1输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0xf0; //清除低4位
if(result!=0xf0) //判断高4位是否为全1(全1代表没按键按下)
{
result=result|0x0d; //否,加上低4位0x0d,做为按键扫描的结果
}
else //是,改变低4位的输出,重新扫描
{
PORTC=0XFe; //C0输出低电平,其他三位输出高电平
asm("nop"); //插入一定延时,确保电平稳定
result=PORTC; //读回C口高4位结果
result=result&0xf0;//清除低4位
if(result!=0xf0) //判断高四位是否为全1(全1代表没有按键按下)
{
result=result|0x0e;//否,加上低4位0x0e,做为按键扫描的结果
}
else //是,全部按键扫描结束,没有按键按下,置无按键按下标志位
{
result=0xff; //扫描结果为0xff,做为没有按键按下的标志
}
}
}
}
}

//----------------------------------------------------------
//显示程序
void display(int x)
{
switch(result)
{
case 0xe7:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xc0;PORTA=0X1F;delay();break; //K10
case 0xeb:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xf9;PORTA=0X1F;delay();break; //K11
case 0xed:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xa4;PORTA=0X1F;delay();break; //K12
case 0xee:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0xb0;PORTA=0X1F;delay();break; //K13
case 0xd7:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0x99;PORTA=0X1F;delay();break; //K14
case 0xdb:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0x92;PORTA=0X1F;delay();break; //K15
case 0xdd:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X82;PORTA=0X1F;delay();break; //K16
case 0xde:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0XF8;PORTA=0X1F;delay();break; //K17
case 0xb7:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X80;PORTA=0X1F;delay();break; //K18
case 0xbb:
PORTD=0xf9;PORTA=0X2F;delay();PORTD=0X90;PORTA=0X1F;delay();break; //K19
case 0xbd:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xc0;PORTA=0X1F;delay();break; //K20
case 0xbe:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xf9;PORTA=0X1F;delay();break; //K21
case 0x77:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xa4;PORTA=0X1F;delay();break; //K22
case 0x7b:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0xb0;PORTA=0X1F;delay();break; //K23
case 0x7d:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0x99;PORTA=0X1F;delay();break; //K24
case 0x7e:
PORTD=0xa4;PORTA=0X2F;delay();PORTD=0x92;PORTA=0X1F;delay();break; //K25
case 0xff:
PORTD=0x8e;PORTA=0X2F;delay(); PORTD=0x8e; PORTA=0X1F; delay(); //无按键按下
}
}

//------------------------------------------------------------------
//延时程序
void delay() //延时程序
{
int i; //定义整形变量
for(i=0x100;i--;); //延时
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭