按键识别数码管.docx

上传人:b****6 文档编号:6964212 上传时间:2023-01-13 格式:DOCX 页数:7 大小:204.77KB
下载 相关 举报
按键识别数码管.docx_第1页
第1页 / 共7页
按键识别数码管.docx_第2页
第2页 / 共7页
按键识别数码管.docx_第3页
第3页 / 共7页
按键识别数码管.docx_第4页
第4页 / 共7页
按键识别数码管.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

按键识别数码管.docx

《按键识别数码管.docx》由会员分享,可在线阅读,更多相关《按键识别数码管.docx(7页珍藏版)》请在冰豆网上搜索。

按键识别数码管.docx

按键识别数码管

按键识别数码管显示实验

实验六 按键识别数码管显示实验(软件+硬件实验)

一、实验目的与要求

实验目的:

掌握按键识别及数码管显示的实现方法。

实验要求:

通过XL2000的16位矩阵按键,在数码管上分别显示0~9,A,B,C,D,E,F。

用Keil编译、Proteus仿真,代码下载到单片机实验箱上验证。

二、实验内容

数码管显示矩阵按键号。

可参考xl2000实验仪操作指导手册之实验7

三、实验接线图

接线方法:

1.用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44;

2.接8位数码管的数据线。

将数码管部份的数据口JP5接到CPU部份的P0口JP51;

3.接8位数码管的显示位线。

将数码管部份的显示位口JP8接到CPU部份的P2口JP52.

四、实验结果

五、思考题

采用P3口控制矩阵按键输入,程序应该如何修改?

本实验的程序中可以不用蜂鸣器驱动线,把以下程序的sbitBEEP=P3^7;及函数voidbeep()等删掉后;需要把扫描键值的函数改一下:

unsignedcharkeyscan()

{

unsignedcharscan1,scan2,keycode,j;

P13=0xf0;

scan1=P3;

if(scan1!

=0xf0)//判键是否按下

{

delayms(10);

scan1=P3;

if(scan1!

=0xf0)//二次判键是否按下

{

P1=0x0f;

scan2=P3;

keycode=scan1|scan2;//组合成键扫描编码

for(j=0;j<16;j++)

{

if(keycode==key_code[j])//查表得键值

{

key=j;

return(key);//返回有效键值

}

}

}

}

else

P3=0xff;

return(key=16);//返回无效码

}即P1口换成P3口,而键编码数组是固定的,可以不变;

此外主函数中的P1口也要改为P3口:

voidmain(void)

{

P0=0xf7;//数码管初始显示"-"

P2=0xfd;//数码管显示在第二位

P3=0xff;

while

(1)

{

keyscan();

if(key<16)//有效键值

{

P0=disp_code[key];//显示键值

}

}

}

 

附件:

实验程序清单

#include

#include

sbitBEEP=P3^7;//蜂鸣器驱动线

unsignedcharkey;

unsignedcharcodedisp_code[]=

{

0x28,0xa9,0x20,0x30,0xa1,0x60,0x21,0x62,0xb1,0x20,0x61,0xa2,0x28,0x7a,0x74,0x7e

};//显示码数组0,C,8,A,E,9,6,3,f,8,5,2,0,7,4,1

unsignedcharcodekey_code[]=

{

0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7,0xbe,0xbd,0xbb,

0xb7,0x7e,0x7d,0x7b,0x77//键编码数组

};

charcodeSST516[3]_at_0x003b;//保留仿真器

/********************延时子函数***************/

voiddelayms(unsignedintms)

{

unsignedchart;

while(ms--)

{

for(t=0;t<114;t++);

}

}

/*************x*0.14MS延时子函数****************/

voiddelayus(unsignedcharx)

{

unsignedchari;

while(x--)

{

for(i=0;i<14;i++)

{;

}

}

}

/******************蜂鸣器驱动子函数*****************/

voidbeep()

{

unsignedchari;

for(i=0;i<250;i++)

{

delayus(6);

BEEP=!

BEEP;//BEEP取反

}

BEEP=1;//关闭蜂鸣器

delayms(150);//延时

}

/******************键盘扫描子函数*********************/

unsignedcharkeyscan()

{

unsignedcharscan1,scan2,keycode,j;

P1=0xf0;

scan1=P1;

if(scan1!

=0xf0)//判键是否按下

{

delayms(10);

scan1=P1;

if(scan1!

=0xf0)//二次判键是否按下

{

P1=0x0f;

scan2=P1;

keycode=scan1|scan2;//组合成键扫描编码

for(j=0;j<16;j++)

{

if(keycode==key_code[j])//查表得键值

{

key=j;

return(key);//返回有效键值

}

}

}

}

else

P1=0xff;

return(key=16);//返回无效码

}

/*************************主函数***********************/

voidmain(void)

{

P0=0xf7;//数码管初始显示"-"

P2=0xfd;//数码管显示在第二位

P1=0xff;

while

(1)

{

keyscan();

if(key<16)//有效键值

{

P0=disp_code[key];//显示键值

beep();//蜂鸣器响一声

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1