高职电气类专业C语言与单片机课程融合教学的实践

2020-08-10 12:25段有艳李光辉
昆明冶金高等专科学校学报 2020年2期
关键词:C语言程序设计单片机

段有艳,李光辉

(昆明冶金高等专科学校电气与机械学院,云南 昆明 650033)

C语言是高职院校电气类专业开设的一门专业基础课,是单片机原理及应用、DSP和ARM等嵌入式系统的编程基础,在教学组织环节上是这些专业课程的前导课程。C语言既兼具高级语言和汇编语言的优点,又具有语言简洁紧凑、类型丰富、结构标准、程序设计自由度大、可直接访问物理地址、生成目标代码质量高、程序执行效率高、移植性强等特点。

由于其结构标准、移植性强、可直接访问物理地址,故高职电气类专业普遍选择C语言作为专业的编程语言,通过学习C语言课程,使学生掌握程序设计的基本方法,形成程序设计基本思想,具备程序设计、调试与应用能力,为学生进一步学习后续专业课程和从事软件开发工作打下坚实基础。

1 课程现状分析

1.1 课程开设

按照C语言课程标准及教材内容,教学安排一般围绕C语言概述、C语言程序设计的初步知识、顺序结构程序设计、选择结构程序设计、循环结构程序设计、数组、函数、编译预处理、指针、结构体、共用体与枚举类型、位运算、文件教学等内容来开展,包括完成教学内容所涉及的编程训练。

单片机是电气类专业的一门专业课程,要求学生通过学习掌握单片机的基本理论、基本知识与基本技能,例如须掌握单片机系统的设计、单片机编程方法和调试方法,了解单片机在检测、传感、控制等领域的应用,课程实训单元要求学生通过单片机简单系统设计和操作,能独立完成电路设计、印刷电路板制作、元器件焊接、系统调试、Keil程序使用。程序设计内容贯穿于教学的全过程。

1.2 存在问题

1.2.1 课程数学运算内容居多

目前流行的C语言教材中基本为普适性(通用)教材,缺乏专业针对性,教材涉及的数据类型、函数、结构化语法、数组、指针等内容大部分以数理、算法案例展开,涉及到较多的数学运算举例。由于高职学生数学基础薄弱等原因,C语言教学过程中,教师普遍感到学生数学运算能力不足、逻辑思维能力不足,学生对数理、算法等理解困难。

1.2.2 课程专业应用性实例偏少

目前通行的C语言程序设计教材,考虑到课程的系统完整性,一般完成教材内容的课时均需60学时以上,教材列举的大量例子均围绕程序设计理论展开,例如数的排列与分解、水仙花数、兔子问题、冒泡程序等都是常用例子,数学基础薄弱的高职学生难以理解本门课程的实际应用并完成实训,编程训练大多对照教材照搬照抄程序,教学效果不理想。缺乏围绕单片机、嵌入式开发的C语言教材,导致电气类专业的C语言课程教学缺乏针对性、实用性强的案例。

1.2.3 课程专业知识衔接性不强

C语言作为专业课程的编程基础课,一般开设在前,而作为专业课的单片机开设在后,2门课程跨学期开设,学生对C语言知识的遗忘导致教学过程中教师既需要花大量的时间来复习和讲解C语言相关的知识,又要按进度完成单片机教学内容。而且在教学实施过程中,C语言课程教学内容以数学运算内容居多、应用型案例偏少,无法与单片机课程对应,2门课程知识断裂,衔接性不强。

基于以上原因,电气类专业C语言教学开展中存在教学目标及内容与专业的针对性不强,而单片机课程教学开展中存在C语言知识遗忘或储备不足的问题,导致学生两门课程的学习效率下降。为更好地促进教学效果,专业考虑在电气类专业的教学中强化2门课程的衔接,例如在C语言课程中融入部分单片机的基础知识,本着够用、适用、适度的原则结合单片机课程理论知识进行有针对性的讲解;同时,在C语言课程实训中引入适度的单片机实训项目,以增强C语言课程学习的目标感和认同感,一来克服C语言中实训程序纯数学、纯算法的枯燥感,二来提高课程的针对性和实用性,实现专业基础课与专业课程的有机融合,进一步提升学生的学习兴趣和动手能力。

2 课程融合思考

2.1 合理设定理论教学设计

目前高职院校开设的单片机课程大多基于C51单片机开展教学,C51单片机软件设计使用ANSI 标准,C语言作为编程开发软件,故C语言课程及教材选取以ANSIC为标准,以VC++为编译环境。

按照兼顾C语言课程自身的知识体系和单片机课程的基础实训内容的课程融入思路,将C语言课程教学内容按照理论教学和实训教学两部分并行梳理,分别形成理论教学项目和实训项目;按照C语言课程体系,将C语言程序设计的初步知识、顺序结构程序设计、选择结构程序设计、循环结构程序设计、编译预处理作为重点学习内容,将函数、指针、结构体、共用体等知识体讲解作为辅助内容;课程涉及的有关定义、定理、性质、特征等内容按“掌握、理解、了解”3个层次要求展开,依照应知应会原则,将重点讲解、要求掌握的内容标识为★,简要介绍、要求理解的内容标识为☆,其余为要求自学的内容。课时的分配可以根据该门课程的课时总量进行调整,教学内容按照课内、课外相结合的方式开展。本课程已经实施的理论教学设计详见表1。

表1 理论教学设计

在教学实施中,教师发现融合前的C语言课程教学由于受学时限制和未考虑与专业课程结合的缘故,部分基于单片机的程序设计教学内容缺失,例如预处理、库函数等内容没有较好地达到单片机课程学习要求,造成后续单片机课程教学的短板,因此融合后的C语言教学重点加强了上述内容的讲解。

2.2 合理设定实训教学设计

实训内容包含2个部分,即满足C语言基本知识点的实训和结合单片机课程基础要求的实训。单片机课程中一般开设流水灯模块程序、按键模块程序、RFID模块程序、日历时钟模块程序、GPRS模块程序、显示存储模块程序等实训项目。本文只给出结合单片机课程的实训设计,要求掌握内容标识为★,要求理解内容标识为☆,具体内容见表2。

表2 实训教学设计

考虑到C语言课程课时安排有限,本课程在上述单片机技术实训内容中选取了集成环境应用实训、流水灯实训项目、按键模块程序设计作为课内项目来完成单片机集成环境、电路版制作、程序编写与下载、软硬件调试等内容;,根据课时调整内容,任课教师也可以采取课内任务与课外任务相结合的方式完成所有实训项目,根据具体情况将实训项目所需的相关知识点分解到理论教学和实训教学中。

2.3 加强课外实训环节

为顺利实施课内、课外任务相结合的实训学习模式,教师需要做好所有实训的内容规划和进度规划:

1)教师自编《C语言实训指导书》《基于单片机的C语言程序设计》实训指导书,学生利用大量课外时间按照教学进程完成实训指导书中的实训内容,在每次课内实训课上完成情况检查和程序功能的测试验证。

2)教师指导学生完成散件焊接组装,C51单片机开发实验板套件由学生自行准备。

3)教师指导学生掌握C51单片机Keil仿真软件和STC下载烧录软件的使用。

以上思考和教学实践,旨在强化学生良好的实践动手、逻辑思维能力、综合运用知识能力,使其熟练掌握构建程序运行环境、C程序编写、调试程序能力,掌握结构化程序设计的方法,会使用单片机C语言程序仿真软件、能制作单片机电路板。

3 项目实践案例

本文以单片机流水灯实训项目,具体说明单片机技术模块实训项目的实施情况。

3.1 实训项目电路工作原理

对单片机电路进行简单介绍,并围绕原理图对其工作原理进行讲解(图1)。

图1 单片机流水灯电路原理图Fig.1 Circuit schematic diagram of SCM flow lamp

在实训教学前,需要对项目实施中涉及的单片机与C语言程序的对应内容进行适当讲解。C语言和单片机中的C语句,其语法、运算符和变量规则相同,但由于单片机与计算机CPU有差异,所以库函数不相同,例如C语言中常用的库文件为stdio.h,C51单片机中一般为reg 51.h或reg 52.h。

3.2 项目实施制作步骤

步骤1 购置单片机模块散件并完成电路焊接。

步骤2 安装Keil.uVision C51单片机编程调试软件。

步骤3 将厂家提供的reg52.h复制到安装目录Keil/C51/INC文件夹下。

步骤4 启动Keil完成工程文档及单片机C程序设计。

步骤5 完成软件仿真及测试。

步骤6 硬件电路调试。

3.3 程序代码

将设计完成的C程序代码添加到Keil.uVision C51仿真系统中,进行编译、调试,结合C语言课程对代码进行分析。

C语言程序源代码如下:

#include //包含stdio.h头文件

#include “reg52.h” //厂家提供的单片机库函数

#define uchar unsigned char //宏定义

#define uint unsigned int //宏定义

//LED接口定义

sbit K1 = P1^0; //K1接单片机P1口0端

sbit K2 = P1^1; //K2接单片机P1口1端

sbit K3 = P1^2; //K3接单片机P1口2端

sbit K4 = P1^3; //K4接单片机P1口3端

sbit K5 = P1^4; //K5接单片机P1口4端

sbit K6 = P1^5; //K6接单片机P1口5端

sbit K7 = P1^6; //K7接单片机P1口6端

sbit K8 = P1^7; //K8接单片机P1口7端

sbit LED1 = P0^0; //LED1接单片机P0口0端

sbit LED2 = P0^1; //LED2接单片机P0口1端

sbit LED3 = P0^2; //LED3接单片机P0口2端

sbit LED4 = P0^3; //LED4接单片机P0口3端

sbit LED5 = P0^4; //LED5接单片机P0口4端

sbit LED6 = P0^5; //LED6接单片机P0口5端

sbit LED7 = P0^6; //LED7接单片机P0口6端

sbit LED8 = P0^7; //LED8接单片机P0口7端

sbit LED_EN = P4^2;

void delay(uint t) //延时函数

{

for(;t>0;t--);

}

void main( )

{

uchar temp=0xff; //8位每位置为1,即11111111

LED_EN=0;

while(1)

{

P0=temp>>1; delay(50000); //1号灯亮

P0=temp>>2; delay(50000); //1、2号灯亮

P0=temp>>3; delay(50000); //1、2、3号灯亮

P0=temp>>4; delay(50000); //1、2、3、4号灯亮

P0=temp>>5; delay(50000); //1、2、3、4、5号灯亮

P0=temp>>6; delay(50000); //1、2、3、4、5、6号灯亮

P0=temp>>7; delay(50000); //1、2、3、4、5、6、7号灯亮

P0=temp>>8; delay(50000); //全亮

P0=temp>>1; delay(50000); //灭延时

}

}

启动Keil进入编程调试界面,完成工程文档及单片机C程序设计,打开Debug菜单调试观察设定的I/O口状态验证程序仿真结果,详见图2。

图2 单片机流水灯程序Keil软件仿真图Fig.2 Keil software simulation diagram of SCM flow lamp program

3.4 单片机程序下载(烧录)

启动STC-ISP-V4.83下载程序对单片机进行烧录并观察LED点亮情况,详见图3。

图3 单片机下载程序后流水灯点亮图Fig.3 The water lamp lighting diagram after MCU download the program

4 结 语

针对高职院校电气类专业传统的C语言教学与单片机课程跨学期开展知识容易遗忘、教材内容与单片机知识衔接性不强、实用性例子较少等问题,通过C语言与单片机课程融合教学的思考与实践,学生普遍反映提高了C语言学习兴趣,锻炼了动手能力,强化了C语言在单片机中的应用体验,为单片机等后续课程的学习奠定了较好的编程和应用基础。在教学实施过程中,为增强融合的针对性和教学衔接,取得更好的教学效果,教师需要对2门课程的内容都比较熟悉,并不断优化教学内容,持续推进课程的交叉融合,设计更多实用性强、应用性广的项目供学生训练。

猜你喜欢
C语言程序设计单片机
医学专业“Python程序设计”课程教学改革总结与思考
互联网+教育背景下的C语言程序设计教学改革探究
基于Visual Studio Code的C语言程序设计实践教学探索
基于单片机的层次渐变暖灯的研究
51单片机C语言入门方法
基于单片机的多功能智能插排
从细节入手,谈PLC程序设计技巧
基于单片机的便捷式LCF测量仪
高职高专院校C语言程序设计教学改革探索
单片机I/O口模拟串行通讯的C51实现方法