单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx

上传人:b****5 文档编号:16886811 上传时间:2022-11-26 格式:DOCX 页数:15 大小:682.14KB
下载 相关 举报
单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx_第1页
第1页 / 共15页
单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx_第2页
第2页 / 共15页
单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx_第3页
第3页 / 共15页
单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx_第4页
第4页 / 共15页
单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx

《单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

单片机原理独立按键识别单片机原理实验报告Word格式文档下载.docx

_

[麴WS轟P控制4路Led

]'

实现99的计数器效果,按一下数值加一实现99码表(按一次开始计时,第二第次停g,三次清零)

J扩展要求:

通过3个按键实现时钟的调整(KEY1模式‘KEY2+,KEY3・)

实验步骤、实验结果及分析:

1、使用ProteusISIS7Professional应用程

序,建立一个.DSN文件

2、在“库”下拉菜单中,选中“拾取元件”

(快捷键P),分别选择以下元件:

AT89C51CAP

CAP-ELECCRYSTALRESPACK。

3、构建仿真电路

 

4、创建一个Keil应用程序:

新建工程项目文

件;

为工程选择目标器件(AT89C52;

为工程项目创建源程序文件并输入程序代码;

保存创建的源程序项目文件;

把源程序文件添加到项目中。

5、把程序经过编译后生成的HEX文件添加到仿真电路中的处理器中(编辑元件一文件路径)程序代码:

1•实现单按键控制Led灯闪烁

#include"

reg51.h"

#defineucharunsignedchar

sbitLed1=P1A0;

sbitKey=P3A2;

ucharMode=0;

voiddelay(intx)II定义时间间隔

while(x);

应的代码

if(Key=O)

{delay(IOOO);

if(Key=0){

Mode=(Mode+1)%2;

while(Key==O);

if(Mode==0)

Led1=0;

if(Mode==1)

Led仁〜Led1;

delay(IOOO);

}

voidmain()

whiled)button_Cotrol();

图1单按钮,控制led灯闪烁

2•实现单按键多功能识别一一控制4路Led灯

闪烁

reg51.h"

#defineucharunsignedcharsbitLed

仁P1A0;

sbitLed2=P1A1;

sbit

Led3=P1A2;

sbitLed4=P1A3;

Key=P3A2;

voiddelay(intx)//定义时间间隔

while(x-);

voidbutton_Cotrol()//根据按键模式执行相

{if(Key==O)

{delay(IOOO);

if(Key==O)

{

Mode=(Mode+1)%4;

Led4=0;

delay(3000);

if(Mode==1)

Led2=〜Led2;

delay(3000);

if(Mode==2)

Led2=0;

Led3=〜Led3;

if(Mode==3)

Led3=0;

Led4=〜Led4;

while(l)button_Cotrol();

曾3

BIvtffrFr

17

图2单按键多功能识别,控制4路Led灯闪烁

3.实现0-99的计数器效果,按一下数值加1

#\nclude"

reg51.hH

#definedisp_null10sbitKey=P3八2;

ucharcodetab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,Oxff};

〃共阳数码管显示0~9的段码表

ucharsec=0;

voiddelay(intx)II定义时间间隔{

voidPutTime()

DispBuf[7]=sec%10;

DispBuf[6]=sec/10;

DispBuf[5]=disp_null;

DispBuf[4]=disp_null;

DispBuf[3]=disp_null;

DispBuf[2]=disp_null;

DispBuf[1]=disp_null;

DispBuf[O]=disp_null;

voiddisplayo

uchari;

for(i=0;

i<

8;

i++)

P2=0;

P2=1«

i;

PO=tab[DispBuf[i]];

delay(100);

voidButton_Control()

if(Key==O)

sec++;

while

(1)

displayo;

PutTime();

Button_Control();

图30-99的计数器效果,按一下数值加1

4•实现0・99码表(按一次开始计时,第二次停止,第三次清零)

ucharcode

tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,Oxff};

〃共阳数码管显示0〜9的段码表

ucharDispBuf[8];

uchartemp=30;

ucharMode=2;

DispBuf[6]=sec/10;

DispBuf[5]=disp_null;

DispBuf[3]=disp_null;

DispBuf[2]=disp_null;

DispBuf[1]=disp_null;

DisDBuf[O]=dispnull;

voiddisplay()

iv8;

delay(IOO);

voidtime_Eclipse()

{temp-;

if(temp==0)

{temp=30;

{delay(3000);

if(Key==0){

Mode=(Mode+1)%3;

if(Mode==0)sec=0;

if(Mode==1)time_Eclipse();

if(Mode==2);

voidmain()

while

(1){display。

;

Button_Control();

PutTime();

图40-99码表,按一次开始计时、第二次停止

图50-99码,按表第三次清零

5•扩展要求:

通过3个按键实现时钟的调整

#definedisp_null10ucharcode

tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,Oxbf};

〃共阳数码管显示0-9的段码表

uchardispBuf[8];

ucharhour=13,min=23,sec=25;

//分别给时、

分、秒赋初值

sbitkey1=P3八2;

sbitkey2=P3A3;

sbitkey3=P3A4;

r

{dispBuf[7]=sec%10;

dispBuf[6]=sec/10;

dispBuf[5]=disp_nuII;

dispBuf[4]=min%10;

dispBuf[3]=min/10;

dispBuf[2]=disp_null;

dispBuf[1]=hour%10;

dispBuf[0]=hour/10;

〃识别是否按

ucharScanKey()

1被按'

则返回1

if(key2==0)return”if(key3==0)retUm,J;

return0;

ucharReadKey()

退出

回来的和原来的值不一样'

放弃

while(SeanKey());

//如果一旦读回

来的值为0,也就是松开按键,o

那么就可以返回〃按键返回

returntmp;

voiddisplay。

PO=tab[dispBuf[i]];

unsignedcharmode=0;

unsignedcharms;

while(l)

displayo;

switch(ReadKey())

{case'

1'

:

mode=(mode+1)%4;

break;

case'

+'

if(mode==0)break;

elseif(mode==1)

hour=(hour+1)%24;

elseif(mode==2)min=(min+1)%60;

elseif(mode==3)sec=(sec+1)%60;

-'

elseif(mode==1&

&

hour)hour=(hour-

1)%24;

elseif(mode==2&

min)

min=(min-1)%60;

elseif(mode==3&

sec)sec=(sec-

1)%60;

break;

ms++;

//控制加1的时延

if(ms>

=50)

ms=O;

if(sec>

=60)//表示进位,当秒满六十

则向分钟进1,同时秒数清零

min++;

sec=O;

if(min>

=60)

hour++;

min=O;

if(hour>

=24)II当小时数满24小时时,则小

时数清零,完成计时

hour=0;

按键实现时钟的调整,KEY1选择模式,KEY

+,KEY3・

按键实现时钟的调整'

KEY1选择模式,KEY

Ki

KEY3-

E

9

WH

MY*r**

■J”初

»

*•••

nw-

83按键实现时钟的调整,KEY1

选择模式,KEY

+,KEY3-

实验总结(包括过程总结、心得体会及实验改进意见等):

过程总结:

1•在电路中增加按键、Led灯、八位7段数码管(共阳/共阴自选),将P2口作数据输出口与7段数码管数据引脚相连,P3引脚输出位选控制信号。

掌握查询式按键的原理和编程方法

2.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路,理解按键防抖技术,当第一次检测到有建按下时,先延时(10~20mS,而后再确认键电平是否依旧维持闭合状态的电平。

若保持闭合状态电平,则确认此间已按下,从而消除抖动影响°

心得体会:

本次的实验是通过对按键的不同控制实现各个功能,在理想的环境下按键的反馈是即时且无

误差的,但是在实际的环境中要考虑到按键抖动的现象,所以要写一个判断按键抖动的函数,还有单按键控制多个灯的亮灭,可以设置一个变量来记录按键的情况来实现对不同部件的控制,而多按键的时候只需要判断是哪一个按键被按下,然后执行对应的程序。

指导教师评语:

成绩评定

教师签字

年月日

备注:

注:

1、报告内的项目或设置,可根据实际情况加以补充和调整

2、教师批改学生实验报告应在学生提交实验报告

10日内

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

当前位置:首页 > 外语学习 > 韩语学习

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

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