发挥 Proteus 和 Keil 软件在单片机教学中的作用
2019-09-07张正明王丽娟石建国电子科技大学中山学院
张正明 王丽娟 石建国 电子科技大学中山学院
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 软件在单片机学习中的作用,有效利用好这两个软件可以方便介绍电路和指令的作用,提高教学效果。