日期:2023-01-23 阅读量:0次 所属栏目:学前教育
【文章编号】0450-9889(2017)05C-0158-03
一直以来,传统C语言程序设计教学主要是以语法、语句和结构为中心,以数据类型、变量、运算符、数组、指针和函数等为基本知识点展开。这样的教学模式虽然可以很好地按照教材逐一讲授知识内容,但是也容易使学生陷入知识细节,而忽视C语言程序的具体应用。虽然学生通过不断地学习基础知识和练习经典算法,能够阅读、修改、编写简单C语言程序,但是学生的抽象思?S、自主创新意识、解决实际问题能力难以得到全面培养。另外,由于高职学生的计算机基础、逻辑思维、英语基础和数学运算等综合能力都较为薄弱,这些因素也影响了学生学习C语言程序设计的兴趣。
因此,为了提升学生阅读、编写和调试程序的能力,激发学生自主学习C语言程序设计的兴趣,结合电类专业人才培养目标,提出以单片机项目为载体的C语言程序设计教学模式,通过实验现象启发学生思考目标实现方法,在实验过程中引入重点理论知识,让学生带着兴趣和目标进行C语言单片机项目学习。
一、引入单片机项目驱动C语言程序设计教学
首先让学生体验C语言编程控制单片机乐趣,然后,通过不同的项目引入C语言程序的结构、语法、语句等相关知识内容。例如,通过典型的跑马灯项目引入for循环语句,通过数码管倒计时显示引入一维数组,通过八路抢答器引入if、switch选择语句。利用单片机项目直观可控的特点,以实用、够用为导向,构建适合高职学生特点的C语言单片机项目框架,具体的教学项目框架如图1所示。
(一)引入简单易学的Arduino单片机实训平台
由于51系列单片机价格低廉,且配套教学资源丰富,传统单片机教学一般都是采用51系列单片机,但是,51单片机最大的问题就是需要使用者掌握其内部结构、寄存器、I/O设备等诸多底层硬件结构,然后才能开展C语言程序设计教学,过多的底层硬件结构会增加学生学习单片机编程的难度,而Arduino平台则绕开了单片机底层硬件结构,仅需少量指令即可开始程序设计,其自带库函数也已包含许多常用I/O设备驱动,在此基础上进行二次开发,很容易完成功能多样的作品。
Arduino平台的软硬件完全开源,许多常用子函数已经封装成为库函数,在此基础上进行程序编写,可以大大缩短软件开发周期,提升编程效率。
例如,编写一个毫秒级的延时函数,使用51单片机编写则需要多行代码才可实现,具体延时函数如下:
void delay_ms(uchar t)
{ uchar i,k;
while(t--)
{ for(i=1;i<130;i++)
for(k=1;k<130;k++) ;}
}
但是,采用Arduino单片机只需调用一个毫秒级延时函数,即编写以下一条代码:
delay(n); // 括号中的n表示延时长度,单位为ms。
一个同样功能的延时函数,51单片机需要多行代码,而Arduino单片机仅需一个函数调用,这种把过程集合化、函数化的过程省去了繁琐的细节,既简化了编程工作量,又让学生更容易理解和接受。
(二)单片机控制LED闪烁,学习while循环语句
单片机控制一个LED灯闪烁项目的程序和硬件电路都比较简单,很适合作为C语言单片机教学的入门实验,LED灯闪烁流程图及主要对应代码如图2所示。通过观察LED灯闪烁实验现象,启发学生思考实现LED灯闪烁的分解步骤,结合C语言程序代码,学生可以直观了解C语言程序控制指令在LED灯上所呈现的对应关系。
在此项目驱动之下,学生更加容易理解while循环语句的使用方法,同时,也能启发学生思考项目中其它C语言程序的知识要点:
1.Arduino单片机C语言认知。单片机C语言程序的结构是由setup()初始化函数和Loop()主函数构成,初始化函数主要完成单片机I/O口的功能设定,例如,pinMode(i,OUTPUT),表示第i个引脚为低阻抗输出模式;Loop()函数则是一个程序里面的主函数,编程者的所有想法可以通过C语言控制单片机具体实施。
2.变量及函数调用。通过观察LED灯闪烁的快慢,深入学习延时函数delay(n)的使用方法,其中n为参数传递,控制延时长度,单位是毫秒,调整变量n即可改变LED的闪烁速度。
3.赋值及输出控制。digitalWrite(ledpin,HIGH)语句表示ledpin引脚输出高电平,单片机所有数字引脚有两种状态,分别为高电平HIGH和低电平LOW,其状态的改变由关键词digitalWrite进行控制。
4.顺序结构及循环结构。C语言程序一般默认是按照顺序结构执行代码指令,但是,在执行重复且有规律事件的时候需用循环控制结构,LED灯闪烁就是一个不断重复亮灭的过程,因此,while语句或for语句都可以实现循环控制功能。
(三)开关控制LED灯,学习if选择语句 外部开关控制LED灯的亮灭,实验现象为:闭合开关SW则LED灯亮,断开开关SW则 LED灯熄灭。通过此项目可以引导学生掌握单片机I/O口状态的读取方法,以及重点使用if语句进行逻辑状态判别,程序关键代码如下:
k=digitalRead(SW); //读取数字脚0口的状态,需要digitalRead( )语句才能得到引脚的状态。
if(k==0) //判断开关的状态,按下为0,放开为1。
digitalWrite(ledpin,HIGH); //写ledpin状态,HIGH驱动灯亮。
else
digitalWrite(ledpin,LOW); //写ledpin状态,LOW则灯灭。
在此基?A上再进行功能深入拓展,把一些实际生活经验引入程序设计。例如,当开关断开后,LED灯需要延时一段时间再熄灭,这样的逻辑思维可以很好解决晚上关灯后不需要摸黑上床睡觉的问题,以此类推,启发学生思考其它类型用到开关输入量的地方,还有银行ATM的按键、食堂刷卡机等生活实例,这样就能很好激发学生的自主探索精神和学习热情。
(四)单片机控制LED流水灯,学习for循环语句
在第一个LED灯闪烁项目的基础上,增加LED灯的数量,让LED灯呈现流水效果,利用Arduino单片机的数字IO口D0至D7分别控制八个LED灯,LED流水灯的硬件电路如图3所示,关键语句如下:
for(i=0;i<8;i++) //控制8个灯从左到右轮流亮灭,实现视觉流水效果。
结合实验现象,引导学生思考for循环语句的用法,重点掌握语句中循环变量初值的设定、循环次数、结束条件,以及循环内容的分解步骤。借助LED灯轮流点亮的过程,可以让学生很好理解延时变量长度对应控制LED流水速度,循环次数对应控制参与循环LED个数,这种直接让程序语句关联实验现象的教学方法,能更加直观有效帮助学生掌握for语句的使用方法。在八路LED流水灯的基础上,还可以引导学生继续增加LED灯的数量,制作心形LED流水灯,进一步激发学生自主创新思维,编写更加丰富多彩的LED流水效果。
(五)控制数码管显示,学习一维数组
通过控制一个数码管显示一位数字,引入七段数码管显示驱动方式,然后进一步学习显示数字“0”到“9”的方法,并且把驱动数码管显示的编码进行归纳形成一个组,自然引入“一维数组”概念。驱动一位数码管显示的硬件电路如图4所示,其中单片机的数字脚D0至D6分别接到七数码管的a至g引脚。
数字“0”到“9”的一维数组编码定义为:char table []={0x40,0xf9,0xa4,0x30,0x19,0x92,0x02,0xf8,0x00,0x10},分别将数组中的编码通过八位并行输出方式驱动七段数码管,即可显示“0”至“9”之间的数字,C语言的输出表达方式为:PORTD=table[i];在显示固定单个数字的基础之上,还可以结合for循环语句和delay(n)延时函数,实现数字“0”至“9”之间循环动态显示。
在完成数码显示基本功能之后,继续沿用该硬件电路,引导学生修改程序代码,设计一个“九秒倒计时器”,并且使用定时器取代delay()延时函数,让学生在清楚项目要求和实验结果的前提之下,运用C语言编写定时中断函数。
结合实际生活,在原有硬件电路基础之上,增加一定数量的按键开关,即可变成一个多路抢答器,启发学生思考如何检测键盘输入、数据处理、结果显示及锁定,在完成逻辑分析之后,再具体引入端口状态读取函数digitalRead()、是否有按键抢答判别语句if()、结果显示语句PORTD=table[i]、状态锁定使用循环语句while()等关键C语言知识,通过抢答器项目的学习,能够帮助学生直观认识C语言的更多用途,激发学生继续深入C语言程序设计。
(六)控制LED点阵显示,学习二维数组
类比日常生活,点阵显示广告屏在街上随处可见,深入分析点阵屏显示原理,可以把大型屏幕可以分解成多个16×16或8×8的小模块,结合点阵显示现象引入“二维数组”,让学生根据现象联系C语言程序运用场合,这样的项目导入方式能够有效提高学习针对性。通过进一步分析点阵显示过程,可以明确点阵显示需要行列同步配合、延时长度合适才能正常工作,该项目重点训练了如何从二维数组里调取行和列的信息,以及合理控制延时函数的方法,结合C语言程序综合运用了逐行动态扫描技术。经过点阵显示控制项目的学习,学生能够掌握C语言控制一个静态字的显示方法,同时,引导学生思考如何实现动态显示多个文字,让学生自主思考C语言程序更丰富的应用范围。
(七)设计简易数字温度计,学习数据处理及函数调用
温度是日常生活中经常接触的一个物理对象,冰箱、空调和电磁炉等家电都需用到温度测量与控制,因此,利用单片机设计一个简易数字温度计能够接近实际生活,比较容易吸引学生参与项目设计与制作。
由于温度为连续变化的模拟量,需要经过模数转换之后才能送入单片机进行数据处理,而Arduino单片机集成有十位模数转换功能,即温度模拟量对应0~1023之间的数字量。因此,简易的数字温度计的设计思路是:首先进行温度模拟量到数字量的转换,然后将AD转换结果进行换算处理,最后将处理后的实际温度值送入LCD液晶显示。
简易数字温度计的设计流程图及其主要程序代码如图5所示,通过简易数字温度计项目的学习,学生能够掌握参数传递、返回值、函数调用和数据运算等C语言相关知识。 (八)设计无弦电子琴,综合运用C语言程序设计
电子琴已然成为了人们喜爱的一种演奏乐器,通过单片机也可以设计一种无弦电子琴,一段乐曲是由许多不同的音阶构成,每一个音阶对应着一个独有的频率点,因此,只需要将不同的频率点进行有规律的组合,就可以谱写一段有趣的音乐。利用单片机定时器产生不同频率的方波是一件非常容易实现的事,前提是需要把某一首歌曲的音阶所对应的频率点弄清楚即可,电子琴的按键将由光电传感器替代,即光电管感应器输出高低电平作为音符的按键,每一个按键对应一个音阶,单片机只需检测I/O口的高低电平即可判断是否有键按下,然后,输出特定频率的方波驱动扬声器发出对应的音阶。
现以八度中音音符为例,音符与频率关系的相关计算数值如表1所示,单片机定时器TIMER产生各中音的定时长度根据表1数据即可完成设定,将全部中音音符建立成一个表格,单片机通过查表方式可以快速获取与音符频率相对应的定时值。
电子琴项目具有较强的互动性,学生通过体验无弦弹奏的乐趣,进而激发学生设计、制作单片机电子琴的兴趣,培养学生运用C语言程序控制硬件电路的能力。
二、?Y束语
本文针对C语言程序设计在应用电子技术专业课程教学中所存在的问题,提出了以单片机为载体的项目式教学法,把C语言程序设计的重点知识融入相关子项目,让学生带着兴趣和目标进行课程学习,通过项目设计与制作提高学生编写、调试C程序的能力,经过两个学期的实践教学,学生编程技能得到有效提高,教学效果有了明显改善,基本实现预期教学目标。
本文链接:http://www.qk112.com/lwfw/jiaoyulunwen/xueqianjiaoyu/219892.html