APP下载

发挥 Proteus 和 Keil 软件在单片机教学中的作用

2019-09-07张正明王丽娟石建国电子科技大学中山学院

数码世界 2019年9期
关键词:管脚数码管按键

张正明 王丽娟 石建国 电子科技大学中山学院

1 引言

单片机课程是电子信息类专业必修的专业课程,是一门综合性和实践性都很强的课程,通过该课程的学习,使学生了解单片机的基本原理及其应用,了解汇编指令功能、编程方法,掌握单片机应用系统的硬件组成,能够使用C51 语言进行软件开发,培养学生分析、解决实际问题的能力。

在进行传统的理论教学时,要想课堂教学安排生动、有趣,难度比较大,难以让学生看到电路变化、程序变化对实验结果的影响,难有切身感受;在进行实践教学时,受教学场地、设备数量和实验箱产品更新慢等因素的影响,操作灵活性有限。鉴于此,我们在教学过程中引入 Proteus 软件和Keil 软件,可以方便地在 Proteus 平台上中绘制和修改硬件电路图,加深学生对单片机应用系统硬件电路的理解;在 Keil 软件中编写和修改相应指令,然后在 Proteus 平台上进行联合仿真。

在虚拟的硬件平台上看到程序运行的结果,可以加深学生对电路连接和指令功能的理解。这样,课堂上方便老师演示和讲解,实验课上和课下方便学生进行各种应用的设计,激发学生学习的兴趣和积极性,增强学习效果。

发挥Proteus 软件和 Keil 软件的联合应用,可以节约耗材,缩短开发周期,具有逼真效果。下面以矩阵键盘的输入和数值显示为例说明该方法的优势。

2 4*4 矩阵键盘及显示

4*4 矩阵键盘,共16 个按键,如果连接成独立按键就需要16 个IO 管脚,而连接成矩阵键盘只需要8 个IO 管脚,节省了8 个管脚,按键越多节省的管脚越多,这就是矩阵键盘的优点,当然其缺点就是判断具体按键的过程要复杂一下,这是以软件的复杂性来换取硬件资源的节省的。

在Keil 平台上建立工程文件并编辑程序,汇编链接产生HEX文件,在Proteus 平台上连接电路图,并在单片机芯片的属性中链接对应的HEX 文件,即可以运行单片机应用系统。

图1 4*4 矩阵键盘及显示

在图1 中,第0、1、 2、 3 列分别与P1.0、P1.1、 P1.2、 P1.3 相连接,第0、1、 2、 3 行分别与P1.4、 P1.5、P1.6、P1.7 相连接。在程序中可以先对管脚做适当定义,后面的程序就可以只考虑行列位置,而忽略具体管脚。由于采用逐行扫描方式,我们这里只定义列管脚,不定义行管脚。逐行扫描时,只有加到检查行的信号为0,而其他行和所有列信号为1,4 次扫描的输出信号我们用4 个元素的一维数组output 来表示。

sbit COL0=P1^0;

sbit COL1=P1^1;

sbit COL2=P1^2;

sbit COL3=P1^3;

uchar code output[4]={0xEF,0xDF,0xBF,0x7F};

我们用一个函数getkey( )来实现按键的读入和判断,当K0~K15 按下时,函数返回0-F,如果没有按键按下,函数返回0xFF。下面就是函数中的关键程序段。每个for 循环都执行4 次循环,相应地对4 行按键进行行扫描判别,i 对应第i 行,然后根据COL0~3的值判别按键列的位置,从而得到按键值。

if(P1= =0x0F)

result=0xFF;

else

{

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

{

P1=output[i];

if(!COL0) {result=0+4*i;break;}

else if(!COL1) {result=1+4*i;break;}

else if(!COL2) {result=2+4*i;break;}

else if(!COL3) {result=3+4*i;break;}

}

}

有了getkey( )函数,就可以在需要的时候调用该函数,读取按键值,并进行显示,下面展示了本程序的主函数。void main()

{

uchar x=0;

ledtube(x);

while(1)

{

x=getkey();

if(x!=0xff)

ledtube(x);

}

}

其中,ledtube(x)函数把x 值以数码管形式显示出来,这里的数码管与P2 口相连接,数码管采用共阴极数码管。图1 中显示的是当按键K9 按下时的运行情况。

上例中还可以通过改变R2 的值,观察限流电阻的作用,当电阻值由51 欧姆变小时数码管亮度增强,而当电阻值由51 欧姆增大时数码管亮度减弱,电阻增大到120 欧姆时,数码管不亮。

如果以上矩阵键盘接线有变化,只需要在定义相应的管脚和output 初始化时做相应的修改即可。也可以按列扫描的方法读取按键值。

3 6*6 矩阵键盘及显示

图2 6*6 矩阵键盘及显示

如果增加按键数量,也可以由以上的程序稍作修改,就可以完成相应的任务。同时也可以增加独立数码管的数量显示更多的信息。

图2 是6*6 矩阵键盘的连接图,为简单起见,将列信号与P1 口相连接,将行信号与P3 口相连接,再增加一个数码管,通过修改程序可以实现36 个按键的读入和值的显示。

两个数码管分别连接到P0 口和P2 口,但是这时必须采用共阳极数码管,同时在P0 口的管脚处增加了上拉电阻,上拉电阻值为10K欧姆。这是P0 端口在使用时和其它三个端口的区别。所有这些设置和现象在仿真环境下可以轻易做到,图2 是按下K26 时的运行情况。

4 结束语

本文以矩阵键盘的读取和值的显示为例,介绍了Proteus 软件和Keil 软件在单片机学习中的作用,有效利用好这两个软件可以方便介绍电路和指令的作用,提高教学效果。

猜你喜欢

管脚数码管按键
物理项目教学设计,用单片机控制四位数码管显示
面向DSP+FPGA通用处理架构检测的硬件系统设计
基于有限状态机的按键检测程序设计
基于51单片机的分数计数器设计
非触勿动 秒治键盘误触
Arduino编程
MC9S08FL16单片机数码管静态显示分析
一种异步FIFO的Read/Write Data Flow Through功能测试方法∗
略谈如何利用三极管管脚间电阻值判断其型号及管脚
其实真的很简单教你轻松关闭WP8.1手机按键灯