单片机c语言范文

时间:2023-03-20 21:14:29

单片机c语言

单片机c语言范文第1篇

关键词 单片机;计算机语言;C语言

中图分类号:TP315 文献标识码:A 文章编号:1671-7597(2013)22-0055-01

单片机是一个小型的电脑系统,它具备完成一项某项任务的功能,有的甚至可以完成多项功能,这在工业控制以及智能开发上有巨大用途。单片机系统的实现是建立在大规模集成电路技术发展成熟的基础之上,它将中央处理器CPU,数据存储ROM,负责信息传输的线路和I/O接口整合到一起,放在集成电路板上,完成电脑系统的制作。至于C语言,就是一种特定的机器语言,能帮助我们编译计算机能够识别的指令,而且整个编译过程不需要依靠计算机硬件的应用程序,非常的简单可行。

1 单片机C语言的编程优点

1)单片机因为是集成电路系统,能在一个很小的原件上完成较为复杂的操作反应,运行简单,价格便宜,还能支持C语言的编译。今天我们所提到的单片机C语言是C语言的一种,它能为单片机提供更多的数据类型,帮助用户分析遇到的问题,并且针对问题做出专业性处理。整体流程如下:命令以单片机C语言的形式下达,然后通过传输接口传到单片机的存储器上,CPU在从存储器上提取信息,进行计算并发出指令,发出的指令在通过接口传到给执行机器,如此完成整个动作。整个过程没有异步过程,而且提供标准函数库,程序员不需要熟记单片机的指令库就可以完成整个编译过程。

2)C语言作为一种高级语言,能直接用于操控机器,而不需要软硬件的驱动程序,为软件的开发提供了可靠的保障,C语言的应用极大的增加的程序编译员的工作效率,给开发者更多的时间跟精力去专心研究编译程序的功能,不用在分精力在硬件与软件的契合方面。但是单片机C语言占用系统量较大,对一般的单片机来说,CPU直接读取的存储是有限的,用C语言进行编译,很容易将原本简单的编译信息写成多条信息,这就增加了直接存储的负荷,导致单片机直接存储不够用或者栈溢出等问题。

2 单片机C语言的编程问题分析

1)研究表明,单片机C语言编辑器也不是万能的,不可能支持所有的数据类型。不过现今比较流行的几种数据类型还是能够支持的。像是拥有16位数据的char型存储数据类型,它主要是运用ASCII字符集。像存储位数为四字节的Int数据存储类型,它是一个整型数据。整型数据中又有长整型数据,也就是long数据。另外一种数据是浮点型数据,我们在C语言编辑中经常用到,逻辑开头为float。单片机除了上述的语言类型外,还支持Sfr这种特殊功能寄存器,不仅仅能够存储数据,还能任意访问数据存储所在的位置。作为一种跟程序存储器资源相结合的编译语言,单片机C语言也具有一定的缺陷性,我们拿最常见的51系列单片机为例子。作为单片机中最常见的,我们知道51系列的单片机CPU是八位的,要计算二的八次方个数据,我们如果想提高代码的准确率,一般都是采用减少单片机的位数的长度,也就减少了CPU的数据计算数量。我们在使用中,为了避免占用内存过大,通常会减少程序执行过程中的运算次数,减少输入字符串的总体长度,能够用小字符串进行定义的绝不使用大的,能够用整型变量进行定义的就尽量不用长整型变量,这也是我们进行C语言设计时需要遵循的一个原则。在C语言的处理过程中,必须从数据库里提取公式,但是浮点型的数据就有一定的内部函数来支持,整个浮点型函数经过如此变化,会生成较长代码,所以我们在运用数据时,要尽量选取合适数据类型,本着减少代码长度的觉悟,尽量做到合理。

2)单片机C语言的算法的详解。C语言是算法组成的,它能够完成单一命令或多种命令。单片机C语言也是由一个个算法组成的,但是普通C语言跟单片机C语言的最大不同就在于存储量的大小,通常普通C语言的编译是不需要考虑编译程序代码的长度问题,我们只需要考虑编译的结果符合我们的要求即可。但是在单片机C语言编译中,因为单片机本身的存储性能有限,我们就必须对长度过长的代码进行重新设计排版,让程序算法最少。当然算法少的程序并不一定是代码少的程序,有些本身代码不长的程序,因为要在运行中走函数或者子程序,造成原本认为少的程序在运行中涉及的算法更多。为了降低程序消耗的内存,不仅仅要考虑编辑好的程序算法,还要考虑算法运行的本身。通常我们都知道算法是包括控制结构以及原始操作结构的,原始操作结构也就是我们常说的输入机构,控制结构与原始操作机构的运行得出结果的时间就是算法执行的时间,但是普通的一个算法,会因为编译算法的语言不通,编译程序的软件不通,编译完成后在运行计算机的不同产生不同的结果。所以我们在进行单片机上的算法设计时,要考虑解决一个问题时,哪种策略更简单,哪种策略使用规模最小,哪种策略书写的程序语言最少,就选用哪一种算法。在C语言中,算法直接影响对语言的实现级别。

3)单片机C语言存储器的分配结果。单片机的存储设备一般都是随即存储,存储数据非常少,一般也就64kb,也就是我们常说的单片机的内存,除了随即内存外,单片机有时还具备内部存储设备。在实际运行中,数据从内部存储转到随即存储,空余的存储地址在由新的存储数据填充。 这就涉及到全局变量以及静态存储变量,静态变量因为是函数调用的,所以所处的存储器地址基本是不变的,在全局变化中,能被释放的只有局部变量,我们为了保证单片机的内存,要尽量提高存储器的利用率,合理分配存储器地址。

4)存储器有三种不同的存储模式,分别为小模式,压缩模式以及大模式,判定的值是变量所处的地址范围。我们选取不同的模式,将直接影响到代码的长度以及程序的执行速度,在研究中发现,我们要把程序代码放在存储空间里,然后将一部分访问变量设计成xdata的类型,放在实时存储里面,就能减少不必要的时间。

单片机C语言这种通用的计算机语言有着很多优点,功能强大,便于结构化,可读性强,可移植性强,维护和运用方便,反应速度快,并且具有通用性。单片机的性能在飞速提高,这就需要编程者随时掌握学习知识,提升技术,在单片机目前有限的系统资源下研究开发出更加优秀的单片机系统。

参考文献

[1]马忠梅,籍顺心,张凯.单片机的C语言应用程序设计[M].北京航空航天大学出版社,1997.

单片机c语言范文第2篇

Abstract: Combining 8051, the paper introduces the advantages of C-language and the programming design of C-language's relization of MCU digital blink. Though 8051 could embed assembly code at C-language programming, the complicity is obviously improved. The practice proves that if we use C-language resonablely, the equal precision with assembler language could be got at practice.

关键词:单片机;C语言;应用

Key words: MCU; C-language; application

中图分类号:TP31 文献标识码:A文章编号:1006-4311(2010)36-0146-01

1问题的提出

将C向MCU(俗称单片机)8051上的移植始于20世纪80年代的中后期。客观上讲,C向8051 MCU移植的难点不少。经过Keil/Franklin、Archmeades、IAR、BSO/Tasking等公司艰若不懈的努力,终于于20世纪90年代开始而趋成熟,成为专业化的MCU高级语言了。过去长期困扰人们的所谓“高级语言产生代码太长,运行速度太慢,因此不适合单片机使用”的致使缺点已被大幅度地克服。

2单片机C语言的优越性

2.1 不懂得单片机的指令集,也能够编写完美的单片机程序;

2.2 无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;

2.3 不同函数的数据实行覆盖,有效利用片上有限的RAM空间;

2.4 程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏;

2.5 C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;

2.6 提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址;

2.7 提供small、compact、large等编译模式,以适应片上存储器的大小;

2.8 中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;

2.9 提供常用的标准函数库,以供用户直接使用;

2.10 头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发;

2.11 有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉;

2.12 可方便地接受多种实用程序的服务:如片上资源的初始化有专门的实用程序自动生成。

3应用案例:C语言实现单片机数码管闪烁

本应用案例中(/*此函数主要是C语言实现单片机数码管闪烁功能。效果:1――数码管显示0123;2――停顿;3――数码管显示4567;4――无穷循环1,2,3步。*/),程序为:

#include

#include

unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff}; //定义数组

int delay(int x)//声明延迟函数

{

int j=0;

for(j;j

}

main() //主函数

{

int i,j;//定义i,j

unsigned char seg;//定义seg,用于数码管的初始化

seg= 0xfe ;//定义seg为0xfe,即11111110;使数码管为第一个显示

while (1)//无穷循环

{

{ for(j=0;j

{

for(i=0;i

{

P2=seg;//初始化P2

P0=dis_code[i]; //显示数字

delay(200);//延迟约1ms

seg=_crol_(seg,1);//数码管右移一位

if (seg==0xef) seg=0xfe; //输出四个数字之后停止

}

}

P2=0xff;//数码管全不接通,把0,1,2,3消去

delay(2000000); //延迟

for(j=0;j

{

for(i=4;i

{

P2=seg; //初始化P2

P0=dis_code[i]; //显示数字

delay(200);//延迟约1ms

seg=_crol_(seg,1);//数码管右移一位

if (seg==0xef) seg=0xfe;//输出四个数字之后停止

}

}

}

}

}//函数结束

4结语

单片机c语言范文第3篇

【关键词】单片机;C语言;指针

C是一种编译型语言.有高级语言的特点,并具备汇编语言的功能,移植性能好,便于自顶向下结构化程序设计,C语言在单片机中的应用,给开发者带来了很大的方便.软件开发者不需要对单片机硬件的结构有很深人的了解,编译器可以自动完成变量存储单元的分配.使得单片机的程序设计更加简单可靠。指针、地址、数组及其相互关系是C语言中最有特色的部分。在编写单片机的应用程序时,常常需要对端口及存储单元进行寻址.因此,掌握指针在这些寻址过程的工作原理是很有必要的,这有利于编写灵活高效的程序。

一、指针结构声明

C语言中,对于指针的声明采用如下形式:类型标识符*指针变量名;由于单片机存储区的关系,所以单片机C语言的指针声明格式有别于普通C语言指针的声明格式,其格式为:

类型标识符[存储区类型]

指针变量名[指针变量存储区类型]

单片机C语言的指针的定义比普通C语言指针的定义多两个部分:存储区类型是指指针变量所指向的数据的存储区,可以是所有的数据存储类型;指针变量存储区类型是指指针变量的存放区域的数据,可以是data、ldata、xdata或pdata如下声明:

unsigned char xdata *data yc;

上声明语句是指在RAM(data)内声明一指针变量yc,该指针变量指向一无符号字符型数据,该无符号型字符存在xdata区内。 该指针变量的应用格式如下:

unsigned char xdata indata[6];

unsigned char xdata *data yc;

yc=indata;

其编译后的的汇编为:MOV 08H,#00H;0x08和0x09是在片内RAM存储区分配的yc指针变量的地址空间。

二、指针寻址的实现

单片机C语言的数组的寻址和普通C语言的寻址基本上是一样的,只是当数组存储在片内时,由于片内RAM资源十分有限,所以很难有比较复杂的数据结构,而且在编程过程中也尽量避免在片内RAM中使用较大的数组。

1.指向data区的指针寻址的实现

这是最基本的寻址方法,比如一个检测系统中,通过A/D转换把外部数据输入单片机中,单片机对这6次采样数据求和,具体程序如下:

unsigned char data inputdata[6];

unsigned int data sum,i;

unsigned char data * data yc;

void main()

{ sum=0;

collectdata( );/*采集数据函数,输入到数组inputdata中*/

yc=inputdata;

for(i=0;i

sum+=*yc;

}

2.指向程序存储区的指针寻址实现

指针指向数据存储区其其实质就是C语言中指向函数的指针这一概念,可以利用这种指针来实现函数指针调用函数。指向函数的指针变量定义格式为:类型标识符(*指针变量名)([参数1],[参数2]……);定义好后用(*指针变量名)([参数],[参数]……)即可调用这个函数。例如,主程序中要引用一个键盘扫描函数scan,程序如下所示:

Void scan()

Void main()

{ void (*yc)();

Yc=scan;

For(;;)

{(*yc)( );}

}

三、C51热启动代码的编制

对于工业控制计算机,往往设有看门狗电路,当看门狗动作使计算机复位,这就是热启动。热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常。因而在程序中必须判断是热启动还是冷启动,常用的方法是:确定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行初始化部份,并将0xaa赋与这两个内存单元。

根据以上的设计思路,编程时,设置一个指针,让其指向特定的内存单元如0x7f,然后在程序中判断,程序如下:

void?main()

{?char?data?*HotPoint=(char?*)0x7f;

if((*HotPoint==0xaa)&&(*(--HotPoi-nt)==0xaa))

{?/*热启动的处理?*/??}

else

{?HotPoint=0x7e;/*冷启动的处理*/

*HotPoint=0xaa;

*(++HotPoint)=0xaa;

}

/*正常工作代码*/

}

然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。这是为什么呢?原来,用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的,在main()函数的第一句语句执行前要先执行一段“起始代码”。正是这段代码执行了清零的工作。C编译程序提供了这段起始代码的源程序,名为“startup.a51”,打开这个文件,可以看到如下代码:

IDATALEN?EQU?80H;the?length?of?IDATA?memory?in?bytes.

STARTUP1:

IF?IDATALEN??0

MOV?R0,#IDATALEN-1

CLR?A

IDATALOOP:MOV?@R0,A

DJNZ?R0,IDATALOOP

ENDIF

可见,在执行到判断是否热启动的代码之前,起始代码已将所有内存单元清零。如何解决这个问题呢?好在启动代码是可以更改的,方法是:修改startup.a51源文件,然后用编译程序所附带的a51.exe程序对startup.a51编译,得到startup.obj文件,然后用这段代码代替原来的起始代码。具体步骤是(设C源程序名为HOTSTART.C):

修改startup.a51源文件(这个文件在C51\LIB目录下)。

执行如下命令:

A51?startup.a51得到startup.obj文件。将此文件拷入HOTSTART.C所在目录。

将编好的C源程序用C51.EXE编译好,得到目标文件HOTSTART.OBJ。

用L51?HOTSTART,STARTUP.OBJ命令连接,得到绝对目标文件HOTSTART。

用OHS51?HOTSTART得到HOTSTART.HEX文件,即可。

对于startup.a51的修改,根据自已的需要进行,如将IDATALEN?EQU?80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。

四、结束语

单片机C语言的应用是十分灵活的,要充分发挥C语言的优势,对内外部数据和程序进行方便自如的操作,必须要掌握好指针的应用。

参考文献

[1]马忠棒.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2001.

[2]曹聪,岳继光.单片机C语言指针的应用[J].微型电脑应用,2003.

单片机c语言范文第4篇

要想完成程序设计,需要稳固的C语言基础知识和灵活的逻辑思维。而稳固的C语言基础知识要依赖英语基础。灵活的逻辑思维要有数学基础。英语、数学恰恰是高职学生薄弱的地方。这给单片机的C语言教学带来了不小的阻碍。那么,怎样在薄弱英语和数学基础上,提高单片C语言教学效果便值得研究和探讨一番了。

一、学――软、硬穿插

传统的单片机C语言教学中,往往是先脱离单片机学习C语言程序设计。学生普遍反映该课程的语法知识较多,理解和记忆都不太容易,即使记住了语法知识也不能很好地利用C语言进行单片机小型系统的开发。因此,我们以具体项目为基础将C语言知识穿插在整个单片机硬件教学中。比如,讲解完最小系统后,给学生一个项目《点亮LED灯》。之所以选择这个项目是因为它简单,上手快。它能让学生带着轻松的心情走入单片机应用之门。利用此次设计主要是给学生灌输C语言的基本结构,从而让学生体会单片机的控制意义。之后可以在跑马灯中穿插for语句知识;在按键设计可以讲if、switch语句;在数码管显示中学会一维数组等。在软硬件穿插学习过程中,教师应选择什么项目,项目中应准备哪些C语言知识,教师应仔细考量。项目中包含的C语言知识不用面面俱到,应以实用、够用为度。

二、先读后改――被动变主动

在学之后,学生有了单片机的应用经历,也累积了的一些C语言知识。但是由于英语知识薄弱,C语言关键字、格式记不住。程序设计的逻辑思维累积不够。学生独立设计程序还没办法实施。总是以老师讲,学生做的模式上课,学生的积极性调动不起来。怎么将学生被动接受变成主动学习?

继学之后,采用先读后改的教学方式。读――读程序。设计项目后,由学生上网搜集参考程序,然后读懂参考程序。以这样的方式来完成项目,一来可以锻炼学生信息收集,和信息筛选的能力,这也是我们希望学生能有拥有的一种能力。二来在读程序的过程中可以强化在学的过程中建立起来的C语言知识的模糊记忆。三来在读的过程可以学习一些新颖设计思路。这些设计思路不再拘泥于任课教师,可以激发学生程序设计的创新思维。

读懂程序之后就可以进行程序改造了。网上搜集的程序往往不完全符合自己的设计要求。这样就要求学生在读懂程序的基础上,进行二次改造,变成自己的成果。

单片机c语言范文第5篇

关键词:C语言;单片机;融合;教学改革

作者简介:陈景波(1978-),男,江苏常熟人,常熟理工学院电气与自动化工程学院,副教授;陈飞(1978-),女,浙江宁波人,常熟理工学院电气与自动化工程学院,副教授。(江苏 常熟 215500)

基金项目:本文系常熟理工学院教学研究项目(项目编号:JX1101286)的研究成果。

中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2013)26-0071-02

“C语言程序设计”(以下简称“C语言”)和“单片机原理与接口技术”(以下简称“单片机”)都是电气信息类专业的重要课程,这两门课程实践性非常强,学习效果直接影响到学生就业的核心竞争力。“C语言”课程教学中关于任务驱动教学法、项目教学法的研究已经较多,在一定程度上可以激发学生学习兴趣,提高教学质量。但在电气信息类专业的“C语言”课程教学中,应该针对专业的特点,结合后续课程融入“单片机”教学内容,有针对性地进行现场教学、案例教学,可以更有效地提升教学效果,本文针对这一问题进行探讨。

一、“C语言”和“单片机”教学现状分析

目前的教学之中,两门课程的脱节较严重,“C语言”作为基础课程,往往在大一就开设,而“单片机”作为专业课程,要在“模拟电子技术”和“数字电子技术”课程之后才开设。两门课程教学时间相隔较长,往往导致学生在学习单片机的C语言程序设计时,基本忘记了C语言的基本编程方法。在讲授C语言时,电气信息类专业大多也是以谭浩强老师的《C程序设计》为教材,除了介绍语言的数据类型、控制语句、数组、指针外,还对函数、结构体、文件进行讲解。整个教学过程中,过分注重语句、语法的细节和程序设计技巧的讲授,对如何分析和解决实际问题讲得不够,从而导致学生没有明确的学习目的,更缺少学习的兴趣。即使开展项目教学法,项目的选择也是一些关于学生成绩处理、方程求解等方面。虽然在一定程度上激发了学生的学习兴趣,但这些项目与专业应用结合得不是非常紧密,学生的学习积极性难以得到充分提高。

二、“C语言”教学中融入单片机内容的可行性分析

作为电气信息类专业的学生,学习C语言的主要目的是为单片机、DSP和ARM等嵌入式系统编程打基础。C语言是一门较特别的高级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来,允许直接访问物理地址,可直接对硬件进行操作,因此既具有高级语言的功能,又有低级语言的许多功能,能够像汇编语言一样对位字节和地址进行操作单片机的指令系统和硬件结构。而汇编语言编程正是学生最头疼的内容,实际的单片机项目也大多数采用C语言开发,因此目前大多数高校也已采用C语言来讲授单片机应用程序的设计。

常熟理工学院电气与自动化工程学院的单片机实验室由教师自行开发了积木式的实验设备,同时设计了精简版的开发板,特别提出了“口袋实验室计划”,让每一个电类学生在一入学就有自己的单片机开发系统,为“C语言”教学中融入单片机内容提供了基本保障,同时让学生可以在低年级就能够在电子系统设计上快速入门。

三、具体实施过程

在具体实施过程中,务必注意引入单片机教学内容只是为了增强学生学习C语言的兴趣,提高教学效果,为学生尽早开展一些创新训练打下基础。课程的重点还是C语言知识和编程技巧的掌握,只有这样打下坚实的基础,学生的编程道路才可以走得更远。实施的思路如图1所示:

1. 教学内容的优化设计

“C语言”教学中引入“单片机”内容后,“C语言”教学时间会相应缩减,需要进一步针对单片机C语言编程选择教学内容。对于程序的基本结构、函数、指针、结构体、联合体、位字段等内容需要加强,增加一些单片机C语言殊数据类型和存储类型的讲解。

引入“单片机”教学内容,“单片机”内容的学时可以分配8个学时左右(可根据总学时相应调整),其中理论课和实验课各为4个学时,理论课可以穿插在整个教学过程中,实验课可以相对集中,分成两个实验完成。

“单片机”教学内容可选择以下几个方面:单片机基础知识,简单介绍单片机的功能、结构和引脚;Keil软件使用及外部软件资源,包括C51的库函数、寄存器库函数reg51.h,以此为实例介绍C语言中预处理命令“文件包含”的应用;并行I/O口的操作与编程,为实验作准备;LED流水灯程序设计;数码管显示原理及程序设计。

2.实验环境的构建及实验案例选择

由于实施了“口袋实验室计划”,每个学生从大一就拥有自己的开发系统,在原来的计算机实验室安装相应的单片机C语言软件开发系统Keil uVision,即可搭建基本的实验环境。

由于学生刚入学,相应的专业基础课程还未学习,可选择典型且直观的案例,进行现场演示和学生参与编程。实施过程中,选择了LED流水灯设计和数码管显示实验,只需掌握单片机简单的接口编程技术即可完成。

3. 分阶段融入“单片机”教学内容

(1)第一阶段,明确学习目标,激发学习兴趣。第一堂课可以根据之前确定的流水灯设计和数码管显示实验,老师利用开发系统进行现场演示告诉学生C语言是单片机等控制器的灵魂,有哪些应用,学生将会增强学习的目的性。

(2)第二阶段,结合典型案例学习C语言编程技术。在学生掌握C语言基本的程序框架、变量类型和语句结构后,老师可以在之前演示过的案例中将LED和数码管出现的现象与程序中的每行代码对应起来进行解释,并可以通过修改代码,产生不同的实验结果。也可以在这过程中提出一些问题,让学生思考如何修改程序,由于每行代码和具体的现象相对应,学生将会进一步产生浓厚的学习兴趣。

(3)第三阶段,通过实验,学生亲自体会程序设计的乐趣。这一阶段在实验室完成,老师通过讲解程序修改的方法,LED和数码管就可以出现不同的效果。如果学生完成得比较好,可以增加一些扩展实验部分或者让学生自由发挥编程,最后根据实验的效果进行评比,让做得好的同学讲解项目实现的思路及代码的含义,进一步树立学生的学习信心。

(4)第四阶段,多样化考核体现真实的学习效果。考核分成理论考试和实践考试两个部分,理论考试主要考核学生对C语言本身程序设计知识的掌握效果。实践考试再分为通用C语言编程部分和单片机C语言编程部分。前者可考核学生对通用C语言的实际编程、调试的能力;后者考核内容相对容易,学生完成一个工程创建、编辑、编译、调试下载的完整过程,并能实现简单的实验效果即可。

四、实践效果

经过几轮在“C语言”课程中融入“单片机”内容的教学实践后,取得了以下一些效果:大大提高了学生学习C语言的积极性和主动性,教学质量和学习效果也大为改善;使“C语言”课程中的项目教学法、案例教学法等落到实处,切实紧密结合专业开展;由于学生提前接触单片机程序设计,具备了尽快开展创新项目训练的基础,为学院提出的“口袋实验室计划”的实施也提供了前提条件,学生单片机系统的设计水平也得到了切实的提升,在各级各类电子设计竞赛中取得了丰硕的成果。

五、结束语

课程间的融合产生一加一大于二的效果,也符合工程实践中需要综合性知识的要求。这种教学方式使得“C语言”课程教学改革可以进一步深入,在电气信息类专业中具有较大的推广价值,这种课程教学改革的思路也可以给其他课程提供一些参考。

参考文献:

[1]蒋宏伟.“C语言”与“单片机”课程整合教学法探讨与实施[J].新课程学习,2012,(8):53.

[2]苏波,陶宁.“C语言”与“单片机”相结合的教学研究[A]. 2006-2010年教育部高等学校光电信息科学与工程专业教学指导分委员会及协作委员会2010年全体会议论文集[C].2010.

[3]谭浩强.C程序设计(第四版)[M].北京:清华大学出版社,2010.

单片机c语言范文第6篇

关键词:C语言程序设计;教学方法;单片机

中图分类号:G642.4 文献标志码:A 文章编号:1674-9324(2014)10-0066-02

一、引言

随着微电子技术的不断发展和广泛应用,计算机编程语言也越来越丰富,因而学生也被要求具有应对各种语言的学习应用能力,在掌握好C语言后,对于其它语言的学习则游刃有余。基于单片机进行应用系统开发,C语言作为一种高级的编程语言,无论是现在进行嵌入式系统开发的相关企业,还是当前的全国电子设计大赛等学生竞赛中,都越来越受到大家的关注,并将其作为一个主要语言开发工具。故本文提出的基于单片机的C语言教学方法,对结合单片机进行符合实际工程需求的硬件和软件开发的爱好者或学习者有很重要的意义。

二、教学对象

本学期本人所教授的主要课程之一是《C语言程序设计》,所面向的教学对象是大一新生,大多数同学由于在高中阶段很少接触电脑,对于语言的学习更是陌生,而且数学功底比较薄弱,同时,加上学习过程中大多数学生往往缺乏积极性和主动性,遇到困难不能刻苦钻研,往往选择放弃。因此,针对学生的基础情况,教学讲授的进度不能太快,教学的内容不能讲的太过深奥,而且教学方法要灵活多变,结合实际事物进行简单比喻来讲解,只有这样才能较为形象地教好C语言这门课。

三、C语言的应用地位

C语言是一门使用最广泛的程序开发工具编程语言,是极具发展前景的计算机高级语言。其作为一种结构化的程序设计语言,具有相当强的结构性、可移植性和功能性。通过采用C语言进行编程开发可以使众多开发者专心研究所设计程序要实现的功能及相关实现算法,从而有效减少开发和软件调试的时间。C程序设计具有良好的程序结构,对于模块化的程序设计非常适合,故通常会采用从上至下,追求逐步求精的结构化程序设计方法,来将所要实现的功能模块化,不同的功能通过不同的模块去完成。这样易于进行调试工作和方便快捷地管理好大型项目,从而最大限度地减少重复劳动。

四、单片机的应用教学现状

单片机的学习是我院电子类专业需要掌握的一门实践性非常强的专业课程,我院学生通过对其的实践性学习后,能够独立参加全国电子设计大赛,并能较好地完成比赛项目。为使我院的单片机教学效果更好,学生对该门课程掌握的更加牢靠,故需要对单片机的教学进行大胆改革,通过在C语言的课程教学上,结合单片机以及相关的硬件设计知识进行讲解。从我院电子专业开设C程序设计课程以来,通过学生所反映的情况是该门课程比较难学习,而且不知道他们在学完C语言后到底有什么用,能够应用到哪些地方,更不知道将自己的所学应用于单片机的开发中能不能实现目标。故根据以往教师的教学经验,并结合学生反映的情况考虑,本人觉得有必要作出这样的改进,在C语言的课程上,通过结合单片机及相关硬件设计知识来讲解C语言,并从以下几方面引起重视。

五、《C语言程序设计》的课堂教学

1.教学设计前的思考。《C语言程序设计》不仅是电子类专业理工科学生的一门计算机公共必修课程,而且C语言也是作为计算机等级考试(二级)的考试内容之一。C语言对于大部分刚进入大学的学生来说,也是一门比较难的计算机语言课程。要做好这门课程的教学设计,首先要对学生的具体情况有一定程度的了解。该课程通常的教学法是语法格式的讲解、语法要点的逐步讲解和通过例题对语法的应用讲解。这种机械的教学灌输思想枯燥无味,会使学生失去对该门课程的学习兴趣,所以,本人认为应该先要求学生课前对本堂课所要讲解的知识进行预习,并能识记有关知识点,将不理解之处画上记号,待课堂老师讲解时再认真听并理解所教授内容,这样通过教师为主导、学生为主体的方式学习,教师通过精讲相关的硬件设计实例,通过硬件设计所要实现的功能引出相关软件设计,进而将软件设计时所涉及到的相关C知识进行讲解,然后通过另一简单例子让学生自己去通过分析来巩固知识点。

2.结合多媒体的讲解,强化实验及实践能力。因为教师授课的主要对象是大学一年级新生,所以需要教师采用通俗易懂,并结合简单例子进行相关讲解,这样能够使学生容易理解和消化。教学过程中,采用多媒体,通过编程演示加深学生对运用的语法理解和深刻记忆。并把理论知识和硬软件的设计内容进行整合讲解,让每个学生独立完成实际应用实验题。

3.减少和消除学生对程序设计语言的排斥和畏惧感。本人在教学中会引导学生多读程序,在读的过程中领悟和提高。对于软件生存周期的设计、编码、调试、运行这几个阶段,本人可以通过C语言设计实例来体现,以培养学生编程中的工程思想。讲授课程时以提出问题、解决问题、深入拓展问题、再解决问题,对问题进行评价和优化设计的螺旋式滚动教学的方法,收到了不错的教学效果。

教学过程中,对于数组、指针等重要的知识点,则需要制作更生动的课件,提高学生的学习兴趣和主动性。例如,在讲解数组的冒泡法排序时,本人让7位同学分别拿着一个数据牌站到讲台,进行现场模拟气泡排序过程,通过第一次排序找到了该组中的最大值,经过第二次排序找到了次大值,通过现场的模拟以及班上同学的参与,使课堂更加丰富有趣,并且所有同学都能掌握气泡排序的过程。由于在教学中引入的现场模拟,使同学们更容易理解这些抽象的内容,更重要的是碰到类似的问题他们会触类旁通,从而慢慢培养出编程的兴趣。

六、实践培训操作

上机实验是学习程序设计语言的重要环节,自己编写的程序上机调试运行中,可能有很多想不到的错误,通过改正这些错误,可逐步提高自己对C语言语法的理解力。在课程的教学中,会进行阶段性的实训项目,将每一阶段的学习进行小结性的贯穿和提高。将相关的知识点融入到程序的编写中,从而巩固知识点并将琐碎的知识点做一个整合。暑假期间,对于电子爱好的学生进行集中培训,然后按照全国电子设计大赛的要求给大家几个题目做,这几个题目涵盖非常广的知识点,大家如果想编出程序就必须要找到课本的相应知识点进行复习,从而编出程序,学生普遍反映通过集中培训课的锻炼,他们的编程能力有了很大的提高,很多以前不懂的内容通过自己钻研也懂了,通过自己的努力以后也体会到了编出程序的喜悦感,可以说收到不错的成效。

七、结束语

C语言的教学重点是培养学生分析与解决问题的能力,这种能力的培养与学生的刻苦学习分不开,因此,在本人的课堂中会一再强调C语言不是看会的,也不是听会的,而是亲自动手实践练会的。基于单片机的C语言开发和设计,极大地促进了单片机在生产、生活各个领域的应用,提高了程序开发效率。因而,C语言学习效果的好坏,对今后单片机课程的学习具有深远的影响。

参考文献:

[1]向艳.C程序设计课程教学体系和模式探讨[J].计算机教育,2010,(3):112-114.

[2]谭浩强.C语言程序设计教程(第三版)[M].北京:清华大学出版社,2013.

[3]冯运仿.《C语言程序设计》课程教学模式的研究与实践.福建电脑,2012,(1).

[4]董蕴宝,潘旭军.浅谈C语言在单片机中的程序设计[10].科技信息,2009,(13):59-67.

单片机c语言范文第7篇

关键词:Protues; 密码锁; 单片机; C语言

中图分类号:TN433-34文献标识码:A

文章编号:1004-373X(2010)19-0176-03

Design and Simulation of Electronic Code Lock Using STC89C52 MCU Based on C Language

JIN Gui, XIANG Guo-liang

(Department of Physics & Electronic Information Engineering, Xiangnan University, Chenzhou 423000, China)

Abstract: The implementation of an electronic code lock which was successfully simulated by Protues is introduced. It uses high reliable microcontroller STC89C52 to achieve the unlocking and identification of the code, adopts I2C bus-based E2PROM chip to complete the code′s storage, uses LCD1602 to prompt the program′s running state and working procedures, adopts buzzer to imitate the alarm and LED to imitate the switch. It is convenient to modify and add function by using C language program,which is more transplantable and reliable compared to assembly language.

Keywords: Protues; code lock; single chip microcomputer; C language

0 引 言

电子密码锁是现代生活中常用的加密工具。它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是微控制器的智能电子密码锁,不仅具有电子密码锁的功能,还可引入智能化管理功能,从而使密码锁具有更高的安全性和可靠性。

电子密码锁通常使用ARM和单片机控制[1],单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的密码锁常使用汇编语言编写程序,显示器多数用数码管[2-3]。而本文所介绍的电子密码锁使用移植性及可读性强的高级语言C语言编写,便于修改和增减功能;同时采用显示清楚,功率消耗小而且寿命长的1602液晶显示器,显示更加直观,使用更加方便。从经济实用的角度出发, 采用STC89C52[4]单片机设计出一种具有密码设置、报警和防止多次试探密码功能的电子密码锁,通过Protues软件成功地进行了仿真。

1 系统工作原理

本系统以STC89C52单片机为核心,使用4×4矩阵键盘作为数据输入方式,驱动1602显示器提示程序运行过程和开锁的步骤。本系统的密码判断过程如下:

当使用者输入6位密码后按下BESURE键,单片机通过密码逐个比较,如果输入的6位密码和设定的密码完全相同,那么能成功驱动开锁模拟灯将锁打开。若输入6位密码与设定的密码不相同,按下BESURE键后,模拟灯不亮,可以按BACK键重新输入。由于输入密码过程中难免输入失误,如果密码输错,可直接按下BACK键重新输入,但是系统不允许无限次地按BACK键,以免密码被套用,当3次密码输入都错误,单片机将驱动蜂鸣器报警[5]。并且本系统输入密码还有时间限制,若在规定的时间内没有将正确密码输入也会报警。

修改密码功能如下:当密码输入正确后,按下SET键可新设置密码。每设定一位新密码,单片机将其送给E2PROM,当6位新密码都输入完毕,系统将自动回到程序开始,重新读取密码并保存,使用者需输入新的密码才能将锁打开。

2 系统设计

2.1 硬件支持

使用的元器件有:核心芯片STC89C52、存储芯片AT24C02、液晶显示1602、矩阵键盘、报警蜂鸣器、独立按键(模拟门的开关)、发光二极管(模拟锁的开关)和┤极管(放大电流)。

2.2 软件设计

本系统软件包括主程序模块、密码比较判断模块、修改密码模块、键盘扫描模块、液晶显示模块及定时程序等模块。系统程序流程如图1所示。

图1 系统程序流程图

2.2.1 主程序模块

主程序主要用于定义全局变量,给全局变量赋初值,初始化E2PROM,启动定时器以及从AT24C02[6]中读取密码,为整个程序提供数据。

2.2.2 密码比较判断模块

该模块的功能是将键盘输入的密码利用if语句与设定的密码进行逐个比较,若密码完全正确则开锁;若不正确,则按下BACK键,重新输入密码,每按下BACK键一次,输入次数将自加1,当3次都出错则报警。

2.2.3 密码修改模块

在密码输入正确情况下,可以按下SET对密码进行重新设置,每设定一位就将密码送给AT24C02存储起来,当设置6位密码完毕后,系统将自动跳到程序开始,调用新设置的密码。

STC89C52向AT24C02写入密码子程序:

void write_byte(uchar date)

{

uchar i,temp;

temp=date;

for(i=0;i

{

temp=temp

scl=0;

delay1();

sda=CY;

delay1();

scl=1;

delay1();

}

scl=0;

delay1( );

sda=1;

delay1( );

}

STC89C52从AT24C02读取密码子程序:

uchar read_byte()

{

uchar i,k;

scl=0;

delay1();

sda=1;

delay1();

for(i=0;i

{

scl=1;

delay1();

k=(k

scl=0;

delay1( );

}

return k;

}

2.2.4 键盘扫描模块[7]

该模块具备功能有:逐列扫描键盘确定被按键的具置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能。

2.2.5 定时模块[8]

本模块用于对密码输入时间控制。在程序开始运行时首先对定时器进行了初始化,从按下PUT IN键开始,系统开始计时,当输入的时间达到规定的时间将立即报警。

2.2.6 液晶显示模块[9]

此模块包括液晶初始化、命令的输入、显示数据的输入。其中命令是用于控制液晶状态是否显示光标,光标是否闪烁,是否清除原来数据以及显示的具置。数据显示主要是将要显示的信息按需要准时显示出来。

3 系统仿真

为了方便程序调试,本文采用了Proteus仿真[10],仿真图如图2所示。

图2 系统仿真图

3.1 系统介绍

图2中U1为STC89C52是整个系统的核心,编写的程序以二进制的文件导入其中;U2为AT24C02,┑5和第6个引脚分别与单片机的P1.2和P1.3相连;LCD1为1602液晶显示器,引脚连接如图2所示;独立按键DOOR,当门关上为键按下状态;D1为模拟开锁灯,当密码正确,按下BESURE键D1将亮;BUZ1为蜂鸣器报警。当程序编写好并导入到单片机里后,按下┩2最下面的开始按钮,1602液晶显示器将提示密码锁的运行状态,系统开始工作。

3.2 开锁功能

当电源开启时,1602液晶显示Welcome欢迎界面,当按下PUT IN键后,显示器显示PUT IN CODES提示使用者输入密码,如图3所示。几秒后液晶显示器上提示将自动消失。此时可输入正确密码,且密码输入时显示*而不会将输入的数据显示出来。当输入密码完毕后,按下BESURE键,如果输入的密码正确D1将亮(D1作为开锁的模拟开关)。若密码错误,可以按下BACK键,程序将跳到loop(开始界面),重新输入密码,同时输入次数将增加一次。当3次都输入错误则自动报警,并且输入密码的时间必须在规定的时间完成,否则也会报警。

图3 液晶显示

3.3 密码设定

在密码输入正确后,按下SET键可对密码进行重新设置,液晶显示器显示SET CODS。同样几秒后提示信息将自动消失,此时开始重设密码。在密码设定过程中会将设定的数字显示出来,每输入一位密码需按下YES键确定,当设置的密码达到6位将自动回到启动界面。

4 结 论

(1) 成功仿真实现了1602液晶显示,密码开锁,密码设置,防止多次试探,报警等功能。

(2) 采用C语言编写程序,具有很强的移植性,为系统增减和修改功能带来了方便。

参考文献

[1]郭海英.基于单片机的电子安全密码锁的设计[J].现代电子技术,2005,28(13):95-97.

[2]赵益丹,徐晓林,周振峰.电子密码锁的系统原理、设计程序及流程图[J].嘉兴学院学报,2003(15):103-105.

[3]曾高荣,胡宁,高扬.一种新型电子安全密码锁的设计[J].电子科技,2003(8):44-45.

[4]张天凡.完全手册51单片机C语言开发详解[M].北京:电子工业出版社,2008.

[5]周功明.基于AT89C2051单片机的防盗自动报警电子密码锁系统的设计[J].绵阳师范学院学报,2007(4):112-115.

[6]刘振栋.EPROM芯片的特殊应用[J].电子工程师,1999(6):26-27.

[7]唐德礼,王襄.单片机学习机及编程器的设计与制作[J].现代电子技术,2005,28(12):117-120.

[8]倪淑艳,李晓波,于涵.单片机C8051F303在数字锁相式频率合成器中的应用[J].现代电子技术,2006,29(4):19-21.

[9]贵国庆.用ME300B型单片机开发系统设计智能电子密码锁[J].单片机学习与交流,2006(5):55-56.

单片机c语言范文第8篇

【关键词】单片机;教学改革;项目

单片机技术是自动化领域一门应用非常广泛的技术,它综合了软件编程和硬件电路设计等技术,技术含量比较高,是自动化专业学生必修的一门课程,是技术应用型人才培养的需要。现在单片机技术发展很快,然而如今很多高等院校的单片机课程教学没有作出相应调整,导致学生的学习效果达不到要求。现在各大院校都提倡基于工作过程的新型教学方式,实践已经证明这种方法是可行和先进的。现在各种大学生电子设计大赛每年有许多,这些比赛项目都是基于单片机来完成的,每个大赛都吸引非常多的学过单片机技术的大学生参与,这就给了学生一个主动学习和应用单片的机会。为了取得更好的学习和教学效果,满足单片机企业用人要求和社会应用要求,应该对单片机课程教学进行实践和授课方法改革。

1.单片机目前教学情况

“课堂授课讲原理,中间穿插几个硬件实验”是现在大多数学校的教学方式。现在这种教学模式存在许多不足,学生学习没兴趣,不主动,仍是填鸭式教学,没有给学生自己动脑,主动开发的训练过程,不能培养学生整体设计和动手能力。

1.1 教学实验设备单一

目前高校配备的实验设备一般是综合了十几项实验内容的实验箱,学生可以通过实验加深对理论知识的理解。但这类实验箱最大的问题是无法提供高质量的动手环境,这些试验箱都是根据实验项目已经将硬件连接好了,学生只需要根据要求简单连线就可以使用,因此学生动脑和动手的机会非常少。由于线路已固定在实验板上,学生不能自己的设计并改变线路,具有一定的局限性。

1.2 教学与实际应用不符

目前的教学方法基本都是以讲授理论为主,使用的编程语言主要以汇编语言为主,但使用汇编语言有一些局限性,主要表现在[1]:编程效率低,学生学习难度大;语句抽象,可读性差,学生难理解;代码结构复杂,难以维护、更新;对硬件结构依赖较大,难以实现在不同种类和系列单片机之间移植。这些问题造成了教学效果不太理想,导致学习单片机的学生不少,但真正能动手实际操作的人却非常少。

1.3 教学效果不理想

作为高校,尤其是地方本科院校,主要任务是为地方培养应用型人才,要求学生具有较强的实践能力、一定的理论基础和团队协作精神。然而,传统教学模式下,学生上课的大部分时间都在接受较为枯燥的理论知识,然而只靠死记硬背是很难掌握单片机技术的。因此,传统授课方式下学生学习效率特别低,甚至有的学生在学完单片机课程后,也不知道单片机到底有什么用处,怎么用。这是单片机课程当今所存在的另一大弊端。

2.单片机课程教学改革

2.1 以C语言作为主要编程语言

C语言作为一种结构化的程序设计语言,它是程序开发工具中使用最广泛的一门编程语言,C语言具有很强的功能性、结构性、可移植性。与汇编语言相比,C语言具有以下特点:用C语言编写程序比汇编语言更符合人们的思考习惯,有功能丰富的库函数、运算速度快、编译效率高,可读性好,可移植性好。[2]

学习单片机技术这门课的自动化学生都在之前已经学习了C语言,因此,选用C语言作为单片机编程技术对于学生来说编程就变得轻松许多。更重要的是,单片机技术发展到现在,单片机相关行业的公司大部分采用C语言开发环境,因此,使用C语言作为单片机的编程语言也是为学生以后更好地就业打好基础。

2.2 基于电子设计的C语言为主要编程语言的单片机技术教学改革方法

自动化专业单片机现在的授课方法大多是每章节都安排大量理论授课,在最后几周安排大约4-6个相关实验,在最后一周做一个课程设计。这种教学方法忽略了平时授课过程中训练动手能力的环节。都是在讲完了理论后再去动手做实验。实践证明这样教学效果比较差,因为学生平时就没有真正掌握单片机技术,最后做实验也只是模仿,而不是根据自己的理解主动开发,甚至有的学生根本就不知道要做什么东西,怎么做。这样的结果不可能培养出学生较强的动手能力。

在单片机课程中也可以采用以电子设计项目为实现目标的教学方法。这种教学方法围绕电子设计项目展开,以电子设计项目的开发步骤作为教学顺序,将单片机的知识点穿插到实现项目的过程中,引导学生边做边学。项目由易到难编排,每堂课的教学任务就是完成一个项目产品或项目的一部分功能,其中涵盖单片机相应的理论知识。当把所有的项目完成之后,既积累了动手实践经验,又掌握了单片机的理论知识点。这种在“用中学,学中用”的方法才是能真正掌握单片机技术好方法,这在参加历届各个电子设计大赛的学生身上已经得到了验证。

另外,选用C语言作为单片机编程语言。但是,PC上编程的C语言和单片机上使用的C语言在写程序时还是有一定区别的,因此,在讲解应用C语言进行单片机编程时,重点在三个方面:一是尽可能地做到概念明确、清晰、准确;二是紧密结合单片机实际,多举例子;三是讲一些应用中的经验和体会。

为实现良好教学效果的目标,授课可以分以下几步进行:

(1)项目描述。选取贴近生活的电子产品,或往年电子设计大赛学生作品,针对作品讲解。

(2)项目分解。将项目内容分成硬件设计、程序编写、调试程序等环节,各个环节再细分成不同的功能模块,这样学生可以了解整个项目是如何完成的,有一个整体概念。

(3)理论知识重点讲解。让学生了解并掌握要做项目的原理。

(4)分组实验。按照电子设计比赛要求自由组合成若干项目组,根据所学知识实现项目。若碰到难解决的问题,鼓励项目组成员通过讨论,查阅资料自己解决,实在解决不了再询问老师,这样既锻炼了学生的动脑、动手、自主思考的能力,也培养了学生的团队协作精神。

(5)评价总结。结合项目实现目标要求评价硬件、软件完成质量;小组演示汇报任务开发过程及结果;按评分标准对各组进行评价,形成最终评价结果,作为平时成绩备案,给学生一个积极动力。

2.3 基于电子设计项目为教学方法要注意的地方

采用项目教学法授课,每个项目会直接影响教学效果,因此,对于设计哪些项目、各个项目之间的链接有十分重要的关系。[3]

第一,项目要以学生的实际水平设计难度。设计的要实现项目,应充分考虑学生的知识水平、认知能力,保证能够完成每个子项目,从而尽量能完成整个项目。

第二,每个项目要有明确的目标。将每个项目细分成一个个小的项目,通过完成小项目来逐步实现总的学习目标,对于大的项目采取分组学习讨论。

第三,在项目教学法中,应以学生为中心。教师要进行角色转变,整个教学过程中,要突出学生的主体地位。

3.结束语

采用C语言进行单片机教学,大大提高了课堂学习效率与学生对单片机的学习兴趣;采用基于电子设计项目的教学方式,将单片机各部分内容融入各个讲解的项目中,让学生在做项目的过程中不断寻找问题,找到问题再通过学习理论知识解决问题,最终实现每个要求的项目,一个个的新项目完成,到最后整个单片机知识也就掌握了。

我校自动化专业单片机技术的教学,使用基于电子设计的C语言单片机教学收到了良好的效果。实践证明,理论够用,重在实用。这是进一步培养应用型人才教学改革的一个方向。

参考文献

[1]蔺玉珂.基于工作过程教学的单片机课程改革研究[J].单片机与嵌入式系统应用,2010(4):5.

[2]董蕴宝,潘旭君.浅谈C语言在单片机中的程序设计[J].科技信息,2009(13):59.

[3]李世红.项目教学法在单片机C语言中的运用[J].中国现代教育装备,2011(5):125.

单片机c语言范文第9篇

【关键词】C语言 项目教学 单片机项目

【中图分类号】G 【文献标识码】A

【文章编号】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

for(k=1;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

结合实验现象,引导学生思考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程序的能力,经过两个学期的实践教学,学生编程技能得到有效提高,教学效果有了明显改善,基本实现预期教学目标。

【参考文献】

[1]孙慧.在电子类专业中开展 C 语言教学改革的实践探索[J].技术与市场,2014(12)

[2]卢敏.基于 PI 能力培养的 C 语言教学改革研究与实践[J].软件导刊(教育技术),2014(11)

[3]黄建灯.《C 语言程序设计》教学改革探讨[J].电子世界,2012(12)

[4]莫建平,潘晓明.基于C语言的单片机课程教学改革探论[J].柳州师专学报,2014(4)

[5]谭浩强.C语言程序设计教程(第三版)[M].北京:清华大学出版社,2013

【作者简介】邓 云(1983― ),男,广西全州人,硕士,广西职业技术学院讲师,研究方向:电子技术。

单片机c语言范文第10篇

关键词:工作过程;C语言程序设计;单片机课程;电子设计竞赛

在电子信息专业中,C语言主要服务于单片机应用,而单片机的运用对《C语言程序设计》的要求,从思维方式上讲,培养学生的逻辑思维能力,分析问题、解决问题的能力等;从行为能力上讲,培养学生利用C语言编程能力对单片机综合项目进行控制设计。然而,在具体的教学过程中,由于课程本身的难度以及受学生基础、教学内容、教学方法、教学条件等各方面的限制,其教学目标的培养大打折扣。为了学生能够通过学习C语言从而获得与单片机密切结合的综合职业能力,并保证其相关的经验、知识和技能在结构上的系统化,本文以“基于工作过程的学习方法”为核心,将“工作过程中单片机的运用学习”和“课堂上C语言知识的学习”整合为一个有机整体,[1]形成一套新的课程改革模式,从而提高教学质量,增强学生的职业技能,拓宽学生的求职渠道。

一、C语言程序设计在电子类专业中的现状

(1)目前大部分高职电子类专业的人才培养方案中,仍沿用本科院校的课程体系,[2]其《C语言程序设计》教材仍采用本科院校计算机专业教师编写,针对性不强,很难有效的服务于高职电子类专业课程的学习。(2)《C语言程序设计》的学习与专业课程单片机的学习脱钩,使学生学习C语言的目标不明确,很难将C语言知识与专业核心课程单片机的学习有效结合,从而影响单片机教学的有效展开。(3)《C语言程序设计》课程本身的难度以及学生自身的底子薄,形成学生难学、厌学,进而逃课的恶性循环。

二、基于工作过程的C语言课程与单片机课程总体设计

本文提出了一种基于工作过程的C语言课程与单片机课程有效结合的课程改革模式,如下图1所示。

图1 改革的课程体系

从工作过程出发,将单片综合项目的应用分解为C语言课程任务、C语言与单片机的结合、单片机课程任务三个部分,C语言课程任务和单片机课程任务两者服务于C语言与单片机的结合;C语言课程任务主要面向C语言程序设计的知识点学习即C语言的课程领域;C语言与单片机的结合又可分解为C语言在单片机中的算法学习和单片机中的C语言程序设计;单片机课程任务主要面向单片机内部资源的学习即单片机课程领域;最后将 C语言的课程领域和C语言在单片机中的算法学习相结合,形成一门《基于单片机的C语言程序设计》课程,并将单片机课程领域和单片机中的C语言程序设计相结合,形成一门《单片机综合应用》课程。

三、基于单片机运用领域的C语言学习领域重构

(一)C语言学习领域重构。如下图表1所示,将七个典型单片机项目所需要的C语言知识点打勾,根据各个项目所需要的知识点,重新组织C语言课程的学习领域,形成重、难点突出,与专业课程紧密结合,针对性强的具有专业特色的C语言程序设计教程。

表1 基于单片机项目的C语言学习领域重构

(二) C语言学习领域中教学例子选取。在C语言知识讲解中,我们将典型单片机项目分割成多个独立完整的子任务,并将这些子任务稍加调整修改,使C语言知识点贯穿其中,让学生从专业的实际运用中来学习C语言,既保证了C语言知识的系统性,又将C语言理论知识融入实践任务,不仅可以培养学生专业技能,而且还培养学生学习C语言的兴趣。

四、全文总结

本文融“教、学、做”为一体,强化学生能力的培养,将C语言课程与单片机课程进行了有机结合,形成新的课程模式,并对新的课程模式中《基于单片机的C语言程序设计》课程的知识领域进行了重构、教学例子进行了选取,从而促进了人才培养方案的正确修订、课程体系的科学整合。

参考文献:

上一篇:单片机原理与接口技术范文 下一篇:单片机设计范文