《例说51单片机(C语言版)(第3版)》一1.6 实例演练

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

1.6 实例演练

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

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


62c43c3c703be8a25202e58f0de4b237167286b5

图1-26 交替闪烁灯电路

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


c5c3ea5c7ebc7050b98f5e0bfe0b98e95f5d5520

图1-27 流程图

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

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


19320d5de97b2a8830a7bacda7087ac90366564e

图1-28 Keil uVision3集成开发环境

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


e8a61c4467a939963df316b67205d60175e0a486

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


eb3e8abef7c74a27f04bfe9146a813dac7f2c1f2

图1-30 选择器件

image在Data base栏中选择所要使用的CPU芯片,例如Atmel半导体公司的AT89S51,再单击图片 109按钮关闭对话框,屏幕出现如图1-31所示的对话框。


98e24c49605d2242247990ab38ace2020af050d4

图1-31 添加启动代码

image这时系统询问我们要不要将8051汇编语言的启动代码放入我们所编辑的项目文件夹里,在此单击图片 112按钮关闭此对话框,则在左边将产生“Target 1”项目,如图1-32所示。


90a92aa981b14506f0b7bf50124c1a545f40732f

图1-32 新建项目界面

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


f9e02368477374b9d2e640ced94536fcb68374bc

图1-33 晶振频率选择

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


24c2bdba5ad018551989a3d5b6bea0a6fb1d6b10

图1-34 选择产生十六进制文件

image选择Create HEX File选项,如此才会产生十六进制文件,单击图片 120按钮关闭对话框即可完成设置。

image单击左上方的图片 122按钮,编辑区里将打开一个全新的编辑窗口,再单击图片 123按钮,然后在随即出现的对话框里的文件名称栏中输入所要保存的文件名称(ch01.c),再单击图片 124按钮关闭对话框。

image在编辑窗口中输入程序内容(即ch01.c),其中的缩排是单击制表键图片 126所产生的,不用按空格键产生。程序编辑完成后,在编辑窗口的左侧选择Target 1节点下面的Sourc Group 1项,单击鼠标右键,弹出快捷菜单,如图1-31所示。选择Add Files to Group Source Group 1项,然后在随即出现的对话框里指定刚才编辑的ch01.c文件,再单击image
按钮;最后,单击image按钮关闭对话框,即可将 ch01.c文件加入Source Group 1。


052571397d094efe3a45aa65383351bdeded0af1

图1-35 添加源文件

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


83db93315cff2b9aea7619e73b4fed0ddb7849f6

图1-36 编译与连接

image图中的“0 Error(s), 0 Warnning(s).”表示没有错误,因此就可继续进行调试/仿真。单击图片 134按钮打开调试工具栏,屏幕出现确认对话框,如图1-37所示。

image单击image按钮关闭对话框,即进入调试状态。若左下方没有出现监视窗口,可单击图片 137按钮打开,如图1-38所示。


34d0cd28526380025cf56990f6c8ea7a03134a50

图1-37 进入调试/仿真


dc7a8a9c0f49187319620f3f85438afc5e0bc391

图1-38 调试/仿真状态

image单击监视窗口底部的Watch #1标签,切换到Watch #1页。再指向Name栏里的项,单击鼠标左键,再单击快捷键图片 141即可输入所要监视的信号名称,在此要跟踪P2,所以输出P2,如图1-39所示。


c5bbed1451a16c0390be00864f74573c165a329e

图1-39 监视窗口

image选择View菜单下的Periodic Window Update命令(若已打勾就不用再选择),让窗口随程序运行而变动。再单击image按钮即开始执行程序,监视窗口中,P2的值也在0x0F与0xF0之间交替变化。表示连接在P2的LED将分为高4位与低4位交替闪烁。若要停止程序的进行,可单击image按钮。

image如果监视窗口还不能满足要求的话,可打开Peripherals菜单中的I/O-Ports命令,再选择P2选项,即可打开P2窗口,如图1-40所示。


67774763cf17b98368b6cb0aab6737060972798c

图1-40 I/O端口设置

image若要继续运行程序,可单击image按钮,则监视窗口与P2窗口的内容都将随程序的进行而变化。若想从头开始,则单击image
按钮停止程序,单击image按钮复位CPU,再单击image按钮。若要关闭此专案,则先单击image按钮离开调试状态,再启动Project菜单下的Close Project命令。最后,启动File菜单下的Exit命令,即可关闭Keil C程序。

image在本项目所存储的文件夹里可找到ch01.hex文件,这个文件就是可执行文件,使用ICE加载此文件即可进行在线仿真,至于在线仿真的操作,可参阅附录。

第1章 轻松看mcs-51 1 1-1 微型计算机与单片机 2 1-2 8051基础知识 2 1-2-1 8x51的结构 2 1-2-2 89c51/89s51的封装与引脚 3 1-2-3 89s51的基本电路 6 1-2-4 mcs-51系列 8 1-2-5 关于atmel的51系列 10 1-3 认识mcs-51的存储器结构 11 1-3-1 程序存储器 11 1-3-2 数据存储器 12 1-3-3 特殊功能寄存器 14 1-4 mcs-51的时序分析与复位 18 1-4-1 时序分析 18 1-4-2 复位 19 1-5 mcs-51的开发流程与工具 20 1-5-1 传统开发工具 21 1-5-2 altium designer电路设计软件 22 1-5-3 keil mvision3集成开发环境 23 1-5-4 89s51的在线刻录功能 23 .1-6 实例演练 24 1-7 实时练习 31 第2章 认识mvision3与keil c 33 2-1 mvision3环境简介 34 2-1-1 认识mvision3环境 34 2-1-2 项目管理与选项 37 2-1-3 认识调试/仿真环境 39 2-1-4 外围操作 40 2-2 keil c语言的基本结构 43 2-3 变量、常数与数据类型 47 2-3-1 数据类型 47 2-3-2 变量名称与保留字 49 2-3-3 变量的作用范围 50 2-4 存储器的形式与模式 50 2-4-1 存储器的形式 51 2-4-2 存储器的模式 52 2-5 keil c的运算符 53 2-6 keil c的流程控制 57 2-6-1 循环指令 57 2-6-2 选择指令 60 2-6-3 跳转指令 62 2-7 数组与指针 63 2-7-1 数组 63 2-7-2 指针 64 2-8 函数与中断子程序 64 2-8-1 函数 65 2-8-2 中断子程序 65 2-9 keil c的预处理命令 66 2-10 实时练习 67 第3章 输出端口的应用 69 3-1 认识mcs-51的输入/输出端口 70 3-2 输出电路设计 72 3-2-1 驱动led 72 3-2-2 驱动蜂鸣器 73 3-2-3 驱动继电器 74 3-2-4 驱动固态继电器 75 3-2-5 驱动七段led数码管 76 3-3 实例演练 78 3-3-1 驱动蜂鸣器实验 78 3-3-2 驱动继电器实验 81 3-3-3 霹雳灯实例演练 83 3-3-4 驱动七段led数码管实验 85 3-4 实时练习 87 第4章 输入口的应用 89 4-1 认识mcs-51的输入口 90 4-2 输入设备与输入电路设计 90 4-2-1 输入设备 90 4-2-2 输入电路设计 93 4-2-3 抖动与去抖动 95 4-3 实例演练 97 4-3-1 拨码开关控制 97 4-3-2 按钮开关控制 99 4-3-3 按钮切换式控制 100 4-3-4 按钮开关应用 102 4-3-5 bcd拨码开关 104 4-3-6 多个按钮开关 106 4-3-7 按钮开关放开后动作 111 4-4 实时练习 113 第5章 输入/输出端口的高级应用 115 5-1 键盘扫描 116 5-1-1 键盘扫描原理 118 5-1-2 4×4键盘程序分析 120 5-1-3 认识mm74c922/mm74c923 122 5-2 七段led数码显示管扫描 124 5-2-1 认识七段led数码管模块 125 5-2-2 认识7447/7448 128 5-2-3 认识74138/74139 131 5-3 静态显示与动态显示 132 5-3-1 使用bcd译码器 133 5-3-2 直接驱动 135 5-3-3 使用扫描译码器 136 5-3-4 闪烁 137 5-3-5 交替显示 138 5-3-6 飞入 139 5-3-7 跑马灯 141 5-4 实例演练 142 5-4-1 4位数七段led数码管 142 5-4-2 直接驱动七段led数码管 145 5-4-3 跑马灯 148 5-4-4 4×4键盘与七段led数码管 150 5-4-5 mm74c922 153 5-5 实时练习 154 第6章 中断的应用 156 6-1 认识mcs-51的中断 157 6-1-1 mcs-51的中断 157 6-1-2 中断使能寄存器ie 158 6-1-3 中断优先级寄存器ip 159 6-1-4 定时器/计数器控制寄存器tcon 160 6-1-5 中断向量 160 6-1-6 中断的应用 160 6-2 中断子程序的仿真 161 6-3 实例演练 162 6-3-1 外部中断int0 162 6-3-2 外部中断int1 164 6
C51单片机设计C语言实例(400例)合集 大量设计实例,新手必备C51源码, 1-IO输出-点亮1个LED灯方法1 10-LED循环左移 100-24c02记忆开机次数 101-24c02存储上次使用中状态 102-DS1302 时钟原理 103-DS1302可调时钟 104-DS1302时钟串口自动更新时间 105-1602液晶显示DS1302时钟 106-字库ST7920 12864液晶基础显示 107-按键 12864显示 108-PCF8591 1路AD数码管显示 109-PCF8591 4路AD数码管显示 11-LED循环右移 110-PCF8591 DA输出模拟 111-PCF8591 输出锯齿波 112-PCF8591 1602液晶显示 113-串口通讯 114-串口通讯中断应用 115-RS485基本通讯原理 116-红外接收原理 117-红外解码数码管显示 118-红外解码1602液晶显示 119-红外发射原理 12-查表显示LED灯 120-红外收发测试 121-双红外发射避障原理测试 122-1个18B20 温度传感器 数码管显示 123-1个18b20温度传感器1602液晶显示 124-多个18b20温度传感器1602液晶显示 125-超温报警测试 126-温度可调上下限1602 126-温度可调上下限1602显示 127-PS2键盘输入1602液晶显示 128-双色点阵1种颜色显示测试 129-双色点阵2种颜色显示测试 13-双灯左移右移闪烁 130-双色点阵显示特定图形 131-双色点阵交替图形显示 132-双色点阵双色交替动态显示 133-热敏电阻测试数码管显示 134-光敏电阻测试数码管显示 135-自动调光测试 136-串转并数字芯片测试 137-非门数字芯片测试 138-电子琴 139-实用99分钟倒计时器 14-花样灯 140-外部频率测试 141-定时做普通时钟可调 142-1602液晶显示的密码锁 143-实用密码锁 144-1602液晶显示的计算器 145-秒表 146-串口测温电脑显示 147-交通灯测试 148-点阵模拟电梯上行下行 149-点阵流动广告模拟 15-PWM调光 150-综合测试程序 151-12位AD_DS1621与12864液晶 152-闪烁灯一 153-闪烁灯二 154-流水灯A 155-51单片机12864大液晶屏proteus仿真 156-流水灯B 157-数码管显示 158-12864LCD显示计算器键盘按键实验 159-数码管显示(锁存器) 16-共阳数码管静态显示 160-数码管动态显示 161-数码管滚动显示 162-数码管字符显示 163-独立按键 164-矩阵键盘 165-矩阵键盘(LCD) 166-用DS1302与12864LCD设计的可调式中文电子日历 167-定时器的使用(方式1) 168-12864LCD图形滚动演示 169-用PG12864LCD设计的指针式电子钟 17-1个共阳数码管显示变化数字 170-定时器的使用(方式2) 171-外部中断的使用 172-定时器和外部中断 173-开关控制12864LCD串行模式显示 174-点阵显示 175-液晶1602显示 176-12864带字库测试程序 177-串行12864显示 178-遥控键值解码-12864LCD显示 179-液晶12864并行 18-单个数码管模拟水流 180-液晶12864并行2 181-串口发送试验 182-串口接收试验 183-串口接收(1602) 184-蜂鸣器发声 185-直流电机调速 186-蜂鸣器间断发声 187-lcd-12864应用 188-继电器控制 189-直流电机调速 19-按键控制单个数码管显示 190-步进电机 191-存储AT24C02 192-PCF8591T AD实验 193-PCF8591T芯片DA实验 194-温度采集DS18B20 195-EEPROM_24C02 196-12864LCD显示24C08保存的开机画面 197-红外解码 198-12864LCD显示EPROM2764保存的开机画面 199-时钟DS1302(LCD) 2-IO输出-点亮1个LED灯方法2 20-单个数码管指示逻辑电平 200-宏晶看门狗 201-SD卡 202-秒表 203-普通定时器时钟 204-彩屏控制 205-彩屏图片显示 206-12864+DS1302时钟+18B20温度计 207-12864测试程序 208-12864串行驱动演示 209-12864生产厂程序 21-8位数码管显示其中之一 210-12864中文显示测试 211-LCD12864 212-12864M液晶显示(有字库)程序(汇编) 213-超声波测距LCD1286
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值