写下这篇有关于keil 4安装,po 解,使用,C语言基础及电子基础的博文,目的只有一个:让像本人当初完完全全不懂单片机一样的自学者,能省时,快速使用keil 4,认识一些C语言和电子基础的知识,至于非菜鸟完全不用浪费时间往下看此博文!
说实话,记得当初本人刚开始自学单片机时,keil 4安装,**和工程建立整整用了两天,还是没有搞定,真真是够打击初学者内心的啊! 最后不得已,请教了一位半懂非懂的学姐,麻烦了人家半天才搞定!可问题是某天不小心卸载了,还是不会安装,现在想想,本人当初真是笨得一塌糊涂呀!话说,若是当初早认识xymb,跟他混熟,多省事呀,可惜当初他为情所伤,一心扎堆于MCU的世界,完全不染外面的花花世界呀!嘿嘿,,,,,,,,,,
——————————————————————————————————————
总所周知,keil方便易用的集成环境、强大的软件仿真调试工具等优点,几乎成为步入MCU,不二之选的最佳开发平台,所以学习单片机就必须去了解keil 的安装,**以及使用!
第1步:双击Keil μVision4图标,运行安装程序,
第2步:按照软件安装提示,一直单击Next键,会出现下图安装过程图,直到图1页面出现,单击“Finish”按键即可完成安装
图 1—1
第3步:双击运行安装好的keil uVision4,进入keil uVision4的集成编程环境
第4步:开始**,单击选择菜单“File”-->“License Management”(图1—2) 将弹出下图1—3的界面;复制CID号,粘贴到第5步中的**软件中
图 1—2
图 1—3
第5步:运行如下图1—4,**软件,将出现图1—5界面;把上一步复制的CID号粘贴图1—5 CID中相应位置,然后点击“Generate”按键,然后复制产生的序列号,粘贴到第4步中图1—3 的LIC输入框中,然后点击右侧的AddLIC,即可。
图 1—4
图1—5
第6步:出现如下图1--6红框所示的License项后,表示keil 4软件已成功**,即可使用
图1—6
二)keil 4的使用(工程建立过程)及常用基本按钮的介绍
第1步:双击,打开keil 4,选择Project→New uVision Project菜单项,如图2-1所示。
图2—1 新建工程
第2步:选择工程保存路径,本人保存于F盘下的“MCU”工程文件夹,然后再文件名输入框,输入工程名(lesson1),如图2-2所示,然后单击【保存】按钮。
图2-2 保存工程
接着会弹出如图2-3所示对话框,要求用户选择单片机型号,麦光电子实验板为STC89C52芯片,而在对话框中找不到该型号,但51系列内核具有通用性,所以可选Atmel的AT89C52,或者AT89S52,然后点击【OK】按钮。
接着会弹出如同2-4所示启动代码选择对话框,选择【否】按钮即可,至于原因,本人认为初学者不必深究,若读者实在对启动代码感兴趣,可以自己去查阅有关资料!
图2-4启动代码选择对话框
然后会出现图2-5界面。
图2-5 选择单片机型号后界面
第3步: 在图2-5基础上,选择File→New菜单项新建工程,如图2-6所示
接着出现 图2-7所示,此时新建文件与刚才新建的工程没有直接联系,单击图标
图2-7 添加文件后的页面
接着在【文件名(N)】输入框里,输入要保存的文件名(lesson.c),同时必须输入扩展名。千万注意: 若用C语言编程,则扩展名为.C,若用汇编编程,则为.asm,然后单击【保存(s)】按钮。
图2-8 保存页面
第4步: 回到编程页面单击“Target”前的“+”号,选中“Source Group1”并右键单击,弹出所图2-9所示对话框,选中“Add Files to Group ‘Source Group 1”菜单项,接着弹出一对话框,选中上面所保存的文件(即“lesson1.c”),之后单击“Add”按钮添加文件,最后单击“Close”按钮关闭此对话框。
图2-9 把文件加入工程的菜单
加入文件后,工程编辑页面如图2-10所示, 此时“Target 1”文件夹下的“Source Group 1”文件夹下多了一个 “lesson1.c”的C文件,此时keil工程已经成功建立。
图2-10 文件已加入工程页面
通过以上4个步骤,本人相信对于初学者来说,keil工程的建立已经不是问题,下面再大概了解keil中一些常用基本按钮,如图2-11所示。
图2-11 keil基本按钮介绍图
1) 编译当前操作的文件。
2) 只编译修改过的文件,并生成用于下载到单片机中的hex文件。
3) 编译工程中所有的文件,并生成用于下载到单片机中的hex文件。现阶段,主要用该按钮。
4) 用于打开“Target Options”对话框,打开的对话框如图2-12所示,并在晶振选项框中填11.0592,接着选择“Output”选项卡,并在“Create HEX File”前复选框中打勾,别的暂时不需要了解。
图2-12 设置Options for Targer对话框参数
5) 注释选中行,
6) 删除选中行前的注释。
7) keil软件进入仿真,
8) 进入“Configuration”对话框,该对话框主要用来设置字体的大小、颜色,TAB键的缩进等,读者可根据图1-13注释自己设置。
图1-13 Configuration对话框
9) 表示已经生成了可以下载到单片机中的HEX文件了。
10) 表示所编写的程序是“0 Error”(0错误)。
11) 编写的代码为“0 Warning”(0警告),编写程序时,警告是可以有的,但一定明白该警告的来龙去脉。
以上为keil中常用的按钮,也不必去记住或者背熟它,以后用到的时候,自然而然的就熟了。
三)C语言简介
学习单片机就必须学通C语言,这是一种使命,没有任何理由去拒绝!
C语言中的三大循环形式分别是while循环、do…while循环和for循环
1.while循环:执行循环之前,先判断条件的真假,若为真,则执行循环体,为假则循环结束。
while(条件表达式)
{
语句;
}
2.do…while循环:先执行一次循环体,再判断条件真假,若真则继续执行循环体开始循环,为假则结束循环。
do
{
语句;
}
while(条件表达式);
3.for循环:先求解表达式1,再判断表达式2的真假,若为真,则执行for循环的内嵌语句,再执行表达式3,第一次循环结束。(若为假,则整个循环结束,执行for循环之后的语句)第二次循环开始时不再求解表达式1,直接判断条件表达式。
for(表达式1;表达式2;表达式3)
{
语句;
}
单片机中,只需注意两点
while(1)等价于for(;;)。
a) for循环的三大建议。
1.建议for语句的循环控制变量的取值采用“半开半闭区间”写法。原因在与这种写法比“闭区间”直观,如表3-3所示。
表3-3 for循环区间写法区别
半开半闭的写法 |
闭区间写法 |
for(i = 0; i < 10; i++) { 语句; } |
for(i = 0; i <= 9; i++) { 语句; } |
2.在多重循环中,将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
表3-4 for循环层写法区别
长循环在最内层(效率高) |
长循环在最外层(效率低) |
for(i = 0; i < 10; i++) { for(j = 0; j< 100; j++) { 语句; } } |
for(j = 0; j< 100; j++) { for(i = 0; i< 10; i++) { 语句; } } |
3.不能在for循环体内修改循环变量,防止循环失控。
for(iVal = 0; iVal < 10; iVal++)
{
…
iVal = 6; //千万不可修改,可能违背了自己意愿喔!
}
Switch-case语句是一种非常重要的多分支结构语句,使用方式及执行效果上比if…else语句更加高效,又因为switch条件表达式为常量,为确定值,所以会根据确定值来执行特定条件,而无需再去判断其他情况。这种特殊的结构,本人提倡读者在自己的程序中尽量采用switch而避免过多使用if…else结构。
使用switch需注意:
1,不能少break,否则麻烦重重(除非有意使多个分支重叠);
2,不能少default分支,不要认为画蛇添足,即使不需要,也应保留,别让人家误解为你是SB。
C语言中的每一个变量都有自己的生命周期和作用域,作用域是指可以引用该变量的代码区域,生命周期表示该变量在存储空间存在的时间。根据生命周期来划分,C语言变量可分为两类:全局变量和局部变量。
1.全局变量
全局变量在函数外部定义,其作用域为当前源程序文件,即从定义该变量的当前行开始,直到该变量的源程序文件的结束,在这个区间内所有的函数都可以引用该变量。
2.局部变量
局部变量为定义在函数内部的变量,其作用域仅限于函数或者复合语句内,离开该函数或复合语句后将无法再引用该变量。注意,这里所说的复合语句指包含在“{、}”内的语句,例如if(条件a){ int a = 0;}在该复合语句中变量a的作用域为定义a的那一行开始到大括号结束。
1. auto自动变量,默认的存储类别,根据变量的定义位置决定变量的生命周期和作用域,如果定义在函数外,则为全局变量,定义在函数或复合语句内,则为局部变量。C语言中如果忽略变量的存储类别,则编译器自动将其存储类型定义为自动变量。
2. extern外部变量(全局变量):该关键字扩展全局变量的作用域,让其他文件中的程序可以引用该变量,并不会改变改变量的生命周期。
3. register寄存器变量:此类别的变量会被优先分配到寄存器中,通常一些循环因子会被分配成寄存器变量。
4. static静态变量:用于限制作用域,无论该变量是全局还是局部变量,该变量都存储在数据段上。静态全局变量的作用域仅限于该文件,而静态局部变量的作用域限于定义该变量的复合语句内。静态局部变量可以延长变量的生命周期,其作用域没有改变,而静态全局变量则的生命周期没有改变,但其作用域却减小至当前文件内。
注释是程序可读性和可维护性的基石,漂亮的程序都离不开标准规范的注释!
注释的基本要求总结:
规则1:注释应当准确、易懂,防止有二义性。错误的注释不但无益反而有害。
规则2:边写代码边注释,修改代码同时修改注释,以保证注释与代码一致性。
规则3:注释是对代码的“提示”,而不是文档。程序中的注释应当简单明了,注释太多了反而会让人眼花缭乱。
规则4:一目了然的语句不加注释。例如:i++; /* i加1,有意思吗?? */
规则5:对于全局数据(全局变量、常量定义等)必须要加注释。
规则6:注释强烈推荐用英文,尽量避免在注释中使用缩写,特别是不常用的缩写。
规则7:注释的位置应与被描述的代码相邻,可以与语句在同一行,也可以在上行,但是不可放在下方。同一结构的注释要对齐。
规则8:当代码比较长,特别是有多重嵌套时,应当在一些段落的结束加注释,便于阅读。
规则9:注释的缩进要与代码的缩进一致。
规则10:注释代码段时应注重“为何做(why)”,而不是“怎么做(how)”。
说明怎么做的注释一般停留在编程语言的层次,而不是为了说明问题。尽力阐述“怎么做”的注释一般没有告诉我们操作的意图,而指明“怎么做”的注释通常是冗余的。
规则11:数值的单位一定要注释。例如长度是毫米还是米。
规则12:对变量的范围给出注释。
规则13:对一系列的数字编号给出注释,尤其在编写底层驱动程序的时候(比如管脚编号)。
规则14:对于函数的入口出口数据给出注释。这个在讲解函数的时候,笔者计划详细讲解。
四)电子基础
关于电子基础这东西实在是太多太多了,但说数字和模拟电路基础就已是博大精深了啊!之所以要写电子基础,就是想简单提下一些最基本的东西,为学习单片机储蓄点基础吧!
1.掌握两种电平:高电平、低电平。
TTL电平:高电平为5V,低电平:0V。
串口RS232:高电平:-12V,低电平:+12V。
所以单片机与PC机通信需要电平转换芯片,例如麦光电子MGMC-V1.0实验板单片机上方有一颗黑色的IC,那就是电平转换芯片。
2.二进制、十进制、十六进制。
二进制:0, 1; 逢二进一;
十进制:0,1,2,3,4,5,6,7,8,9; 逢十进一;
十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,F; 逢十六进一;
二进制书写前需加0b,十六进制需加0x;
十六进制数是和四为一,就是4个二进制组成一个十六进制数,于是它的每一位有0b0000~0b1111共计16个值。这三个数之间对于关系见表3-1所示。
3.二进制的逻辑运算,又称之为布尔运算。无论C语言中,还是数字电路中,逻辑运算不可缺。在逻辑范畴中,只有“真”和“假”,对于到数字电路、C语言中,“0”为“假”,“非0”为真,注意:不要理解为只有1是“真”,2、3、100也是真。
(1)逻辑运算(是按整体运算),通常叫做逻辑运算符。
&&(and):逻辑与,只有同为真时才为真,近似于乘法。
||(or): 逻辑或,只有同为假时才为假,近似于加法。
!(not): 逻辑非,条件为真,结果为假,近似于相反数。
(2)逻辑运算(按每个位来运算),通常叫做位运算符。
&:按位与,变量的每一位都参与(下同),例如:A = 0b0101 1010,B = 0b1010 1010,则A & B = 0b0000 1010。
|:按位或,同上,则A | B = 0b1111 1010。
~:按位取反,同上,则~A = 0b1010 0101。
4. 三极管应用
极管有三个级,分别是:基极(base)、集电极(collector)、发射极(emitter),三极管又分为NPN、PNP两种型号。如图3-1
图3-1 三极管示意图
三极管的应用有三种状态:放大、截止、饱和,关于放大的计算是很复杂的,这里就不做明白了,便于理解,可以分别将饱和、截止状态看作是“开”、“关”,那怎么是“开”,怎么是“关”,由b极和e极电压决定。
对于NPN型的,只要b极电压比e极电压大0.7V,则三极管就“开”,否则就“关”;
对于PNP型的,只要e极电压比b极电压大0.7V,则三极管就“开”,否则就“关”;
总结一句话:看箭头,箭尾比箭头大0.7V则“开”。
例如,三极管控制蜂鸣器电路 所下图3-2所示。
5V有源蜂鸣器一般工作电压是40mA,若采用图3-2有图所示的电路,40mA的电流灌入单片机(单片机I/O理论灌电流是25mA,但笔者强烈推荐不要超过10mA)势必会烧掉单片机,所以采用左图来驱动蜂鸣器,那驱动过程如何?前面说过,三极管的“开”、“关”看箭头,那如果给D5所连的单片机口给低电平(0V),则b极就为0V,同时e极通过蜂鸣器接到了VCC(5V)上,那么完全满足大于0.7V,所以三极管“开”,此时蜂鸣器“响”,那如果给D5高电平(5V),这样b极为5V,e极为5V,不满足导通条件,所以三极管“关”,那蜂鸣器也就“不响”。
luoyp8805_694243840 2014-3-23 23:19
用户403664 2013-10-31 09:05
用户448719 2013-10-29 15:24
644398774_263592779 2013-10-25 23:11
用户403664 2013-10-25 09:32
644398774_263592779 2013-10-18 15:07
用户403664 2013-10-18 14:55