理论教育 按键计数器-利用YL-236型单片机实训平台搭建

按键计数器-利用YL-236型单片机实训平台搭建

时间:2023-11-25 理论教育 版权反馈
【摘要】:◇任务要求◇利用YL-236型单片机实训平台搭建一个按键计数器系统,要求具有以下功能:使用8个独立按键,按下任意键,在八位数码管的右两位显示按下按键的次数,其余数码管显示“—”。◇任务实施◇一、硬件电路搭建本项目需在YL-236型单片机实训平台上选用四个模块,即主机模块﹑电源模块﹑指令模块和显示模块,搭建按键计数器系统。

按键计数器-利用YL-236型单片机实训平台搭建

◇任务要求◇

利用YL-236型单片机实训平台搭建一个按键计数器系统,要求具有以下功能:使用8个独立按键,按下任意键,在八位数码管的右两位显示按下按键的次数(00~99),其余数码管显示“—”。

◇任务准备◇

一、MCU06指令模块简介

MCU06指令模块的布局如图4-1所示。

图4-1 指令模块的布局

二、独立按键的工作原理

独立式按键是直接用I/O口线构成的按键检测电路,其特点是每个按键单独占用一个I/O口,每个按键的工作不会影响其他I/O线的状态。独立式按键的典型应用如图4-2所示。

图4-2 独立按键的典型应用

1.独立按键优缺点

优点:电路配置灵活,软件结构简单。

缺点:按键较多时,占用较多的I/O口。

2.独立按键的抖动过程

目前常用的按键大部分都是机械式按键,机械式按键闭合与断开的瞬间均有抖动过程,抖动过程如图4-3所示,抖动时间的长短与按键的机械特性相关,一般为 5~25 ms。

图4-3 按键抖动过程曲线

3.消抖的方法

触点抖动期间检测按键的通断状态,可能会导致判断出错,即按键的一次按下或释放被错误地判别为多次按下。因此,需要采取消抖的方法。

(1)硬件消抖:在按键输出端加RS触发器(双稳态触发器)或单稳态触发器,构成去抖动电路。

(2)软件消抖:在检测到有按键按下时,执行一个5~10 ms的延时程序后,若再次检测仍保持闭合状态电平,则确认该键有效,否则按键无效。

◇任务实施◇

一、硬件电路搭建

本项目需在YL-236型单片机实训平台上选用四个模块,即主机模块﹑电源模块﹑指令模块和显示模块,搭建按键计数器系统。

1.模块选择

本任务所需要的模块如表4-1所示。

表4-1 本任务所需要的模块

2.工具和器材

本任务所需要的工具和器材如表4-2所示。

表4-2 工具和器材

3.电路搭建

结合YL-236型单片机实训平台主机模块和显示模块,按照图4-4 连接电路。

图4-4 硬件接线图

二、程序代码的编写、编译

1.启动KeilC编程软件,新建工程﹑文件并均以“key”为名保存在文件夹中。

2.在key.c文件的文本编辑器窗口中输入程序代码。

3.编译源程序,排除程序输入错误,生成key.hex文件。

程序流程图如图4-5所示。

图4-5 按键计数器的程序流程图

参考程序:

【知识链接】Keil C51的运算符

1.赋值运算符(=)

“=”赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。

注意:这里并不是等于的意思,只是赋值,等于用“==”表示。

例如:count=5;

total1=total2=0;//同时赋值给两个变量

2.算术运算符(+,-,*,/,%,++,—)

+:加,单目正;-:减,单目负;*:乘法;/:除法;%:取模;

++:自加1(++a,先自加,再赋值;a++,先赋值,再自加);

- -:自减1(- -a,先自减,再赋值;a- -,先赋值,再自减)。

3.逻辑运算符(&&,||,!)

逻辑运算符是根据表达式的值来返回真或假。非0为真值,0为假值。

&&:逻辑与;||:逻辑或;!:逻辑非。

4.关系运算符(>,<,>=,<=,==,!=)

关系运算符是对两个表达式进行比较,返回一个真﹑假值。

>:大于,如4>5的值为0,4>2的值为1。

<:小于

>= :大于等于

<=:小于等于

== :等于

!=:不等于

这些运算符都很简单,但要注意等于“==”和赋值“=”的区别,看下面的代码:

条件判断:if(a = 3){…}

应该是:if(a==3){…}

5.位运算(&,|,^,~,>>,<<)(www.daowen.com)

&:按位逻辑与,如0x0f & 0x33 ,结果是 0x03。

|:按位逻辑或,如0x0f | 0x33 ,结果是 0x3f。

^:按位逻辑异或,如0x0f ^ 0x33,结果是 0x3c。

~:按位取反,如~0x33 ,结果是 0xcc。

>>:右移,移出丢去,移入补0。如 0x33>>1 ,结果是 0x19。

<<:右移,移出丢去,移入补0。如 0x33<<2 ,结果是 0xcc。

6.复合赋值运算符(+=,-=,★=,/=,%=,<<=,>>=,&=,|=,^=)

a+=b:相当于a=a+b。

a-=b:相当于a=a-b。

a*=b:相当于a=a*b。

a/=b:相当于a=a/b。

a%=b:相当于a=a%b。

a<<=b:相当于a=a<<b。

a>>=b:相当于a=a>>b。

a&=b:相当于a=a&b。

a|=b:相当于a=a|b。

a^=b:相当于a=a^b。

7.问号表达式(?:)

<表达式1>?<表达式2>:<表达式3>

在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。这是一种“二选一”的表达式。

例如:

a =(b>0)?(2*3):7;//当b>0时,a=6;当b不大于0时,a=7。

8.逗号运算符(,)

多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。

例如:

b=1;

c=2;

d=3;

a1=(++b,c—,d+3);//先选括号,再赋值,a1取d+3,即a1=6

a2=++b,c—,d+3;//赋值优先级高,所以a2取++b,即a2=2

9.运算符的优先级

(1)语句。

①赋值语句。

例如:

A=1+2;

T=Counter/3+5;

Area=Height*Width;

赋值不是“代数方程”,特别注意:

Num=Num+1;//这显然不是一个等式,这是把Num+1的值赋给变量Num

②用逗号分隔开的声明语句。

Char Area,Height,Width;

也可以把标识符写在不同的行上,例如:

float Area,

Height,

Width;

这样便于给每个标识符后边加上注释。

在声明变量的时候,也可以直接给变量赋值,这叫做变量的初始化

例如:int a=3;

也可以只初始化部分变量,例如:

int a=3,b,c=5;

int a=3,b=a,c=5;

③关于标准输入输出语句

51单片机的C语言程序中可以使用控制台格式化输入﹑输出函数scanf()和printf(),但因为单片机程序使用这两个函数不是很方便,所以不做介绍。

10.注释

(1)单行注释。

一行中,在“//”后面的内容,被解释为注释。

(2)多行注释。

以“/*”开头,用“*/”结尾,即/*…*/中间的内容被解释为注释。

三、系统调试

系统调试的步骤如下:

(1)使用程序下载专配USB线将计算机的USB接口与单片机主机模块程序下载接口连接起来。

(2)打开电源总开关,启动程序下载软件,下载可执行文件至单片机中。

(3)按下任意独立按键,并观察数码管显示情况,若实现任务要求,则系统调试完成;否则,需要进行故障排除。

◇任务评价◇

一、工艺性评分标准

工艺性评分标准如表4-3所示。

表4-3 工艺性评分标准

二、功能评分标准

功能评分标准如表4-4所示。

表4-4 功能评分标准

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈