单片机C语言编程,心得都在这里了
这个8*8按键程序的过程中,不管是在自己写还是参考别人程序的过程中,发现自己对C语言有些基本知识点和编程规范有很多不懂的地方,有些是自己以前的编程习惯不好,有些就是基础知识不扎实的表现,所以总结出来。
一、.件与.C文件的关系:
迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.件,也不知道.件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。
经过查找资料得知,.件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以实现大型程序的模块化,又可以实现根各模块的连接调试。
1、.件介绍:
在单片机C程序设计中,项目一般按功能模块化进行结构化设计。将一个项目划分为多个功能,每个功能的相关程序放在一个C程序文档中,称之为一个模块,对应的文件名即为模块名。一个模块通常由两个文档组成,一个为头文件*.h,对模块中的数据结构和函数原型进行描述;另一个则为C文件*.c ,对数据实例或对象定义,以及函数算法具体实现。
2、.件的作用
作为项目设计,除了对项目总体功能进行详细描述外,就是对每个模块进行详细定义,也就是给出所有模块的头文件。通常H头文件要定义模块中各函数的功能,以及输入和输出参数的要求。模块的具体实现,由项目组成根据件进行设计、编程、调试完成。为了保密和安全,模块实现后以可连接文件OBJ、或库文件LIB的方式提供给项目其他成员使用。由于不用提供源程序文档,一方面可以公开发行,保证开发人员的所有权;另一方面可以防止别人有意或无意修改产生非一致性,造成版本混乱。所以H头文件是项目的详细设计和团队工作划分的依据,也是对模块进行测试的功能说明。要引用模块内的数据或算法,只要用包含include指定模块H头文件即可。
3、.件的基本组成
/*如下为键盘驱动的头文档*/
#ifndef _KEY_H_ //防重复引用,如果没有定义过_KEY_H_,则编译下句
#define _KEY_H_ //此符号唯一, 表示只要引用过一次,即#i nclude,则定义符号_KEY_H_
/////////////////////////////////////////////////////////////////
char keyhit( void ); //击键否
unsigned char Keyscan( void ); //取键值
/////////////////////////////////////////////////////////////////
#endif
单片机入门必备知识,c语言基础来了
C语言是一种中级语言,易于移植,既具有高级语言的通用性及易写易读的特点,又具有汇编语言的\”位处理\”、“地址操作\”等能力,允许直接访问无力物理地址,能进行位运算操作,能实现汇编语言的大部分功能!
C语言的特点:
1.C语言是一种结构化语言
2.C语言语言简洁、紧凑,使用方便、灵活
C语言程序结构:
第一个C语言程序
main表示主函数,void为函数类型,每个程序必须有且只能有一个main函数,函数体(功能语句)放在{}中。
#include:表示明程序中用到C语言系统提供的标准
功能。
printf是C语言的输出函数,/**/为注释,增加程序可读性。一般情况下,C语言程序由5部分组合而成
1.文件包含部分(预处理部分)
2.变量说明部分
3.函数原型声明部分
4.主函数部分
5.自定义函数部分
不是每一个C语言程序都包含上面的5个部分,最简单的C语言程序可以只有文件包含和主体部分
重点来了,程序结构说明!
1. C语言程序可以由多个函数构成,但是只能有一个main函数,程序从main函数开始执行,然后通过函数调用完成部分功能,最后在main函数结束。
2. main函数位置任意,函数时C程序的基本单位
3.被调用的函数可以是系统提供的库函数,也可以是用户自己编制设计的函数,因为这种特点使得很容易实现程序的模块化。
一个函数由两部分组成:
函数说明部分:包括函数类型、函数名,形式参数类型、函数参数(形参)名
函数体:即函数说明部分下面{}中的部分,如果一个函数内有多个大括弧,则最外面的一对{}为函数体的范围
函数体通常包括:
1. 变量定义(声明),如:inta,a,b,c;
2.执行部分在某些情况下也可以没有变量定义部分,如:第一个C语言程序。甚至既无变量定义也无执行部分,如:
1 temp()
2 { }
他是一个空函数,什么也不干,但这是合法的。
每一条语句由分号结束
书写格式自由,一行可以写多句,一句可以写多行,但是要注意不要将字符串整体分开!!
大小写敏感,大小写不能混用,一般程序语句用小写字母,符号常量要用大写
C语言本身没有输入输出语句,输入输出的操作是由库函数scanf和printf等函数来完成的,C语言对输入输出实行函数化。
C语言程序的是怎么执行的?
1. C语言程序主要通过编译、链接后生成可加载模块(执行文件),才能在计算机上运行。
2. 完整的程序生成过程:
源代码→编译器→目标程序→连接器→载入模块→加载→执行程序
程序开发的具体步骤:
编译源程序:将C语言源程序用一个后缀为.c的文件保存。如:myfile.c
编译:检查源程序中的语法错误,生成目标代码文件(.obj)。如:myfile.obj
链接:将多个目标程序(包含C语言函数库)链接到一个程序中,生成可执行文件。如:myfile.exe
运行可执行文件,验证程序正确性。
C语言基本数据类型、运算符和表达式
C语言的数据类型
不同类型的数据在内存中占用的字节数是不同的,数据类型的长度和取值范围会随着机器的CPU类型和编译器的不同而不同。
无符号的整数指不带符号的整数,即零或正整数
储存有符号的整数时,储存单元的最高位是符号位,其余各位表示数值,储存无符号的整数时,储存单元的全部用于表示数值
标识符
1. 所使用的字符:字母、数字、下划线
2. 标识符只能由字母数字下划线组成,且第一个字符必须为字母或下划线关键
注:C语言中选用变量名、函数名等标识符时,不能与关键字发生冲突。
常量和符号常量
程序运行中其值可以改变的量为常量,存储输入数据,中间结果,最终结果
变量三要素:变量名称,变量的数据类型,变量的值。
变量的数据类型决定了他在内存中占据的储存单元个数,在储存单元中存放的数据即为变量的值!
变量的名字是标识符,C语言里面所有的名字都用标识符表示!
变量的基本操作:
将数值存入变量中,称为赋值
将变量中的值取出,称为取值
变量特性:喜新厌旧,取之不尽,变量必须先定义后使用!!
注意:在同一个作用域中,不要定义同名变量!!尽量避免定义与库函数名同名的变量!!
回复“入门资料”获取单片机入门到高级进阶教程
以上就是对c语言的一个基础入门知识的简单讲解,有想掌握各种c语言基础语法结构的朋友们关注我,每天更新一些小知识分享给大家
状态机——单片机的万能语言(附代码)
毫无疑问,单片机的万能语言就是状态机,在嵌入式单片机编程中,也是我们常用的方法。
在此之前,我曾分享过两种状态机的实现方法,有些朋友说有点难度,我想再补充一些基础实现方法以及思路,一步一步走,链接放在这里了!
【编程之美】用C语言实现状态机(实用)
【编程之美】函数指针方法实现简单状态机(附代码)
本文将从最基础入门的方法帮助大家了解状态机,从我常用的2种状态机编写方式为大家慢慢展开。
用switch/case的结构配合一个状态变量,通过修改状态变量的值来切换状态。
从代码可知,这种状态机就是一路走到黑,没有让多个状态同时处于激活状态,也就是说在同一时刻,只能处于一种状态之下。
无疑,实际中有很多这样的应用,比如简单的灯的开关,当然也有很多情况是多种状态并存的,比如天气的状态就可以分为晴天、阴天、风雨雷电等等,可以同时处于多个状态。
用if else…else if结构的组合来描述状态流程图。
从范例可知,这种状态机虽然看起来比较费脑子,但是在应用当中非常灵活,通过布尔变量的开启和关闭,你可以自由的控制某些状态的开启。
并且同一时刻可能有多个状态是激活的,这种结构几乎可以翻译任何流程图。
所有的函数都可以看作是状态机,如果函数有返回值,且这个返回值能表征至少两种以上不同的状态,那么这些返回值就可以被用作指示当前状态机的运行情况。
在我们实际编程中,我们也需要有这样的思维,比如函数之间的引用,参数传递,这些都可以当作一个状态,那么我们编码的过程中,就能够根据状态运行进行相应的模块化。
我们经常会用到的枚举类型,来写测试用例,以判断程序具体执行到函数体的哪一块了
状态机可以说是一个万能的计算机语言表述方式,应用很广泛,是裸机条件下多任务的廉价实现方案。
在带有操作系统的情况下也是如此,我们了解了状态机的本质,能够运用得当的话,对我们的模块化编程,代码的整理是很有帮助的。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。