单片机原理与应用实验六按键识别数码管显示实验.docx

上传人:b****6 文档编号:13765411 上传时间:2023-06-17 格式:DOCX 页数:9 大小:114.25KB
下载 相关 举报
单片机原理与应用实验六按键识别数码管显示实验.docx_第1页
第1页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第2页
第2页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第3页
第3页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第4页
第4页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第5页
第5页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第6页
第6页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第7页
第7页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第8页
第8页 / 共9页
单片机原理与应用实验六按键识别数码管显示实验.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机原理与应用实验六按键识别数码管显示实验.docx

《单片机原理与应用实验六按键识别数码管显示实验.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用实验六按键识别数码管显示实验.docx(9页珍藏版)》请在冰点文库上搜索。

单片机原理与应用实验六按键识别数码管显示实验.docx

单片机原理与应用实验六按键识别数码管显示实验

电子信息学院

实验报告书

课程名:

《单片机原理及应用实验》

题目:

实验六按键识别数码管显示实验

软件+硬件实验

实验类别:

【设计】

班级:

电子1313

学号:

26

姓名:

吴限

 

1、实验容或题目

1)题目:

按键识别数码管显示实验

2)实验容:

数码管显示矩阵按键号。

2、实验目的与要求

1)实验目的:

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

2)实验要求:

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

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

3、实验仪器

(1)PC微机1台

(2)实验箱1台

4、实验程序流程图

 

5、实验程序

(实验程序清单作为附件放在最后)

6、实验步骤

1)keil中C语言程序实现。

2)在proteus中完成电路图设计,并实现仿真。

3)硬件实验部分:

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

将数码管部份的数据口JP5接到CPU部份的P0口JP51;接8位数码管的显示位线。

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

7、实验数据及结果

8、思考题

采用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[]=

{

0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,

0x90,0x88,0x83,0xc6,

0xc0,0x86,0x8e,0xc0};

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);//延时10ms

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-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2