《例说51单片机(C语言版)(第3版)》——1-6 实例演练

简介:

本节书摘来自异步社区《例说51单片机(C语言版)(第3版)》一书中的第1章,第1-6节,作者 张义和,王敏男,许宏昌,余春长,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1-6 实例演练

单片机系统的设计中,软件与硬件息息相关,不同的电路设计,程序可能就不太一样。因此,在编写程序之前,必须确定电路的连接状态,例如,要利用89S51的P2来控制8个LED,让这8个LED分成两组(高4位与低4位)交替闪烁,其设计步骤如下。

首先把电路连接妥当,如图1-26所示。当P2的引脚输出低电压(0)时,其所连接的LED呈现正向偏压而发亮;若将引脚输出高电压(1)时,其所连接的LED不导通而不亮。因此,我们的程序设计就要让P2输出为“00001111”,以十六进制数字表示为“0f”,使左边4个LED亮,右边4个LED不亮;而在Keil C的程序里十六进制数字是以“0x”为前缀。所以,在程序里应表示为“0x0f”。隔一段时间后,再将输出反相(在Keil C里可利用“~”操作符),即左边4个LED不亮,右边4个LED亮,如此周而复始。

screenshot

有了电路和思路后,随即将思路画成流程图,如图1-27所示,其中的延迟函数只是一个“0~x-1”的计数程序而已。

screenshot

除非是很简单的程序,否则,根据流程图来编写程序还是一个比较容易且保险的方法。程序如下。

/* ch01.c -   LED 高低电平交替闪烁程序 */
//==声明区===============================================
#include  <reg51.h>       // 定义 8051 寄存器的头文件
#define  LED   P2        // 定义 LED 接至 P2
void delay(int);         // 声明延迟函数
//==主程序===============================================
main()               // 主程序开始
{  LED=0x0f;          // 初值=0000 1111,状态为左边 4 个亮、右边 4 个灭(共阳)
   while(1)           // 无穷循环
   {   delay(10000);     // 调用延迟函数
       LED=~LED;      // LED 反相输出
   }                 // while 循环结束
}                    // 主程序结束
//==延迟函数===========================================
void delay(int x)         // 延迟函数开始,x=延迟次数
{  int i;             // 声明整型变量 i
   for(i=0;i<x;i++);      // 计数 x 次
}                     // 延迟函数结束

ch01.c

说明:

若使用本书所推荐的89S51在线刻录实验板,请将程序中的“#define  LED  P2”,改为“#define LED P1”。

紧接着单击screenshot按钮(以Windows XP为例),在随即弹出的“开始”菜单里选择“程序”→Keil uVision3选项,即可开启Keil C,如图1-28所示。当然,若桌面上有图片 101图标,则指向这个图标,双击鼠标左键一样可以进入Keil μVision 3环境。

screenshot

首先打开一个项目,启动Project菜单下的New Project命令,屏幕出现如图1-29所示的对话框。

screenshot

在“文件名”栏中指定所要新增的项目名称(如ch01),再单击图片 106按钮,屏幕出现如图1-30所示的对话框。

screenshot

screenshot

screenshot

单击按钮设置此芯片的选项,屏幕出现如图1-33所示的对话框。

screenshot

在这个对话框里设置此芯片的工作频率与所要输出的文件名。首先在Target选项卡的Xtal(MHz)栏中输入12,指定此芯片的工作频率为12MHz。然后切换到Output选项卡,如图1-34所示。

screenshot

screenshot

紧接着进行编译与连接,单击左上方的图片 131按钮即可进行编译与连接,而其过程将记录在下方的输出窗口中,如图1-36所示。

screenshot

screenshot

screenshot

screenshot

screenshot

相关文章
|
23天前
|
物联网
MQTT常见问题之用单片机接入阿里MQTT实例失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
1月前
|
Ubuntu 编译器 Linux
C语言中经典的结构体和联合体共用实例
C语言中经典的结构体和联合体共用实例
20 0
|
1月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
72 0
|
1月前
|
机器学习/深度学习 C语言
利用C语言实例描述程序中的内聚和耦合
利用C语言实例描述程序中的内聚和耦合
21 1
|
2月前
|
算法 C语言
C语言数组实例(冒泡算法、猜数字)
C语言数组实例(冒泡算法、猜数字)
17 0
|
3月前
|
C语言
C语言求年龄实例
【1月更文挑战第19天】C语言求年龄实例。
17 0
|
3月前
|
C语言
C语言函数实例
【1月更文挑战第19天】C语言函数实例。
18 0
|
3月前
|
C语言
C语言实例练习
【1月更文挑战第18天】C语言实例练习。
12 0
|
10天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
21 0