独立按键识别 单片机原理 实验报告.docx

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

独立按键识别 单片机原理 实验报告.docx

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

独立按键识别 单片机原理 实验报告.docx

独立按键识别单片机原理实验报告

宁德师范学院计算机系

实验报告

(2014—2015学年第2学期)

课程名称单片机原理

实验名称独立按键识别

专业计算机科学与技术(软工)

年级2012级

学号B2012103145姓名冯武

指导教师杨烈君

实验日期2015.5.27

 

实验目的与要求:

目的:

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

2.理解按键防抖技术

要求:

1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路

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

3.实现单按键控制Led灯闪烁

4.实现单按键多功能识别——控制4路Led灯闪烁

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

6.实现0-99码表(按一次开始计时,第二次停止,第三次清零)

7.扩展要求:

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

 

实验设备(环境):

1.计算机

2.ProteusISIS7Professional应用程序

3.Keil应用程序

实验内容:

按键识别要求实现:

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

2.实现单按键多功能识别——控制4路Led灯闪烁

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

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

5.扩展要求:

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

参考原理图

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

1实验步骤:

1、使用ProteusISIS7Professional应用程序,建立一个.DSN文件

2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:

AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。

3、构建仿真电路

图1按键识别1、2

 

图2按键识别3

图3按键识别4

 

图3按一下暂停

图4归零

 

图5时钟调整

电路图

 

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

新建一个工程项目文件;为工程选择目标器件(AT89C52);为工程项目创建源程序文件并输入程序代码;保存创建的源程序项目文件;把源程序文件添加到项目中。

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

2实验程序<流程图>

(1)按键识别(按下LED灯亮,再按灭)

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitled=P2^6;

sbitkey=P2^7;

voiddelay(uintx)

{

while(x--);

}

voidmain()

{

while

(1)

{

if(key==0)

{

delay(1000);

if(key==0)

{

led=~led;

while(key==0);

}

}

}

}

(2)按键识别(按下灭,再按闪)

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitled=P2^6;

sbitkey=P2^7;

voiddelay(uintx)

{

while(x--);

}

voidmain()

{

uinti,j;

while

(1)

{led=1;

if(key==0)

{

delay(1000);

if(key==0)

{

i++;

j=i%2;

while(key==0);

}

}

switch(j)

{

case0:

led=0;break;

case1:

led=~led;delay(100);break;

default:

break;

}

}

}

 

(3)按键识别(按下数码管数值加1)

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeLedCode[]={

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

ucharDispBuf[8];

sbitled=P2^6;

sbitkey=P2^7;

voiddelay(uintx)

{

while(x--);

}

voiddisnum(uintn)

{

uinti;

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

{

DispBuf[7-i]=n%10;

if(n==0&&i)

DispBuf[7-i]=10;

n=n/10;

}

}

voidmain()

{

uinti,j;

while

(1)

{led=1;

if(key==0)

{

delay(1000);

if(key==0)

{

i++;

while(key==0);

}

}

disnum(i);

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

{

P1=1<

P3=~LedCode[DispBuf[j]];

delay(100);

}

}

}

(4)一键多功能识别(按下L1闪,再按L2闪,L3,L4依次闪烁)

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitled1=P2^0;

sbitled2=P2^1;

sbitled3=P2^2;

sbitled4=P2^3;

sbitkey=P2^7;

voiddelay(uintx)

{

while(x--);

}

voidmain()

{

uinti;

led1=0;

led2=0;

led3=0;

led4=0;

while

(1)

{

if(key==0)

{

delay(1000);

if(key==0)

{

i++;

while(key==0);

i=i%4;

}

}

switch(i)

{

case0:

led1=~led1;delay(100);led4=0;break;

case1:

led2=~led2;delay(100);led1=0;break;

case2:

led3=~led3;delay(100);led2=0;break;

case3:

led4=~led4;delay(100);led3=0;break;

default:

break;

}

}

}

(5)一键多功能识别(秒表,按第1下开始,按第2下停,按第3下清零)

#include"reg51.h"

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeLedCode[]={

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x40};

ucharDispBuf[8];

uinthour=0,min=0,sec=0;

sbitkey=P2^7;

voiddelay(uintx)//延迟函数

{

while(x--);

}

voidPntNum(void)//时间的拆分

{

DispBuf[7]=sec%10;//获取秒钟的个位数

DispBuf[6]=sec/10;//获取秒钟的十位数

DispBuf[5]=10;

DispBuf[4]=min%10;

DispBuf[3]=min/10;

DispBuf[2]=10;

DispBuf[1]=hour%10;

DispBuf[0]=hour/10;

}

voidplay(void)

{

uchari;

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

{

P1=1<

P3=~LedCode[DispBuf[i]];

delay(100);

}

}

voidtime()

{

uintn;

n++;

if(n>=0)

{

sec++;n=0;

}

if(sec>=60)

{

min++;sec=0;

}

if(min>=60)

{

hour++;min=0;

}

if(hour>=24)

{

hour=0;

}

}

voidmain()

{

uinti=2;

while

(1)

{

if(key==0)

{

delay(1000);

if(key==0)

{

i++;

while(key==0);

i=i%3;

}

}

switch(i)

{

case0:

PntNum();play();time();break;

case1:

PntNum();play();break;

case2:

hour=0,min=0,sec=0;PntNum();play();break;

default:

break;

}

}

}

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

#include

#defineuintunsignedint

#defineucharunsignedchar

#definedisnull10

ucharhour=15,min=24,sec=20;

ucharcodeLedCode[]={

0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x40};

uchardispbuff[8];

voidpnttime()

{

dispbuff[7]=sec%10;

dispbuff[6]=sec/10;

dispbuff[5]=disnull;

dispbuff[4]=min%10;

dispbuff[3]=min/10;

dispbuff[2]=disnull;

dispbuff[1]=hour%10;

dispbuff[0]=hour/10;

}

voiddelay(uintx)

{

while(x--);

}

voidmain()

{

uchari,ms;

while

(1)

{

pnttime();

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

{

P3=0;

P3=1<

P2=~LedCode[dispbuff[i]];

delay(500);

}

ms++;

if(ms>=10)

{

sec++;ms=0;

}

if(sec>=60)

{

min++;sec=0;

}

if(min>=60)

{

hour++;min=0;

}

if(hour>=24)

{

hour=0;

}

}

}

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

过程总结:

通过本次实验对单片机的知识进一步了解,通过单片机可以实现很多电子功能的实现,比如时钟的实现。

掌握查询式按键的原理和编程方法,理解按键防抖技术。

本次实验大多数是为了熟悉按键设计,对按键设计进行更加的了解与熟练。

 

心得体会:

本次实验过程之中,有很多难度,比以前的数码管多了一个按键,这个按键就是本次实验的关键,经过不停的修改和同学的讨论,做了出来,虽然不怎么样,但是还是做出来了。

以后的遇到相同的按键操作就不会这样什么都不懂了。

指导教师评语:

1、完成所有规定的实验内容,实验步骤正确,结果正确;

2、完成绝大部分规定的实验内容,实验步骤正确,结果正确;

3、完成大部分规定的实验内容,实验步骤正确,结果正确;

4、基本完成规定的实验内容,实验步骤基本正确,所完成的结果基本正确;

5、未能很好地完成规定的实验内容或实验步骤不正确或结果不正确。

6、其它:

评定等级:

A(优秀)B(良好)C(中等)D(及格)E(不及格)

成绩评定

教师签字

年月日

备注:

注:

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

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

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

当前位置:首页 > 小学教育 > 其它课程

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

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