杨 楠
(西安铁路职业技术学院,陕西 西安 710014)
当前,大多数院校对于电子设计类课程采用的授课方法都是先要求理解(理解原理、实现思路等),然后才是实践编程,这样会学生们对此类课程缺少初步的认知,更谈不上什么兴趣,因此教学效果不好。高职院校强调培养操作型人才,因此在日常授课中,不仅采用了现场教学等方法,还增设了许多实践内容,以提高学生的动手能力;但由于实践教学内容的设计相对薄弱,使得学生本身缺乏兴趣,无法将书本上的理论与实际结合起来,导致效果不明显,严重影响了学生动手能力的提高,甚至成为制约高职发展的瓶颈。为此,提出了一种新的单片机教学模式,即通过详细描述数字钟电路的整个过程设计,让学生自己动手从绘制电路原理图到利用ISIS软件仿真,再到元件焊接以及电路调试,最终生产出一台属于自己的数字钟。通过这一系列连续的工作,使学生切实体会到成就感,提升了动手能力,使学生对单片机技术产生初步的兴趣。
简易单片机应用大多采用最小应用系统,系统实物如图1所示,主要包括单片机电路模块、振荡电路模块、复位电路模块、电源接口模块以及≥12 MHz频率的晶振(波特率为1 MHz)。最小应用系统是最简单的单片机外围电路,许多功能都可以利用该系统实现,其制作成功后可为后续试验提供平台。
图1 单片机最小应用系统实物图
单片机最小应用系统材料清单见表1,可按表1准备原件即可实现MCS-51最小应用系统电路。
首先在面包板当中放置40脚的IC芯片[1],用来放置单片机;然后将P0口(管脚32~39)、P1口(管脚1~8)、P2口(管脚21~28)和P3口(管脚10~17)分别引出排阵,用于系统扩展。
表1 单片机最小应用系统材料清单
单片机复位电路形式多种多样,本文采用按键式复位电路,电路连接如图2所示。首先将200 Ω电阻的一端、电解电容的负极和1 kΩ电阻的一端均与单片机的9号管脚相连接;然后将电解电容的正极接电源VCC,1 kΩ电阻的另一端接地;最后将200 Ω电阻的另一端与复位开关相接,复位开关的另一端接电源。复位开关共有4个管脚,在接线时选择对角线接法即可[2]。
电路连接如图2所示,首先将12 MHz的晶振两端与单片机的18脚、19脚分别相连接;然后将2个30 pF的电容的一端与晶振的2个管脚相接;最后将2个电容另一端分别接地即可。
在单片机最小应用系统板上设计电源接口模块,此模块主要采用4个排针作为电源插口,且均为并联方式连接,其中J1为电源输入端,J2~J4可用于系统扩展,为其他模块提供电源,电路连接如图2所示,单片机的31号管脚应接电源,表示使用片内ROM。
图2 MCS-51最小应用系统原理图
列出制作简易数字钟所需的原件清单(见表2),其中74HC245芯片起到电流放大作用,由于MCS-51端口输出信号的驱动能力有限,因此为了增强信号的驱动能力,需经过74HC245放大,8只PNP型9012三极管作为开关使用配合选通管脚,当某一只引脚输出低电平时,其所接的三极管便导通,使得该管所接引脚的信号传送到数码管的引脚上[3]。
表2 数字钟所需元器件清单
在软件设计中遵循V模型自顶向下的设计原则[4],先设计好程序总体运行时的逻辑框图,在此阶段可以不考虑具体的实现细节,以免影响整体设计思路,主体程序结构框图如图3所示。
图3 主体程序结构框图
主体程序如下:
1 #include
2 #define uint unsigned int
3 #define uchar unsigned char
4 uint time_t; //毫秒统计值
5 #uchar hour,min,sec; //数码管显示值,小时,分,秒
6 uchar code led[10]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0Xe0, 0xFE,0xF6}//数码管显示0~9
7 void main()
8{
9 sec=56;
10 min=59;;
11 hour=23;//时间初始化为23:59:56
12 while(1){
13 DISPLAY_NUM(sec,0x01);//显示秒
14 DISPLAY_NUM(min,0x08); //显示分
15 DISPLAY_NUM(hour,0x40); //显示小时
16 DISPLAY_CHAR( ); //显示分隔符“—”
17 TIME_TAKE( ); //调用时间调整函数}
18}
程序第一行包含AT89X51.h头文件,该文件包含常用的51系列单片机宏定义,第2和第3行将表述方式较为复杂的无符号整形、无符号字符型2种数据类型采用定义的方法进行简化改写。第4和第5行共定义了4个全局变量,分别用于存储毫秒统计值、小时值、分值和秒值。第6行定义了一个容量为10的一维数组,用于存储能够在数码管上显示0~9这10个数字的十六进制数。主程序一开始对数码管进行了初始化,这里设置为23:59:56,而主程序中被调用最频繁的函数DISPLAY_NUM其函数原型为DISPLAY_NUM(uchar num,dis_w)其中局部变量num传递被送显数值,而dis_w变量则是传递送显数值显示的位置。下述分析时间调整函数TIME_TAKE()。
Void TIME_TAKE()
{ if(time_t>=1000) //当总延时数为1 s时
{ time_t=0; //time_t 清零
sec++; //秒加1
if(60==sec) //当秒值为60时
{ sec=0; //秒值清零
min++; //分加1
if(60==min) //当分值为60时
{ min=0; //分值清零
hour++; //分加1
if(24==hour) hour=0; //当小时为24时,小时清零
} } } }
时间调整函数的处理流程如下:首先判断毫秒累加值是否达到1 000,若是,则秒累加值加1,同时毫秒累加值清零;如果秒值到了60,则分累加值加1,同时秒值清零;若分值到了60,则小时累加值加1,同时分值清零;如果小时累加值到了24,则小时累加值清零;上述判断只要任何一步不满足条件则退出该函数。
利用上述源代码及硬件电路图可以在ISIS中进行虚拟仿真测试,此软件可以模拟单片机应用程序的运行结果,在此平台下可以验证硬件电路及代码的正确性,并进行代码的修改以及优化,只有仿真结果正确,才有必要制作电路板实现硬件电路[5]。
启动Proteus仿真软件,根据硬件连接图,在元件库中找出相应原件并连接(见图4),共需用到AT89C51芯片、4009反向器和8位1体7段数码管7seg-mpx8。单击元件库“P”按钮,在弹出对话框中输入所需原件名,并将其布放到位,此处在仿真时做了如下省略:实际电路中,从单片机P0端口引出的8脚首先通过74HC245芯片后,再接入数码管的a~h脚,这是因为需要考虑电流的驱动能力,而仿真只是为了验证程序的正确性,因此在仿真图中可以省略,直接将P0口与数码管管脚相连,减少仿真难度;同时实际电路中数码管8只位选脚同时也是数码管工作时电流的提供脚,因此提供8只PNP三极管做开关管,既可以起到选通作用,也可以提高电流的驱动能力,而仿真中均用4009反相器代替,模拟选通作用。
制作电路板应遵循如下原则:1)考虑原件在面包板上布局美观、大方,相关元器件尽量接近;2)考虑原件走线需要,尽可能预留走线空间。
走线时线路尽量布放在原件的背面,如果实在布放困难必须布放在原件侧,则依据“正面走横线,背面走竖线”的原则。
制作步骤如下。
图4 Proteus仿真图
1)找出2个12脚IC底座,放置合适位置,使得2个4位数码管安装完成后正好组成1个8为数码管。
2)确定2个4位数码管的12只引脚,哪8只控制数码管的7段及小数点,哪4只脚是位控制脚并标示。
3)分别将2个4位数码管相应的a-a、b-b、c-c、d-d、e-e、f-f、g-g、dp-dp等8对脚两两连接,并引出到合适位置成为8只段脚。
4)将2个4位数码管的8只位选脚也分别引出到合适位置,成为8只位脚。
5)在8只段脚引出处连接8只电阻,并通过该电阻连接74LS245芯片相应的引脚处,同时将245芯片另8只脚连接到排针处。
6)8只位脚引出到8个PNP型三极管的集电极,发射极连在一起接VCC,基极接电阻后连接到另外的8只排针处。
实际制作好的电路板如图5所示。
图5 电路板实物图
考虑到高职院校的特点,单片机教学应该是“模仿—理解—扩展”的过程。模仿阶段主要是“玩”的阶段,通过模仿学习让学生对这门课程产生兴趣,在这个阶段应尽可能地提供详细的资料,如电路图、原理图、操作流程和源代码等,这样初学者即使不懂也能依样画葫芦做出成品,这对提高学习兴趣有着至关重要的作用;之后的理解阶段是真正的学习过程,从单片机的原理到高级应用以及源代码的编写进行融会贯通, 在原来模仿的基础上能够加以改造从而设计出自己的产品;最后的扩展阶段则是没有明确的界限,也是一个长期的过程,能够得心应手地设计解决生活中的问题。
为实现上述目的,设计了一款较为容易实现的单片机应用电路,通过让学生亲自动手参与从电路的设计到项目仿真,再到元件的焊接,最后整体调试。这一整套生产工艺,让学生们了解单片机电路板的开发制作过程及原理, 不仅提高了学生的动手能力,更重要的是提高同学们对本门课程的兴趣,真正做到学以致用,让大家知道平日上课所学的理论知识在现实当中具体的运用。经过两届学生的现场教学发现,同学们通过这样的实训模式后,普遍对单片机的后续功能开发充满了兴趣,并养成了独立思考的能力,动手能力有了明显提升。
[1] 朱可斌.电路基础[M].西安:西安电子科技大学出版社,2005.
[2] 傅丰林.低频电子线路[M].北京:高等教育出版社,2005.
[3] 孙津平.电子技术及其应用[M].北京:北京理工大学出版社,2012.
[4] 丁峰,柳西玲.UML技术及应用[M].北京:高等教育出版社,2004.
[5] 倪志莲.单片机应用技术[M].北京:北京理工大学出版社,2010.