单片机c语言

2025-02-10 版权声明 我要投稿

单片机c语言(共8篇)

单片机c语言 篇1

汇编语言的缺点:

(1)编写的代码非常难懂,不好维护

(2)很容易产生bug,难于调试

(3)只能针对特定的体系结构和处理器进行优化

(4)开发效率很低,时间长且单调

汇编语言的特点

1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的2.保持了机器语言的优点,具有直接和简捷的特点

3.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等

4.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言

5.经常与高级语言配合使用,应用十分广泛

对于不同型号的计算机,有着不同的结构的汇编语言,学习难度大。

C语言是一种结构化的高级语言。其优点是可读性好,移植容易,易学易用,是普遍使用的一种计算机语言。

c语言优点:

1、语言简洁,使用方便灵活,可大幅度提高开发速度,系统越复杂,开发效率越高。

2、无须深入了解单片机内部结构,和复杂的单片机汇编语言指令集

3、可进行模块化开发,软件逻辑结构清晰,有条理,易于分工合作

4、可移植性好,写好的一个c语言算法,可方便地移植到其他单片机上,而汇编语言相对要复杂的多。

5、可直接操作硬件

随着单片机的内部资源越来越多,存储空间越来越大,资源已经不是考虑的首要问题,c语言可以大大提高开发的效率,c 语言是初学者的首选语言。汇编语言在实时性,执行效率上有不可替代的优势。大部分情况下c语言就可以满足要求,在实时性要求高的某些场合中,可用c语言和汇编语言混合编程的方式,兼顾开发效率和实时性。了解汇编语言对于学习单片机的内部结构,执行过程非常有帮助,是成为单片机高手需要掌握的语言。c语言进行单片机程序设计是单片机开放与应用的必然趋势。

小企鹅diy科学探究学习网

单片机c语言 篇2

1 为什么要用C语言

1.1 汇编语言的优势及不足

众所周知, 汇编语言是面向机器的语言, 它一刻也离不开具体的机器, 所以不同的机器, 汇编语言也不同。

汇编语言是与计算机的机器语言一一对应的, 因此, 用汇编语言编写的程序效率高, 占用储存空间小, 运行速度快, 这是汇编语言程序的优势所在。

然而祸为福所倚, 正因为汇编语言与计算机的硬件密不可分, 不同的机器就有不同的汇编语言, 因此汇编语言难学、难编、难读、难懂、难移植, 这五难是公认的, 几乎所有的单片机教材中都有相应的论述[2]。既是所有用汇编语言从事过单片机的开发与应用的工程技术人员的共同感受;也是所有用汇编语言从事过单片机教学的各级各类教师的共同感受。这就是汇编语言的不足。

1.2 C语言的优势与不足

C语言是一种结构化语言, 它层次清晰, 按模块化组织程序, 易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型, 便于实现各类复杂的数据结构, 它还可以直接访问内存的物理地址, 进行位 (bit) 一级的操作。由于C语言实现了对硬件的编程操作, 因此C语言集高级语言和底层级语言功能于一体, 既可用于系统软件的开发, 也适合于应用软件的开发。此外, C语言还具有效率高、可移植性强等特点, 因此C语言广泛地移植到了各类各型计算机上, 从而形成了多种版本的C语言, 单片机的C语言就是这多种版本之一, 它是应用于51单片机的一种C程序开发语言.现在几乎所有的单片机、微处理器、微控制器开发平台都支持用C语言进行程序设计。使C语成为当代最优秀的程序设计语言之一, 获得了极为广泛的应用。

C语言进入51单片机后, 它的优势得到了充分的展示, 它不象汇编语言那样要熟练掌握指令系统, 也不要象汇编语言那样要对程序的起始地址、主程序的起始地址、中断服务子程序起始地址、保护现场、恢复现场、保存断点、返回断点、堆栈指针、进堆栈、出堆栈、子程序中的入口参数、出口参数、参数的传递、四组工作寄存器的内在联系等难度很大的知识点要有非常透彻的了解;它只要求对单片机的片内结构有个大致的了解;它易学、易懂、上手快;它功能强大, 移植性强;它集高级语言和底层语言于一身;它的各种各样的数据 (信息) 既可以以变量的形式出现于各个函数中, 也可以以地址的形式访问单片机的片内、片外的各种数据存储器及程序存储器的任何单元。可以说, 汇编语言能做到的事情, C语言不但能做到, 而且能轻而易举的实现之。因此它获得了越来越广泛的应用。正因为C语言有如此明显的优越性, 原来使用汇编语言的工程技术人员也纷纷抛弃汇编语言而跨入用C语言开发单片机的行列中。这就是我们为什么要用C语言对单片机进行教学的原因。

C语言相对汇编语言而言, 同样功能的程序所需内存相对较多, 执行速度相对较慢, 这就是C语言的不足。

2 单片机的C语言教学法

2.1 单片机的发展使汇编语言的优势失去光泽

C51系列单片机在各行各业获得了广泛应用这已经是不争的事实, 继最初的基本型8031/8051/8751和增强型8032/8052/8752后, 相继又推出了AT89C51/89C52/89S52/89C55和S T C 8 9 C 5 1/S T C 8 9 C 5 2/STC89S51/STC89S52/STC89C55, 目前的S T C 1 2 C 5 A 6 0 S 2系列单片机, 它的应用程序空间有8K/16K/20K/32K/40K/48K/52K/60K字节;它的工作频率范围为0-35MHZ, 由于它的机器周期是单时钟周期, 即一个时钟周期就是一个机器周期 (光这一点就使单片机的运行速度提高12倍) , 所以0-35MHZ的工作频率相当普通的8051的0-420MHZ的工作频率, 这两大优势使C51相对于汇编语言而言的代码运行效率低和代码长的缺陷得到了很好的弥补, 也使得用汇编语言编写的程序效率高、占用储存空间小、运行速度快这一汇编语言的优点失去了光泽, 使这一优点变得没有什么实际意义了。相反它的难编、难读、难懂、难移植的缺点没有丝毫改变。为C51成为单片机开发与应用的主流程序设计语言奠定了基础。

2.2 C语言教学法的实践

对单片机实施C语言教学法时, 将C语言程序中不需要的汇编语言的指令系统、伪指令、汇编语言程序设计都删去不讲, 讲述单片机的硬件知识时也以C语言编程需要为出发点, 与C51编程无关的硬件知识不再讲授。

理论课的具体做法是:第1章单片机慨述 (花两学时讲授单片机的发展历史及发展趋势, 单片机的应用, MCS-51系列, ATMEL系列, STC系列单片机简介) ;第2章STC89C51单片机的硬件结构, 重点讲授存储器的分布及结构、四个行I/O口 (P0、P1、P2、P3) 、40个片脚及功能;第3章讲授单片机的C51基础知识, 由于开设单片机课程之前, 学生已经学习完C语言程序设计, 这一章重点介绍C51与标准C的不同之处, 复习C语言程序的基本结构与相关语句 (if语句、swith/case语句、while语句、for语句) 的用法。笫4章介绍Keil C51软件的安装、项目的建立、C51程序的编辑、编译、下载及执行 (做一个实验解决) 和C51的库函数。第5-第7章介绍89C51的内部资源, 包括STC89C51的中断系统, 定时器/计数器, 串行囗及它们的C51编程技术。第8-第11章介绍STC89C51单片机与I/O接口、独立键盘、矩阵键盘、LED显示器、LCD显示器、A/D、D/A及I2C的C51编程及应用技术, 第5章及以后各章介绍硬件知识时着重讲授51单片机中21个特殊功能寄存器中的15个 (P0、P1、P2、P3、IE、IP、TCON、SCON、TMOD、TH0、TL0、TH1、TL1、PCON、SBUF) 的功能及用法, 如何实现I/O控制、外中断控制、定时中断控制、计数中断控制、LED静态显示、LED动态显示、独立键盘检测、行列式键盘检测、LCD1602显示字符、LCD12864 (或LCD12232) 显示汉字、A/D转换及显示、D/A转换及显示、I2C电路在线存储数据等各种实用的编程技术及理论基础知识。

2.3 与C语言教学法配套的实验

单片机的教学不管用哪种教学方法, 实践动手能力的培养是非常重要的一环, 与单片机C语法教学法配套的实验开发板不但功能强、性能好、而且价格便宜 (150元/套左右) , 可以开出I/O控制 (流水灯) 、外中断控制、定时中断控制、计数中断控制、LED静态显示、LED动态显示、独立键盘检测、行列式键盘检测、LCD1602显示字符、LCD12864 (或LCD12232) 显示汉字、A/D转换及显示、D/A转换及显示、I2C电路在线存储数据、单片机控制继电器、单片机控制报警器、单片机控制步进电机、单片机与单片机的串行通信、单片机与PC机的串行通信等20多个实验, 学生爱不释手, 许多家庭经济条件许可的学生干脆自己买一台, 有空闲时就动手, 这种开发实验板激发起学生浓厚的兴趣, 大大提高了学生的积极性, 为单片机的C语言教学法提供了理想的实验手段和支撑。

2.4 与C语言教学法配套的课程设计

开设单片机原理及应用课程的多数专业都有一个与该课程配套的课程设计。与单片机的C语言教学法配套的课程设计有实时时钟的设计与实现和数据集系统的设计与实现, 下面我们把实时时钟的设计与实现的功能及具体做法介绍如下。

要求实现的具体功能:

1) 时间显示在LCD1602液品上, 按秒实现更新;

2) 能够利用按键随时调节时钟的时、分、秒, 按键可设计三个有效键, 分别为功能选择键、数值大键、数值小键;

3) 每次有键按下时, 蜂鸣器都以短“滴”声报警;

4) 利用AT24C02实现断电自动保护显示数据的功能, 当下次上电时接着上次断电前的时间数据继续运行;

5) 在LCD1602的第一行显示年、月、日和星期, 第二行显示时、分、秒;

具体做法:第一步先用Proteus仿真实现之, 第二步在万能板上焊接调试成功。其结果是70%以上的同学能做出来, 达到良好或优良, 30%的同学为中等和及格。

3 单片机的C语言教学法效果

笔者于2011年上半年及下半年针对民办独立学院的计算机科学与技术专业0801班、网络工程专业0801班、电子信息工程专业0901班三个班的教学实践证明, 不管是单片机的内部结构、内部资源还是理论与实践结合在一起的单片机控制流水灯、单片机的外中断控制报警器、控制继电器、LED静态显示、LED动态显示、定时中断实现实时时钟的显示、串行通讯、独立键盘的检测与显示、行列式键盘的检测与显示、LCD1602显示字符及左移右移、LCD12864显示汉字及左移右移、DAC0832数模转换及显示、ADC0809系列的模数转换及显示、E2PROMAT24C02与单片机的通讯等的教学都非常顺利, 与汇编语言教学法相比真有半功倍之效。学生学起来轻松, 兴趣盎然, 劲头十足;教师教起来也是轻松愉快, 信心十足。本文中的有关课程设计的内容难度也不小, 先用Proteus仿真, 然后各自在万能板上焊接单片机的最小系统配以LCD1602、AT24C02及报警器, 70%的同学可以达到良好及以上。有人说你要是用单片机做出一个电子钟, 那你基本上已经掌握单片机的80%了, 这句话有道理, 电子钟对编程的综合性要求还是相当高的【3】。从这句话也可以看出单片机C语言教学法的效果。

参考文献

[1]唐存皮, 陈小琴, 金红.提高单片机教学效果的实验教法方法探讨[J].电气电子教学学报.2006 (3) :108-109.

[2]刘剑, 刘奇.51单片机开发与应用基础教程 (C语言版) [M].北京:中国电力出版社, 2012.

高职C语言与单片机融合教学初探 篇3

关键词: 高职教育 C语言 单片机 融合教学 智能车

引言

随着电子技术的飞速发展,采用C语言开发的单片机控制类产品占据了大量市场。单片机产品的设计、生产、调试和维修岗位需要大量高职人才。因此,C语言课程和单片机应用课程成为应用电子、电气自动化、计算机控制技术等工科专业的主干课程。这些课程的实践性要求较高,对高职学生有一定难度。因此,开展高职院校C语言和单片机课程的教学改革成为高职教学研究的热点。根据高职学生的特点和岗位需求开展教学工作,对学生更快地适应工作岗位有重要的现实意义。笔者结合多年C语言和单片机的教学经验,对高职的C语言和单片机的融合教学进行探讨。

1.传统教学的不足

1.1知识遗忘率高。

国内高职院校电子电气类专业的单片机教学大多选用汇编语言或者C语言开发单片机应用系统。以51单片机为主流的汇编语言,指令数量多,不方便记忆。因此,越来越多的高职院校转向C语言开发工具的单片机教学。根据传统的高职教学方案,C语言课程和单片机课程开设在不同学期,C语言是单片机的先修课程。为了构建相对完整的知识体系,学生在学习完C语言之后才开始学习单片机,时间相隔长达半年之久。这种做法导致知识遗忘率较高,迫使一些教师把复习C语言作为单片机课程的教学内容之一,以此强化教学效果。由于总学时有限,单片机本体的教学内容相对减少,导致学生对单片机学得不深、学得不透。

1.2内容枯燥,实践少。

在C语言的机房教学过程中,主要的输入输出设备是键盤和屏幕,以简单计算为主的教学内容相对枯燥,表现形式单一。学生很容易把C语言单纯理解为计算机专业课,与所学的电子电气专业无关。这种对C语言主要功能的认识误区,会降低学习兴趣,削弱单片机开发的语言基础。C教学实践表明:电类专业的高职学生很难深入理解指针和数组的应用,对C语言的嵌入式开发功能理解不透,导致先修课程基础不牢固。进入单片机学习阶段以后,薄弱的C语言基础将会妨碍单片机的教学效果。同时,单片机特有的寄存器C定义和特殊位指令还需要补充学习。

传统的单片机教学以理论教学为主,按照“硬件封装—寄存器功能—软件流程—外围接口”的顺序,强调和追求完整的单片机理论体系结构。由于缺乏合适的实践载体,因此大量专业术语的枯燥讲解使学生上课时昏昏沉沉,似懂非懂。过多的理论灌输使很多学生放弃了单片机课程的学习。这种“重理论、轻实践”的教学模式培养出的学生,很难快速适应今后的单片机工作岗位。

1.3理实脱节,创新少。

传统的单片机课程大多数采用实验箱进行实践教学[1],完成验证性的实验。这种实践模式跟单片机的实际产品有很大差异,教学效果不理想。不少“95后”的学生功利心强,为了早点完成实验,过度追求实验结果,忽略了单片机硬件电路装调、软件调试测试方面的能力提高。当全部课程结束的时候,很多同学对单片机产品开发、装调的全过程不了解,对单片机仿真器的仿真方法(尤其是硬件仿真)掌握不到位。这种教学过程理实脱节的现象,抑制了学生创新能力的发挥。

2.融合教学的设计

针对上述问题,我们探索把C语言和单片机的知识有效融合,推进教学改革,开展项目教学,采用“教、学、做”一体化的融合教学,强化教学效果,更好地体现高职高专的教学特色和教学理念。

教学改革方案的总体思路是:以具有吸引力的项目载体为主线,把C语言和单片机课程融合,开设“C语言与单片机”课程。在高职教学过程中,采用“教、学、做”一体化授课,提高学生动手实践能力。以够用为原则,适当精简C语言的教学内容,降低教学深度。适度增加单片机应用的自主创新环节,鼓励学生思考,提高应用创新能力。

2.1项目载体。

合适的项目载体有利于实现高职项目化教学[2],促进学生技能的培养。选择“贴近生活”、“通俗易懂”的项目载体,是提高学生学习兴趣的有效手段。在本教学方案设计中,我们选用的项目载体是:单片机智能车。智能车属于机电一体化的作品,体积小,重量轻,实施难度适合高职高专的教学水平。项目载体的主要功能是采用AT89S52单片机控制车轮伺服电机,实现智能车的运动控制。在光电传感器的配合下,单片机控制小车进行循迹运动。在超声传感器的支持下,单片机控制小车实现“避障”功能。

2.2具体方案。

“C语言与单片机”融合课程总计60学时,其中实践30学时,理实比为1:1。教学全过程以单片机智能车为核心,以学生为主体,教师起引导作用。学生通过智能车的制作与调试提高动手实践能力,通过思考和提问激发创新思维。整体教学方案可以分成六个模块,简述如下:

(1)课程导入和智能车综述

在这个教学模块中,教师首先讲授单片机的典型应用、历史沿革、主流分支和前沿技术,使学生了解课程的教学目标和对应工作岗位,浅显了解单片机产品。其次,教师演示装调好的智能车实物,学生能正确理解智能车的主要功能,提高学习兴趣。实践环节安排的内容是单片机智能车的结构件安装。在教师的指导下,学生根据产品套件说明书的要求,使用螺丝刀完成车架、车轮、电机、电沲盒等结构件的安装和调试。在装调完毕以后,教师补充讲解智能车应用场合和综述,学生对项目载体有了更加清晰的认识。

(2)控制板的硬件设计与装调

首先,学生完成智能车单片机控制电路板的安装、焊接和硬件调试。其次,教师讲解单片机最小系统(包含:单片机、时钟电路、复位电路)的电路结构和工作原理。学生在明确单片机IO接口使用方法之后,简单了解车轮伺服电机的驱动电路工作原理。通过“讲练结合”的教学方法,学生得到了单片机产品的硬件设计、安装、调试的全过程体验,掌握了电路组成和原理,提高了单片机硬件装调的实践能力。

(3)简单运动的开发调试

本教学模块主要完成智能小车C51的IO接口控制,实现伺服车轮的前进功能。教师在简要介绍51单片机系统的软硬件开发环境之后,把教学重点转入C语言。通过LED亮灯的样例程序,完成C语言的概述导入。在本模块教学中,主要涉及的C51知识点有:数据类型、运算符与表达式;C51特殊功能寄存器的C定义;51的位类型与位运算;顺序结构程序设计。在操作方面,学生须掌握KEILμVision软件开发平台的使用方法,包括代码编辑、编译、下载和仿真调试。

(4)复杂运动的开发调试

本教学模块的主要功能是:通过C51控制小车的伺服车轮,完成后退、转圈、加减速、转向等复杂运动功能。在这一阶段,学生可以通过项目载体的调试,结合51单片机的特点,完成C语言中选择结构程序、循环结构程序的学习。在此基础上,教师引导学生尝试进行程序优化,教会学生数组的使用、函数的调用技巧。

(5)人机接口模块的开发调试

在智能小车的单片机控制板上,增加数码显示和触须接口,可以完成小车运动计时和触碰避障功能。在教学过程中,通过“先做后讲”的方式提高學习兴趣能够取得更加理想的教学效果。学生通过实践环节观察单片机人机接口的电路结构,通过C51编程与调试直接体验“软件去抖动”、“LED字形码编程”等应用技巧。

(6)避障模块的开发调试

避障模块装调是智能小车项目载体的综合教学环节。在C语言应用部分,侧重指针、结构体编程和开发。在单片机方面,须掌握“中断”的概念及其应用方法、串行接口的调试与编程。避障模块采用了红外反射传感器,融合了传感器应用[3]、模拟信号调理等方面知识。因此,开发调试智能小车的避障模块,能加深学生对单片机产品总体框架的理解,培养他们的单片机综合应用能力和开发能力。教学实践表明:部分优秀学生在这一阶段能优化和创新避障算法程序,提升小车的智能化水平,学生的产品创新意识得到进一步强化。

以上六个模块的教学方案以智能小车装调为核心,包含了传统C语言课程和单片机课程的主要知识点。智能小车体积小,重量轻,易于携带,便于各种教学方法的灵活运用[4]。比如:我们把课堂教学与课外教学紧密结合,组织“城院巧匠杯智能小车”竞赛,激发学生学习热情,丰富课余生活,提高学生的单片机综合应用能力和创新能力。“C语言与单片机”融合课程采用模块计分的评价考核方式,前五个模块各占总分的15%,第六模块占25%。在考核方案中,重视学生的过程体验,把团队协作、职业素养作为评价的重要组成部分,提高学生综合职业素质。

结语

高职传统的C语言课程和单片机课程分开教学,知识遗忘率高,教学效率低,融合度差,理实不能有效结合,不利于创新型人才的培养。针对上述不足,本文探讨了以单片机智能车为项目载体的C语言与单片机融合教学设计,给出了六模块教学的具体方案。教学实践表明:采用“教、学、做”一体化融合两门课程的教学改革方案,方便运用各种教学方法,学以致用,有效激发高职学生的学习热情,有助于创新能力和职业素质的培养,达到良好的教学效果。

参考文献:

[1]冯惠秋,吕宁.《单片机基础及应用》课程实践模式探索[J].职业教育研究,2013(6):123-124.

[2]焦玉全,朱燕祥.单片机原理及应用课程项目化教学探索[J].读与写(教育教学刊),2013(7):29-30.

[3]李潇雯.智能小车设计中传感器的应用[J].太原大学教育学院学报,2015(2):96-99.

初步学习单片机C语言学习心得1 篇4

感觉自己在c语言方面的知识很不熟悉,知识自己初步懂得c语言而已,今后的学习自己要多看c语言,这对以后的学习很重要,没有基础谈何学习以后更加难懂的知识,就已今天的一个程序而言,一个流水灯的程序,被2个for循环搞的晕头转向,#include

Void delay(int)

void delay(int t){int a,b;for(a=0;a

for(b=0;b<1100;b++);} void main(){

P1=0xfe;

delay(100);

P1=0xfd;

delay(100);

P1=0xfb;

delay(100);

P1=0Xf7;

delay(100);

P1=0xef;

delay(100);

P1=0xdf;

delay(100);

P1=0xbf;

delay(100);

P1=0X7f;

delay(100);

} 自己始终把t*1100当成时间,其实不是,而是t*1100还要乘以一个T,T是执行一个分号所用的时间,另外以下的表格对于自己而言也很重要!!#include sbit D1=P1^0;unsigned a;void main(){ while(1){

a=60000;

D1=0;

while(a--);

a=60000;

D1=1;

while(a--);} }

灯光闪烁程序 #include #define uint unsigned int #define uchar unsigned char sbit D1=P1^0;void delay();void main(){ while(1){

D1=0;

delay();

D1=1;

delay();

} } void delay(){ uint x,y;for(x=100;x>0;x--)

for(y=600;y>0;y--);} 利用调用子程序设计闪灯。#include #include #define uint unsigned int #define uchar unsigned char uchar temp;void delay(uint);void main(){

temp=0xfe;

P1=temp;while(1){

temp=_crol_(temp,1);

delay(2000);

P1=temp;

} } void delay(uint z){ uint x;uchar y;for(x=z;x>0;x--)

for(y=20;y>0;y--);} 利用intrins函数以及延时子程序编写流水灯

编写一个流水灯,在灯亮的时候蜂鸣器响,灯灭的时候蜂鸣器不响,亮灭灯时间间隔为0.5s #include #include #define uint unsigned int #define uchar unsigned char uchar temp;sbit gu=P2^3;void delay(uint);void main(){

temp=0xfe;

P1=temp;// gu=0;while(1){

gu=0;

temp=_crol_(temp,1);

delay(1920);

P1=temp;

gu=1;

delay(1920);}

} void delay(uint z){ uint x;uchar y;for(x=z;x>0;x--)

for(y=20;y>0;y--);}

中断优先级

#include #define uint unsigned int #define uchar unsigned char sbit wede=P2^6;sbit dude=P2^7;uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};uchar num,tt;void main(){ num=0;tt=0;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;wede=1;P0=0xe3;wede=0;dude=1;P0=0x3f;dude=0;

while(1)

{

if(tt=20)

{

tt=0;

num++;

if(num=16)

num=0;

dude=1;

P0=table[num];

dude=0;

单片机c语言 篇5

课题:

教学目的: 教学重点: 教学难点: 第一章 C语言概述

1、了解C语言出现的背景

2、掌握C语言程序的构成、书写格式和上机步骤 C语言程序的构成 上机操作

步骤一 引入新课

从计算机应用基础中学过的计算机语言及语言处理系统引出C语言。步骤二 讲授新课

一、C语言出现的背景

1.ALGOL60 :1960年面向问题、结构化,可读性、可移植性好,不能对硬件操作; 2.CPL:63年接近硬件,规模较大、难以应用;

3.SIMULA:1966~1967 SIMULA 66是ALGOL 60的扩充;SIMULA 67引进了“对象”和“类”等概念而成为第一个面向对象的语言;

4.BCPL :67年由CPL改制,结构化、直接处理硬件;

5.B语言:1970年贝尔实验室的Ken Thompson以BCPL语言为基础设计的,开发了第一个UNIX操作系统;

6.C语言:1972-73年间,保持了BCPL和B语言的精炼与接近硬件的优点,克服了它们过于简单、数据无类型的缺点,重写了UNIX操作系统的90%;

7.标准 C:以1978年发表的UNIX第七版中的C编译程序为基础,Brain W.Kernighan&Dennis M.Ritchie合著的《The C Programming Language》问世; 8.ANSI C:1983年美国国家标准化协会(ANSI)制定的标准

9.C++:1986年 与C兼容,保持了C的所有优点并进行了增强:增强了面向对象的机制,成为典型的面向对象和面向过程的混合语言,适用于大型系统软件和应用软件的开发;

10.87 ANSI C:1987年制定的新标准;

11.ISO C:1990年ISO接受87 ANSI C为ISO C的标准,该标准是目前C编译器的标准。

二、C语言的特点

1.语言简洁、紧凑,使用方便、灵活; 2.运算符丰富

3.数据类型多(整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类等)4.具有结构化的控制语句 5.语法不太严格,自由度大

6.既是高级语言,又具有低级语言的功能 7.生成目标代码质量高,程序执行效率 8.可移植性好

三、C语言程序的构成

1.C语言是由函数构成的,至少有一个main()函数;

2.每个函数由函数首部和函数体组成;函数体由说明语句、执行语句组成; 3.每个C程序从main()函数开始执行,并在main()中结束; 4.每个语句和数据定义的最后必须加分号;

5.C程序无输入、输出语句

输入功能由scanf()函数完成;输出功能由printf()函数完成; 6.可加注释/*……*/

借助程序实例加以说明,并提倡良好的程序设计书写风格: 1)每个语句占一行;

2)同一层次的语句从同一位置处开始书写;

3)同一层次中嵌套的结构,应从不同位置开始书写;

4)编译控制行、外部数据定义、函数定义之间空一行书写; 5)对于函数体的大括号的书写约定 6)学会使用注释。

四、上机步骤

1.进入环境c:tctc 或进入ms-dos,>cd,>cd tc,>tc 2.编辑源程序 3.保存源程序 4.编译源程序F9 5.执行程序Ctrl-F9,查看结果Alt-F5 6.退出C环境Alt-X

步骤三 课堂小结

1、C语言的构成要素,main函数在程序中的作用

2、上机操作的过程

步骤四 布置作业 上机练习:

1、进入C编辑环境,按良好的程序设计风格输入例题,按步骤编译、运行、查看结果

单片机c语言 篇6

1)字符串操作

strcpy(p, p1)复制字符串

strncpy(p, p1, n)复制指定长度字符串 strcat(p, p1)附加字符串

strncat(p, p1, n)附加指定长度字符串 strlen(p)取字符串长度 strcmp(p, p1)比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n)比较指定长度字符串 strchr(p, c)在字符串中查找指定字符 strrchr(p, c)在字符串中反向查找 strstr(p, p1)查找字符串

strpbrk(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 strspn(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移

strcspn(p, p1)以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移

* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符

2)字符串到数值类型的转换

strtod(p, ppend)从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。

strtol(p, ppend, base)从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整

型进制,设置为 0 以根据特定格式判断所用进制,0x, 0X 前缀以解释为十六进制格式整型,0 前缀以解释为八进制格式整型 atoi(p)字符串转换到 int 整型 atof(p)字符串转换到 double 符点数 atol(p)字符串转换到 long 整型

3)字符检查

isalpha()检查是否为字母字符 isupper()检查是否为大写字母字符 islower()检查是否为小写字母字符 isdigit()检查是否为数字

isxdigit()检查是否为十六进制数字表示的有效字符 isspace()检查是否为空格类型字符 iscntrl()检查是否为控制字符 ispunct()检查是否为标点符号 isalnum()检查是否为字母和数字 isprint()检查是否是可打印字符

isgraph()检查是否是图形字符,等效于 isalnum()| ispunct()

4)函数原型

原型:strcpy(char destination[], const char source[]);功能:将字符串source拷贝到字符串destination中 例程:

#include #include

void main(void){

char str1[10] = { “TsinghuaOK”};

char str2[10] = { “Computer”};

cout <

注意:在定义数组时,字符数组1的字符串长度必须大于或等于字符串2的字符串长度。不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。所有字符串处理函数都包含在头文件string.h中。

strncpy(char destination[], const char source[], int numchars);strncpy:将字符串source中前numchars个字符拷贝到字符串destination中。strncpy函数应用举例

原型:strncpy(char destination[], const char source[], int numchars);功能:将字符串source中前numchars个字符拷贝到字符串destination中 例程:

#include #include void main(void){

char str1[10] = { “Tsinghua ”};

char str2[10] = { “Computer”};

cout <

原型:strcat(char target[], const char source[]);功能:将字符串source接到字符串target的后面

例程:

#include #include void main(void){

char str1[] = { “Tsinghua ”};

char str2[] = { “Computer”};

cout <

原型:strncat(char target[], const char source[], int numchars);功能:将字符串source的前numchars个字符接到字符串target的后面 例程:

#include #include void main(void){

char str1[] = { “Tsinghua ”};

char str2[] = { “Computer”};

cout <

原型:int strcmp(const char firststring[], const char secondstring);功能:比较两个字符串firststring和secondstring 例程:

#include #include

void main(void){

char buf1[] = “aaa”;

char buf2[] = “bbb”;

char buf3[] = “ccc”;

int ptr;

ptr = strcmp(buf2,buf1);

if(ptr > 0)

cout <<“Buffer 2 is greater than buffer 1”<

else

cout <<“Buffer 2 is less than buffer 1”<

ptr = strcmp(buf2,buf3);

if(ptr > 0)

cout <<“Buffer 2 is greater than buffer 3”<

else

cout <<“Buffer 2 is less than buffer 3”<

原型:strlen(const char string[]);功能:统计字符串string中字符的个数 例程:

#include #include void main(void){ char str[100];cout <<“请输入一个字符串:”;cin >>str;

cout <<“The length of the string is :”<

void *memset(void *dest, int c, size_t count);将dest前面count个字符置为字符c.返回dest的值.void *memmove(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.如果src和dest出现重叠, 函数会自动处理.返回dest的值.void *memcpy(void *dest, const void *src, size_t count);从src复制count字节的字符到dest.与memmove功能一样, 只是不能处理src和dest出现重叠.返回dest的值.void *memchr(const void *buf, int c, size_t count);在buf前面count字节中查找首次出现字符c的位置.找到了字符c或者已经搜寻了count个字节, 查找即停止.操作成功则返回buf中首次出现c的位置指针, 否则返回NULL.void *_memccpy(void *dest, const void *src, int c, size_t count);从src复制0个或多个字节的字符到dest.当字符c被复制或者count个字符被复制时, 复制停止.如果字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针.否则返回NULL.int memcmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节大小.返回值< 0, 表示buf1小于buf2;返回值为0, 表示buf1等于buf2;返回值> 0, 表示buf1大于buf2.int memicmp(const void *buf1, const void *buf2, size_t count);比较buf1和buf2前面count个字节.与memcmp不同的是, 它不区分大小写.返回值同上.char *strrev(char *string);将字符串string中的字符顺序颠倒过来.NULL结束符位置不变.返回调整后的字符串的指针.char *_strupr(char *string);将string中所有小写字母替换成相应的大写字母, 其它字符保持不变.返回调整后的字符串的指针.char *_strlwr(char *string);将string中所有大写字母替换成相应的小写字母, 其它字符保持不变.返回调整后的字符串的指针.char *strchr(const char *string, int c);查找字 串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL.char *strrchr(const char *string, int c);查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符.返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL.char *strstr(const char *string, const char *strSearch);在字符串string中查找strSearch子串.返回子串strSearch在string中首次出现位置的指针.如果没有找到子串strSearch, 则返回NULL.如果子串strSearch为空串, 函数返回string值.char *strdup(const char *strSource);函数运行中会自己调用malloc函数为复制strSource字符串分配存储空间, 然后再将strSource复制到分配到的空间中.注意要及时释放这个分配的空间.返回一个指针, 指向为复制字符串分配的空间;如果分配空间失败, 则返回NULL值.char *strcat(char *strDestination, const char *strSource);将源串strSource添加到目标串strDestination后面, 并在得到的新串后面加上NULL结束符.源串strSource的字符会覆盖目标串strDestination后面的结束符NULL.在字符串的复制或添加过程中没有溢出检查, 所以要保证目标串空间足够大.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncat(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符添加到目标串strDest后.源串strSource的字符会覆盖目标串strDestination后面的结束符NULL.如果count大于源串长度, 则会用源串的长度值替换count值.得到的新串后面会自动加上NULL结束符.与strcat函数一样, 本函数不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strcpy(char *strDestination, const char *strSource);复制源串strSource到目标串strDestination所指定的位置, 包含NULL结束符.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strncpy(char *strDestination, const char *strSource, size_t count);将源串strSource开始的count个字符复制到目标串strDestination所指定的位置.如果count值小于或等于strSource串的长度, 不会自动添加NULL结束符目标串中, 而count大于strSource串的长度时, 则将strSource用NULL结束符填充补齐count个字符, 复制到目标串中.不能处理源串与目标串重叠的情况.函数返回strDestination值.char *strset(char *string, int c);将string串的所有字符设置为字符c, 遇到NULL结束符停止.函数返回内容调整后的string指针.char *strnset(char *string, int c, size_t count);将string串开始count个字符设置为字符c, 如果count值大于string串的长度, 将用string的长度替换count值.函数返回内容调整后的string指针.size_t strspn(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外)在string串中首次出现的位置序号.返回一个整数值, 指定在string中全部由characters中的字符组成的子串的长度.如果string以一个不包含在strCharSet中的字符开头, 函数将返回0值.size_t strcspn(const char *string, const char *strCharSet);查找strCharSet串中任何一个字符在string串中首次出现的位置序号, 包含字符串结束符NULL.返回一个整数值, 指定在string中全部由非characters中的字符组成的子串的长度.如果string以一个包含在strCharSet中的字符开头, 函数将返回0值.char *strspnp(const char *string, const char *strCharSet);查找任何一个不包含在strCharSet串中的字符(字符串结束符NULL除外)在string串中首

次出现的位置指针.返回一个指针, 指向非strCharSet中的字符在string中首次出现的位置.char *strpbrk(const char *string, const char *strCharSet);

单片机c语言 篇7

在《PIC单片机C语言程序(1)~(6)》中,我们介绍了C语言的一些基本特点和主要内容,并用C语言编写了一些学习PIC单片机的基本程序和实用程序。上述源程序,需要生成目标码.hex文件,并将其烧写到PIC单片机的芯片中,进行实际运行,方能验证源程序的正确性。此过程必须用PIC单片机的开发工具来完成。本文介绍这些开发工具及其安装方法。

十、MPLAB IDE7.40版集成开发环境

MPLAB IDE是Microchip公司推出的PIC系列单片机集成开发环境(IDE:Integrated Development Environment),可在PC机的Windows操作系统下运行。MPLAB IDE有多种版本,下面介绍MPLAB IDE7.40版集成开发环境的主要功能。

1.编辑程序

在MPLAB IDE(指7.40版,以下相同)下,书写编辑适用于PIC单片机的源程序(汇编语言和C语言程序均可),也能书写编辑其他文本文件。

2.汇编程序

在MPLAB IDE下,将PIC的汇编语言源程序进行汇编,生成多种目标代码(如.hex),以支持Microchip公司的多种编程器。

3.编译程序

在MPLAB IDE下,通过PIC C与PIC C18的C编译器,对PIC的C语言源程序进行编译和连接,以生成目标代码(.hex)。

4.模拟调试

利用MPLAB IDE中的MPLAB SIM Simulatov命令,可以对PIC系列单片机的目标代码(实际是源程序)进行模拟调试。通过模拟调试,不仅可以找出程序设计中的问题,还可以观察到C语言程序运行全过程,定量察看程序运行的时间,如延时函数的延时值等。笔者在学习C语言编辑PIC单片机某功能源程序时,就常通过模拟调试,直观地观察源程序的运行过程,快速掌握了C语言程序的特点和运行方式。在后面的连载中,还将介绍源程序模拟调试的详细方法,请关注。MPLAB IDE7.40集成开发环境还有更多功能,限于篇幅,这里赘述,读者可查阅相关书籍。

十一、PIC C与PIC C18C编译器简介

PIC C与PIC C18C编译器,是澳大利亚HI—TECH公司研制的C语言源程序编译器,简称C编译器,它完全符合美国ANSIC标准。

该编译器是性能优异的PIC系列单片机C编译软件。PIC C可用于PIC16单片机系列产品,PIC C18可用于PIC18单片机系列产品,二者均可在MPLAB IDE集成开发环境(较高版本)下运行工作。用户编辑的C语言源程序,必须用C编译器进行编译和连接后,才能生成绝对目标文件而产生其他格式的文件,如.hex(目标码),进行程序应用和调试。所以,用C语言开发PIC单片机系列产品,除了要了解PIC单片机的硬件功能外,MPLAB IDE和PIC C与PIC C18C编译器也是不可缺少的。下面介绍PIC C与PIC C18C编译器的主要功能。

1.工作方式

运行在MPLAB IDE集成开发环境下(较高版本,如MPLAB IDE7.40版),以创建项目而生成目标码.hex文件,即将PIC单片机源程序代码烧写到对应PIC芯片的文件(.hex)。

2.支持仿真

支持硬件仿真MPLAB ICE (In-Circuit Emulator);支持软件仿真MPLAB SIM (simalator);支持低价位的在线调试器MPLAB ICD和MPLAB ICD2 (In-circuit debugger)。

3.混合编程

PIC C与PIC C18C编译器支持汇编语言和C语言的混合编程。

4.调试源程序

PIC C与PIC C18C编译器运行在MPLAB IDE下,允许调试源程序。在调试时,可在源程序上设置断点,当程序运行到断点处会自动停止下,以便调试者观察变量值、修改变量值;允许进行程序的单步、连续运行操作等。这些功能,对学习C语言有极大的帮助。

十二、PIC单片机烧写编程器

PIC单片机烧写编程器(简称编程器)的功能,是把汇编或编译后生成的PIC单片机程序的目标码.hex烧写到芯片中,以便程序的运行。

PIC单片机的编程器型号较多,归结起来有两大类:一类是简易编程器,一类是所谓全系列编程器。简易编程器烧写的芯片型号较少,烧写速度较慢,且大多是PIC单片机中级产品的芯片,如PIC16F84/627/628/87X……。所谓全系列编程器,是指那些可烧写PIC单片机多种型号的编程器,其烧写速度较快。简易编程器的价格便宜,售价200元~300元,适合于学习PIC单片机之用;后者多为电子公司开发电子产品之用,售价较高(约800元)。

下面介绍一种简易编程器,它由两部分组成。一是硬件部分,工作时通过RS232口与PC机相连,图10是其工作框图;二是该编程器编程时所需的PC机软件Icprog1.05,其编程界面如图11所示。该编程器可对PIC单片机芯片的8、18、28、40等引脚产品进行编程,使用方便,足以满足学习PIC单片机编程之用。

十三、MPLAB IDE 7.40版和PIC C编译器的安装

与本文内容配套的光盘中,有MPLAB-IDE-V7.40的Zip和PIC C8.50的rar两种压缩软件,如图12所示,可供学习PIC单片机C语言实验使用。

1.MPLAB IDE7.40版的安装

把含有上述两种压缩软件的光盘插入PC机光驱中,在显示器的桌面上,用鼠标点击“我的电脑”,在其下拉菜单中点击“打开”,在桌面上找到“我的光盘”并打开,便会出现图12所示的两种压缩软件图标。用鼠标分别将它们打开并点击“复制”,再分别打开E盘,粘贴到E盘上(也可粘贴到D盘或F盘)。先安装MPLAB IDE7.40版软件,安装过程如下:

(1)用鼠标双击“我的电脑”,在其桌面上打开磁盘E,找出压缩软件MPLAB-IDE的图标,并用鼠标点击之,在其下拉菜单上将鼠标移到“winRAR,又移鼠标到“解压到MPLAB-IDE-V7.4/(E)”命令,并点击之,即可生成被解压的图标,如图13所示。

(2)点击图13 MPLAB-IDE图标,在下拉菜单中,点击“打开”命令,即可生成多个文件。

(3)在多个文件中,选择(点击)图14的安装MPLAB-V7.40图标,在其下栏菜单中,点击“打开”,即可生成图15“安装向导”的“检查工作系统”文件,此时可观察到自动安装进度显示界面的运行。

(4)自动安装完成,即可生成图16所示的“欢迎使用修改、复原,或取消程序的功能文件。选择Repair(复原——即用鼠标在Repair左边小园中点一黑点,以复原所有程序的功能特点),然后点击图16下方的Next(下一步),即可生成图17 MPLAB T00Ls V7.40文件,该文件是对新软件MPLAB IDE7.40进行自动安装,所以你可看到文件上的彩色滑块向右不断增多,还可看到“validating install”(确认安装)的右侧,不断快速生成新的字符,只需略加等待,彩色滑块向右布满,即可自动生成图18的安装完成界面。

(5)点击图18下方的“Finish”(完成)命令后,PC机自动关闭,然后自动开启,并在桌面上自动生成“MPLAB IDE”V7.40快捷图标,如图19所示。到此,该软件安装便全部完成,可以使用了。

单片机c语言 篇8

关键词:C语言;编程技巧;应用

中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01

C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。

一、C语言与C语言的优势

当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。

二、C语言学习难度大的原因

因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。

三、C语言编程技巧的应用

1、用空间换时间

例如对字符串进行赋值,方法有以下几种:

(1)基础方法:

#define LEN 32

Char string I[LEN];

memset(string 1,0,LEN);

ctrcpy(string 1,“this is a example”) ;

(2)方法2:

const char string2[LEN]=“this is a example”;

char*cp;

cp=string2;

从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。

2、位运算掌握

在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。

3、C语言特有函数掌握

很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。

但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。

C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。

参考文献:

[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.

[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.

上一篇:难忘的争吵童话作文350字下一篇:大学英语口语测试