程阔华
(杭州万向职业技术学院,浙江 杭州 310023)
全人发展指全面、和谐发展。我们学院以全课程育人、全方位育人为特色,倡导“学为中心”的课堂革新,培养能自律自主,有国际视野、创新创业、中英双语和终生学习能力的学生。目前,人工智能、机器人在各行业的发展如火如荼日新月异。综合国力竞争说到底是人才竞争,汽车专业的学生学习《单片机原理及应用》这门课是非常有必要的,这门课的教学同样也承担着培养学生的重任。
《单片机原理及应用》是高等职业院校新能源汽车技术专业等以设计、制作为关键技能的相关专业的一门专业基础课。课程理念和设计思路要体现“三化三元素”的要求,建立在对职业活动的调研和分析基础上,体现工学结合职业能力培养特点和全人发展培养理念,构建行动导向的教学模式,摒弃基于学科体系的传统教学模式,摆脱以知识内容灌输为主的教学方法,教学内容设计以实际工作过程和工作任务为载体,采用模块教学,设计学习情境并以任务形式加以实施。
通过本课程的学习,学生能初步掌握单片机的原理及其在日常生活中的应用,学会单片机基本设计、制作、编程等,养成良好的职业道德与规范等综合素养,培养学生动手动脑能力、创新能力和分析问题解决问题的能力, 为将来从事新能源汽车电子电器新产品设计开发等工作打下基础。
单片机理实一体化教室每台电脑上安装有Keil 软件、Proteus 仿真软件、stc-isp 烧结软件,C51 实验板。用Keil 软件完成C51 程序的编制(c 语言)与功能调试。还可以在Proteus 界面上用仿真电路测试,但更多地是直接用C51 实验板验证结果。
在理实一体化教室上课,按照老师的指导学生边学边做,动手又动脑。这个阶段可以培养学生的模仿能力,这也是很重要的,它能让学生积聚能量,培养自信心,掌握基本的知识。Keil 软件的界面是英文的,我们不要汉化它,这样可以把菜单上一些英文单词熟悉,经常点击你就会记住了。
完成教学任务:点亮一个LED,自己好像有成就感了。如果让你去做个流水彩灯,开发一个简单的产品,只要加上驱动电路,就可以做出漂亮的流动彩灯了!
只要你想得到,led 灯想怎么流就怎么流!在这时可以“大展宏图”,放飞自己的思想。
(1)计算机编程工作是费时费力的,特别是脑力。如果你没有耐心恒心是难于完成工作的。当你的知识积累到一定的程度,你就能看得懂程序了。自己会写程序,也为看懂打下了基础。
(2)如果出现了错误,一般软件会给出提示,根据它去修改。所以要有一定的英语水平。当然你在写的时候要小心点,尽量不要出现低级错误,比如单词的拼写错误。
在Proteus 界面上仿真能成功,但是在实验板上“没有反映”。是什么原因呢?此处培养了学生分析问题解决问题的能力,要勇于探索找到问题的症结,不怕困难。
在老师的指导下,原来是接口不同。实验板的led 发光二极管接在P1 口上,数码管接在P0 口上,并且由P2^6、P2^7控制。把程序稍作修改就成功了,这样学生就尝到了成功的喜悦,得到了学习的乐趣。举一反三,依此类推,触类旁通。“心有灵犀一点通”,学生打好了基础,掌握了一些基本的技能,加上老师的 “点拔”,自然就会开窍了。
科学是严谨的,来不得半点的马虎,更不能敷衍搪塞,有一个地方出了问题哪怕是标点符号出错程序也不能通过。经常会出现中文的分号“;”不行,要用英文的分号“;”。但是我们可以摸着石头过河,有错改错,改了就行。要大胆地试,反复地试。相信总会成功。
要善于提出问题,灵活运用知识。我们已经学习了led灯点亮、数码管的显示、LCD 液晶显示。数码管能显示led灯的盏数,那么能否用1602 液晶显示led 灯盏数呢?
借鉴别人的程序,也算参考吧,但不能照抄照搬,要吸收别人的经验取长补短。注意要有所创新,“一个国家,一个民族如果没有创新,也就输掉了未来”。高新技术、核心技术是买不来的,要不来的。所以在本课程的学习中要贯穿创新的理念,教书育人。
课堂上的时间不够用,课外要花一点时间,刚开始的一个星期可能要花的时间多些,头痛的时间也会多些,这是“黎明前的黑暗”,要冲过去。
学以致用,我们的学习是要有成果应用的,往大的方面说,回报社会造福人类。结合汽车专业知识老师布置一个大作业:设计出汽车转向灯的控制程序。实验板显示如图1 所示。
允许同学们在课后,以小组的形式共同完成,这样培养了学生的协作精神,使得同学之间的感情融洽。
图1 模拟汽车转向灯闪亮
程序完整代码如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint m1,m2,b;
sbit ldeng=P1^0; //led 灯定义
sbit rdeng=P1^7;
sbit S2=P3^4; //独立按键位定义
sbit S3=P3^5;
sbit S4=P3^6;
sbit S5=P3^7;
uchar a,flag1,flag2,flag3;
void display1(uint a1);
void display2(uint a1);
void delay(uint x1) //延时函数
{for(m1=x1;m1>0;m1--)
{for(m2=120;m2>0;m2--);
}
}
void init()
{TMOD=0x01; //设置定时器0 为工作方式1
TH0=(65536-50000)/256;//给定时器0 装初值,12M 晶振定时时间为50ms
TL0=(65536-50000)%256;
EA=1; //开总中断
ET0=1; //开定时器0 分开关
TR0=1; //启动定时器0
}
void timer0() interrupt 1//中断服务程序,其中"1"是定时器0 的入口序号
{TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20) a=0;
}
void main()//主函数
{ init();
flag1=0;
flag2=0;
flag3=0;
while(1)
{P1=0xff;
if (flag2==0) {
if(S4==0) //右转向
{delay(50); //延时
if(S4==0) //即消除前沿抖动
{TR0=1;
while(!S4)
{display1(a);
delay(20) ;
flag1=1;
flag2=0;
flag3=0;
}
}
}
}
if (flag1==0) {
if(S2==0) //左转向
{delay(50);
if(S2==0)
{
TR0=1;
while(!S2)
{display2(a);
delay(20) ;
flag2=1;
flag1=0;
flag3=0;
}
}
}
}
if(S5==0) //双闪
{delay(50);
if(S5==0)
{ b++;
TR0=1;
display1(a);
delay(50) ;
display2(a);
delay(50) ;
flag1=1;
flag2=1;
flag3=1;
if (b%2==0) {
b=0;
flag1=0;
flag2=0;
}
}
}
if (flag1==1 ){ display1(a); delay(20) ;}
if (flag2==1 ){ display2(a); delay(20) ;}
if (flag3==0) {
if(S3==0) //停止
{delay(50);
if(S3==0){
TR0=0;
while(!S3)
{flag1=0;
flag2=0;
}
}
}
}
}
}
void display1(uint a1)
{ P1=0xff;
if (a1%2==1) ldeng=0;
else ldeng=1;
}
void display2(uint a1)
{P1=0xff;
if (a1%2==1) rdeng=0;
else rdeng=1;
}
学生展示自己的成果。通过这个大作业把所学到的有关知识(循环语句、判断语句、函数、中断、延时等)融会贯通,按钮控制led 灯分别点亮并且闪烁,并且学会调试。如果发现与实际不相符合及时进行修改,比如编写的程序使得:按了左转向按钮再按右转向按钮时会同时亮灯,这是不行的。
全人发展,有利于提高教学质量,提升教学的时效性。在《单片机原理及应用》的教学中,充分调动学生的学习兴趣,结合汽车专业课的知识应用单片机编程设计,同时培养了学生全方位的能力。如果学生想进一步发展还可深造,创新开发新的产品这都是有可能的,正所谓 “师傅引进门,修行靠个人”。