原创 【博客大赛】MCU之心路分享--keil 4,C语言 及电子基础(一)

2013-10-18 23:49 6162 12 19 分类: MCU/ 嵌入式 文集: MCU之心路分享

       写下这篇有关于keil 4安装,po 解,使用,C语言基础及电子基础的博文,目的只有一个:让像本人当初完完全全不懂单片机一样的自学者,能省时,快速使用keil 4,认识一些C语言和电子基础的知识,至于非菜鸟完全不用浪费时间往下看此博文!

      说实话,记得当初本人刚开始自学单片机时,keil 4安装,**和工程建立整整用了两天,还是没有搞定,真真是够打击初学者内心的啊! 最后不得已,请教了一位半懂非懂的学姐,麻烦了人家半天才搞定!可问题是某天不小心卸载了,还是不会安装,现在想想,本人当初真是笨得一塌糊涂呀!话说,若是当初早认识xymb,跟他混熟,多省事呀,可惜当初他为情所伤,一心扎堆于MCU的世界,完全不染外面的花花世界呀!嘿嘿,,,,,,,,,,

——————————————————————————————————————

       总所周知,keil方便易用的集成环境、强大的软件仿真调试工具等优点,几乎成为步入MCU,不二之选的最佳开发平台,所以学习单片机就必须去了解keil 的安装,**以及使用!                            

一)Keil μVision4安装详细图解和**方法       

         第1步:双击Keil μVision4图标,运行安装程序,

                                            图片1.jpg

  

        第2步:按照软件安装提示,一直单击Next键,会出现下图安装过程图,直到图1页面出现,单击“Finish”按键即可完成安装

图片2.jpg
 
 
 
图片3.jpg

                               图 1—1

 

  第3步:双击图片4.jpg运行安装好的keil uVision4,进入keil uVision4的集成编程环境

 

   第4步:开始**,单击选择菜单“File”-->“License Management”(图1—2) 将弹出下图1—3的界面;复制CID号,粘贴到第5步中的**软件中             

                                                              图 1—2

图片6.jpg

                                                                图 1—3

    第5步:运行如下图1—4,**软件,将出现图1—5界面;把上一步复制的CID号粘贴图1—5 CID中相应位置,然后点击“Generate”按键,然后复制产生的序列号,粘贴到第4步中图1—3 的LIC输入框中,然后点击右侧的AddLIC,即可。                              

                                                             图片7.jpg

                                                                   图 1—4               

图片8.jpg              

                                   图1—5

第6步:出现如下图1--6红框所示的License项后,表示keil 4软件已成功**,即可使用

              

图片9.jpg

                               图1—6 

二)keil 4的使用(工程建立过程)及常用基本按钮的介绍

   

     第1步:双击图片4.jpg,打开keil 4,选择Project→New uVision Project菜单项,如图2-1所示。       

图片11.jpg

                                                             图2—1  新建工程

第2步:选择工程保存路径,本人保存于F盘下的“MCU”工程文件夹,然后再文件名输入框,输入工程名(lesson1),如图2-2所示,然后单击【保存】按钮。    

图片12.jpg

                         图2-2  保存工程     

     接着会弹出如图2-3所示对话框,要求用户选择单片机型号,麦光电子实验板为STC89C52芯片,而在对话框中找不到该型号,但51系列内核具有通用性,所以可选Atmel的AT89C52,或者AT89S52,然后点击【OK】按钮。    

图片13.jpg                                   图2-3  选择单片机型号(选择AT89C52) 

     接着会弹出如同2-4所示启动代码选择对话框,选择【否】按钮即可,至于原因,本人认为初学者不必深究,若读者实在对启动代码感兴趣,可以自己去查阅有关资料!       

图片14.jpg

                        图2-4启动代码选择对话框

     然后会出现图2-5界面。

图片15.jpg

                              图2-5 选择单片机型号后界面

第3步: 在图2-5基础上,选择File→New菜单项新建工程,如图2-6所示 

图片16.jpg                                                  图2-6 新建工程

   接着出现 图2-7所示,此时新建文件与刚才新建的工程没有直接联系,单击图标

 

 

图片24.jpg会出现如图2-8所示页面。          
          
图片17.jpg

                                                   图2-7  添加文件后的页面 

      接着在【文件名(N)】输入框里,输入要保存的文件名(lesson.c),同时必须输入扩展名。千万注意: 若用C语言编程,则扩展名为.C,若用汇编编程,则为.asm,然后单击【保存(s)】按钮。

      

图片18.jpg

                                                           图2-8 保存页面

 第4步: 回到编程页面单击“Target”前的“+”号,选中“Source Group1”并右键单击,弹出所图2-9所示对话框,选中“Add Files to Group ‘Source Group 1”菜单项,接着弹出一对话框,选中上面所保存的文件(即“lesson1.c”),之后单击“Add”按钮添加文件,最后单击“Close”按钮关闭此对话框。     

图片19.jpg

                                                图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语言,这是一种使命,没有任何理由去拒绝!

 

3.1  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; //千万不可修改,可能违背了自己意愿喔!

}

 

 3.2 switch-case语句

       Switch-case语句是一种非常重要的多分支结构语句,使用方式及执行效果上比if…else语句更加高效,又因为switch条件表达式为常量,为确定值,所以会根据确定值来执行特定条件,而无需再去判断其他情况。这种特殊的结构,本人提倡读者在自己的程序中尽量采用switch而避免过多使用if…else结构。

       使用switch需注意:

       1,不能少break,否则麻烦重重(除非有意使多个分支重叠);

       2,不能少default分支,不要认为画蛇添足,即使不需要,也应保留,别让人家误解为你是SB。

 

3.3变量作用域

 C语言中的每一个变量都有自己的生命周期和作用域,作用域是指可以引用该变量的代码区域,生命周期表示该变量在存储空间存在的时间。根据生命周期来划分,C语言变量可分为两类:全局变量和局部变量。

1.全局变量

全局变量在函数外部定义,其作用域为当前源程序文件,即从定义该变量的当前行开始,直到该变量的源程序文件的结束,在这个区间内所有的函数都可以引用该变量。

2.局部变量

局部变量为定义在函数内部的变量,其作用域仅限于函数或者复合语句内,离开该函数或复合语句后将无法再引用该变量。注意,这里所说的复合语句指包含在“{、}”内的语句,例如if(条件a){ int a = 0;}在该复合语句中变量a的作用域为定义a的那一行开始到大括号结束。

3.4 变量的存储类别

1. auto自动变量,默认的存储类别,根据变量的定义位置决定变量的生命周期和作用域,如果定义在函数外,则为全局变量,定义在函数或复合语句内,则为局部变量。C语言中如果忽略变量的存储类别,则编译器自动将其存储类型定义为自动变量。

2. extern外部变量(全局变量):该关键字扩展全局变量的作用域,让其他文件中的程序可以引用该变量,并不会改变改变量的生命周期。

3. register寄存器变量:此类别的变量会被优先分配到寄存器中,通常一些循环因子会被分配成寄存器变量。

4.   static静态变量:用于限制作用域,无论该变量是全局还是局部变量,该变量都存储在数据段上。静态全局变量的作用域仅限于该文件,而静态局部变量的作用域限于定义该变量的复合语句内。静态局部变量可以延长变量的生命周期,其作用域没有改变,而静态全局变量则的生命周期没有改变,但其作用域却减小至当前文件内。

 

3.5 关于注释

     注释是程序可读性和可维护性的基石,漂亮的程序都离不开标准规范的注释!

注释的基本要求总结:

规则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,不满足导通条件,所以三极管“关”,那蜂鸣器也就“不响”。

PARTNER CONTENT

文章评论7条评论)

登录后参与讨论

luoyp8805_694243840 2014-3-23 23:19

边学习边分享的方法不错,赞一个。。。。。

用户403664 2013-10-31 09:05

为了保持页面访问速度,程序员决定不要超过20张图片。不过你可以再新开一个发博文的窗口,在编辑器内插入图片,然后把图片复制到真正发博文的窗口,就成功啦!

用户448719 2013-10-29 15:24

这教程连**都带

644398774_263592779 2013-10-25 23:11

应该是我感谢胖螃蟹编导您喔,但是博客超过20张照片,还有几张改不了,可惜了

用户403664 2013-10-25 09:32

都能看到了 谢谢

644398774_263592779 2013-10-18 15:07

啊?什么情况?

用户403664 2013-10-18 14:55

图片都挂啦
相关推荐阅读
流年一束光 2014-05-20 13:32
有时候,我也不知道我是否还能坚持下去
       退学?真的要退学么? 这个问题伴随着我整个大学,从第一天开始就一直到现在!       一面是对未来,或许说是梦想的追求,渐渐清晰地看见,并学会接受现实,走在自己选择未来的电子路...
流年一束光 2014-04-07 00:55
【博客大赛】MCU之心路分享-----前言
        如果你想要得到从未有过的东西,那就去做你从未做过的事情!!!                                                          ...
流年一束光 2014-04-07 00:46
【博客大赛】MCU之心路分享--倾听你的改变--AD/DA转换(十一)
         用勇气来改变可以改变的事情,用胸怀来接受不可改变的事情,用智慧来分辨两者的不同                                                  ...
流年一束光 2014-04-05 17:28
【博客大赛】MCU之心路分享—有种爱叫:IIC(十)
         在工科男的世界里,连IIC都能想象成浪漫的牵手,而一个对单片机充满热爱的工科男,有什么理由不去认识它,学会它,并去驾驭它啊!当然,在我知道的世界里,貌似大学老师从来都没有真正教过...
流年一束光 2014-03-20 00:34
【博客大赛】MCU之心路分享—你小小的心令我感动(九)
          如果说,学过单片机,却连单片机最小系统都没有焊接过或者搭建过!甚至连电烙铁都没有摸过,那是个多么巨大的笑话呀?          但现实不幸的是,这样的笑话,一直重演在许多...
流年一束光 2014-03-10 20:29
【博客大赛】MCU之心路分享—偷偷爱你--12864液晶(八)
       时隔3个月没有更新《MCU之心路分享》了,不知道我是否有幸,让胖螃蟹小编对我拍拍砖呢?嘿嘿…….这3个月,一直都没有离开过EDN,一直都潜伏着,这3个月中,见证,陪伴,小小地参与...
EE直播间
更多
我要评论
7
12
关闭 站长推荐上一条 /3 下一条