0
点赞
收藏
分享

微信扫一扫

C51笔记-郭天祥-第二章 从点灯大师开始

第2章  Keil软件的使用及流水灯设计

 

Keil的用法:用Keil建立工程;

工程配置;

C51单片机程序软件仿真、单步、全速、断点设置和变量查看等;

 

用一个完整的C51程序操控LED亮灭;

调用库函数实现流水灯;

蜂鸣器与继电器的操作方法,集电极开路与漏极开路的的概念。

学好这一章,是一个很好的开头。

 

  1. Keil工程建立

(1)点击【Project】-【New uveision Project】建立工程,如图1所示。

   

图1  新建工程

(2)指定文件路径,输入工程名,如图2所示。

  

图2  文件路径

 

(3)指定单片机型号,这里直接在search栏(如图3所示)输入at89c52,选择即可。

  

图3  单片机型号

 

(4)完成上一步后,弹出图4所示的对话框,这里选否,不需要复制启动文件。

  

图4  是否复制启动文件

 

(5)单击【File】-【New】,新建文件,如图6所示。然后,点击保存按钮,保存文件,注意文件扩展名改成.c,如图7所示。

   

图5  新建文件

 

 

图6  新文件

 

 

图7  保存文件

 

(6)在Project窗口,展开Target标签,然后右击Source Group 1,选择把文件添加到工程,如图8所示,在图9所示的窗口选择文件,添加,然后关闭窗口,添加后,Project窗口如图10所示,至此,我们完成Keil里的工程创建。

  

图8 添加文件

 

 

图9 选择添加的文件

 

 

图10  添加后的工程结构

 

(7)编辑第一个代码,点亮一个灯。代码如图11所示。

 

图11  第一个代码

 

(8)编译,可以单击工具按钮或者用快捷键F7。在设置工具里,选择Output标签,勾选生成HEX文件,用于下载(如图12所示)。

 

图12  生成下载文件

 

(9)重新编译,即可生成下载文件。

 

 

图13  编译生成下载文件

 

(10)类似的方法,可以点亮其它灯,但是写多条语句有点麻烦,有更好的方法。为了方便,就在原工程里新建一个代码文件,命名为Part2_2.c,并添加到工程里,然后移除之前的代码文件Part2_1.c,因为一个工程里只能有一个主函数。新代码如图14所示。

 

图14  新代码

 

(11)编写一个完整点亮第一个灯的代码,如图15所示。

 

 

图15  完整点亮一个灯的代码

 

(12)写一个流水灯的代码,计算延时的时间。代码如图16所示。

 

图16 流水灯代码

 

(13)计算延时的第一步就是设置时钟的频率,在设置页面,Target页,把时钟设置为11.0592MHz。如图17所示。

 

图17 设置时钟频率

 

(14)单击调试按钮,进入调试模式,如图18所示。

 

图18 调试模式

 

(15)通过单步执行,可以查看I/O端口电平变化和变量值。先打开Port 1端口,如图19所示。

 

图19 打开端口Port1

(16)图20是端口电平,单片机上电后I/O口全是1。

 

图20 端口电平

 

(17)添加要观察的变量名,在Watch1窗口,添加i,j。如图21所示,默认初始值都是0.

 

图21 添加观测变量

 

(18)在Register窗口,注意sec的值就是代码的执行时间。

 

图22  寄存器窗口

 

(19)单击单步执行按钮,发现sec的值变成422us ,再单击一次单步执行,完成赋值操作,sec的值变成423us ,Port1里的最低位对号也去掉了,表示led1=0执行完成。两次sec的值相减,约1us就是执行这条语句的时间。

 

图23 单步执行到当前行

 

 

图24 单步执行一条语句

 

(20)再次单步执行,进入for语句,发现i的值发生变化,5如图25所示。

 

图25 单步执行

 

(21)再次单步执行,发现i的值递减,j的值保持0,这是因为i的值变化一次,j的值循环110次,sec的值也发生了变化。要看这个循环执行多长时间,就需要设置断点。如图26所示,在第一个for语句前和led1=1那行之前单击,设置断点。分两次单击全速运行(Run)按钮,两次的时间相减,约为1s。可以发现,内层变量值为110,外层为多少,就是多少ms。

 

图26  设置断点

 

总结,调试模式,可以查看端口状态,变量值,运行时间。灵活运用断点,可以快速计算出需要的数据。

 备注,一张张贴图太麻烦,都是wps编辑好,直接复制到这里,算是备份。

(22)用子函数实现延时,代码如图27所示。

 

图27  子函数延时

 

(23)调用库函数实现流水灯,代码如图28所示。

 

图28 调用库函数实现流水灯

 

总结,这一章,从一个led点亮开始,讨论为何要加上while(1),然后又引出for延时,顺带学会用调试工具,观察变量,端口,计算延时。最后又用库函数实现流水灯。

 

举报

相关推荐

0 条评论