第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延时,顺带学会用调试工具,观察变量,端口,计算延时。最后又用库函数实现流水灯。

C51笔记-郭天祥-第二章 从点灯大师开始的更多相关文章

  1. C++ Primer 笔记(2)第二章 变量与基本类型

    第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...

  2. [读书笔记]算法(Sedgewick著)·第二章.初级排序算法

    本章开始学习排序算法 1.初级排序算法 先从选择排序和插入排序这两个简单的算法开始学习排序算法.选择排序就是依次找到当前数组中最小的元素,将其和第一个元素交换位置,直到整个数组有序. public s ...

  3. 嵌入式学习笔记(综合提高篇 第二章) -- FreeRTOS的移植和应用

    1.1    资料准备和分析 上章节通过实现双机通讯,了解如何设计和实现自定义协议,不过对于嵌入式系统来说,当然不仅仅包含协议,还有其它很多需要深入学习了解的知识,下面将列出我在工作和学习上遇到的嵌入 ...

  4. Python基础教程 读书笔记(2)第二章 列表和元组

    2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...

  5. 读书笔记 - javascript 高级程序设计 - 第二章 在Html中使用JavaScript

    1 <script>的6个属性 async  立即下载当前script标签的外部脚本 但不能影响别的 charset 没用了 defer  文档显示之后再执行脚本,只对外部脚本有效 lan ...

  6. Stealth视频教程学习笔记(第二章)

    Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  7. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  8. C#本质论读书笔记:第一章 C#概述|第二章 数据类型

    第一章 1.字符串是不可变的:所有string类型的数据,都不可变,也可以说是不可修改的,不能修改变量最初引用的数据,只能对其重新赋值,让其指向内存中的一个新位置. 第二章 2.1 预定义类型或基本类 ...

  9. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  10. Android群英传笔记——第二章:Android开发工具新接触

    Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...

随机推荐

  1. C/S 架构 和 B/S 架构

    C/S架构的理解: 官方称:clinet-server 客户端需要下载的软件: 今日头条,爱奇艺等  能在手机和浏览器打开的软件 B/S架构的理解: 官方称:web-server 客户端为浏览器的: ...

  2. 制作mnist格式数据集

    import os from PIL import Image from array import * from random import shuffle # # 文件组织架构: # ├──trai ...

  3. selenium 设置时区

    driver = webdriver.Chrome() tz_params = {'timezoneId': 'America/New_York'} driver.execute_cdp_cmd('E ...

  4. Windows 10 输入法(仅桌面) %100 解决

    大家好,今天我遇到了一件非常难受的一件事,那就是 WIndows 自带的输入发问题,无法输入中文!!! 这时我去网上找找解决方案,总结了一下几个: 文件检查 步骤 以管理员身份运行PowerShell ...

  5. Web部署

    1.项目配置的理解 IDEA 中最重要的各种设置项,就是这个 Project Structre 了,关乎你的项目运行,缺胳膊少腿都不行.最近公司正好也是用之前自己比较熟悉的IDEA而不是Eclipse ...

  6. kendo UI级联与过滤的区别

    级联的话子项与父项是有默认值的,不会显示全部

  7. IDEA下Maven项目中通过JDBC连接MySQL数据库

    ### 1. 在当前Maven项目的pom.xml文件中导入数据库依赖: ```<dependency> <groupId>mysql</groupId> < ...

  8. python通过轮子安装第三方库(以Wordcloud为例)

    1.查看python版本 直接输入如下命令: python 执行结果如下: 我们可以直到,本机的python版本为: AMD64bit 3.11版本python 2.下载合适python版本的轮子 下 ...

  9. 基于TDesign风格的Blazor企业级UI组件库

    作为一名Web开发人员,开发前端少不了使用JavaScript,而Blazor就是微软推出的基于.net平台交互式客户 Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈.降低 ...

  10. Android笔记--动态申请权限

    动态申请权限 在动态申请权限这里,一共分为两种不同的模式,分别是Lazy模式(懒汉式)和Hungry模式(饿汉式),这两种模式区分的话,可以通俗地解释一下就是,对于懒汉来说,只有在我们点击某个按钮需要 ...