找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2417|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机最小系统板说明书

[复制链接]
跳转到指定楼层
楼主
ID:113809 发表于 2016-4-12 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MCU 使用说明书
注:说明书只是提供部分参考实验,供使用用户熟悉,了解开发板和各模
块电路。程序和开发板是配套的,可以很方便在此开发板上运行。
UnRegistered
序言 .................................................................................................................................................. 4
第一章 :烧录第一个程序 ............................................................................................................ 6
1.1 STC89 单片机下载(烧写程序)方法 ............................................................................ 6
1.2 安装 keil C51 软件编写第一个程序 ............................................................................ 10
第二章 LED 灯闪烁 ...................................................................................................................... 38
2.1 硬件设计 .......................................................................................................................... 39
2.2 软件设计 .......................................................................................................................... 39
2.3 仿真与下载 ...................................................................................................................... 40
第三章LED 跑马灯 ....................................................................................................................... 42
3.1 硬件设计 .......................................................................................................................... 43
3.2 软件设计 .......................................................................................................................... 43
3.3 下载验证 .......................................................................................................................... 44
第四章 LED 渐亮渐灭 .................................................................................................................. 44
4.1 硬件设计 .......................................................................................................................... 45
4.2 软件设计 .......................................................................................................................... 46
4.3 下载验证 .......................................................................................................................... 47
第五章 蜂鸣器 .............................................................................................................................. 47
5.1 蜂鸣器简介 ..................................................................................................................... 48
5.2 硬件设计 ......................................................................................................................... 48
5.3 软件设计 ......................................................................................................................... 49
5.4 下载验证 ......................................................................................................................... 50
第六章 数码管动态显示 .............................................................................................................. 50
6.1 数码管简介 ..................................................................................................................... 51
6.2 硬件设计 ......................................................................................................................... 52
6.3 软件设计 ......................................................................................................................... 53
} 6.4 下载验证 ...................................................................................................................... 54
第七章 独立键盘 .......................................................................................................................... 55
7.1 硬件设计 ......................................................................................................................... 55
7.2 软件设计 ......................................................................................................................... 55
7.3 下载验证 ......................................................................................................................... 57
第八章 定时中断 .......................................................................................................................... 58
8.1 定时器简介 ..................................................................................................................... 59
8.2 硬件设计 ......................................................................................................................... 62
8.3 软件设计 ......................................................................................................................... 62
8.4 下载验证 ......................................................................................................................... 63
第九章 定时中断显示时钟 .......................................................................................................... 63
第十章 外部中断 .......................................................................................................................... 64
10.1 外部中断简介 ............................................................................................................... 65
10.2 硬件设计 ....................................................................................................................... 66
10.3 软件设计 ....................................................................................................................... 66
10.4 下载验证 ....................................................................................................................... 67
第十一章 字符点阵液晶屏1602 ................................................................................................. 67
11.1 1602 简介 ....................................................................................................................... 68
UnRegistered
11.2 硬件设计 ....................................................................................................................... 70
11.3 软件设计 ....................................................................................................................... 71
11.4 下载验证 ....................................................................................................................... 72
第十二章 串口实验 ...................................................................................................................... 73
12.1 UART 简介 ..................................................................................................................... 74
12.2 硬件设计 ....................................................................................................................... 74
12.3 软件设计 ....................................................................................................................... 74
12.4 下载验证 ....................................................................................................................... 75
第十三章 温度测量 .................................................................................................................... 78
12.1 DS18B20 简介 ................................................................................................................ 79
13.2 硬件设计 ....................................................................................................................... 80
13.3 软件设计 ....................................................................................................................... 80
13.4 下载验证 ....................................................................................................................... 83
第一十四章 红外遥控实验 ........................................................................................................ 84
13.1 红外接收头简介 ........................................................................................................... 85
14.2 硬件设计 ....................................................................................................................... 85
14.3 软件设计 ....................................................................................................................... 85
14.4 下载验证 ....................................................................................................................... 88
第十五章 超声波测距模块 .......................................................................................................... 89
15.1 超声波模块工作原理 ................................................................................................... 90
15.2 硬件设计 ....................................................................................................................... 90
15.3 软件设计 ....................................................................................................................... 90
15.4 下载验证 ....................................................................................................................... 93
UnRegistered
序言
开发板产品简介:
本产品作为51 单片机的入门开发板,专门为各大院校的单片机课程而设计,
能够帮学生快速入门单片机,带领大家进入单片机世界。很期待能给大家一同学
习,探讨单片机。
本开发板提供了大量的例程,帮助用户彻底了解单片机。同时运用C 语言
进行编程。对于学过C 语言的用户,可以将C 语言和单片机结合起来,领悟C
语言的神奇魅力,提高用户的C 语言能力,为后续的嵌入式系统学习打下坚实
的基础。
本开发板为客户提供了丰富的IO 资源,用户可以根据自己的需求,利用排
线自由实现自己想要的功能,这样用户可以随心所欲地控制单片机。
如何学好单片机?
有人说几天就学会单片机,也不是不可以,但需要基础和足够高的领悟能力。
单片机毕竟是专业知识,大部人学习单片机要么是出于爱好,要么是为了工作,
不管出于哪种目的,学习必须要循序渐进,可以尝试加快脚步,但是没有捷径。
有人说,我马上要做个工程,我要快速学好单片机,怎么办?仔细想想,拿
到一个新买的手机仅仅使用这些功能还要花好长时间操作研究,并且要仔细阅读
说明书才行。何况单片机这种相对专业的产品。
学习板、开发板是学习和实践的最好产品,因为有配套测试好的软件和硬件,
这样用户就不必操心组建开发系统的过程。这并不是说有了开发板你就能学会单
片机,开发板只不过是个工具,如何能利用这个工具,让它帮助你更快的了解并
掌握这个知识才是关键,一般情况配套的光盘资料都会有相关的电路、程序、使
用说明书已经多种资料等。所以应该先看一下光盘配套的资料。不要拿到手就把
他扔到一边了,即便你是高手,也要花点时间看一下使用说明。
有些朋友没有硬件电路基础,看不懂电路图,有的朋友也没有 c 语言基础,
看不懂程序,这个往往是增加学习难度的主要问题,基础很重要,但没有基础也
不用灰心,很多知识都是从无到有学习来的,只要够努力就好。单片机是硬件和
软件结合的产品,所以不能忽略任何一个,程序一定要根据对应的硬件来写,不
要随便从网上下载个程序直接运行到板子上,然后发现没有效果就怀疑是硬件出
了问题,单片机不是电脑主板,尤其是单片机开发板,它们的通用性并不高,但
差别也不大,这时候就需要根据硬件修改程序。 所以如果看不懂电路的朋友请
学习电路的基础原理后再去编程。
这里说一下个人建议:
1、多看书,尤其是单片机基础的书,了解单片机原理才能更好的使用它,国内 51
系列推广了很多年,资料最为丰富。
2、多上网查资料,大家的力量是伟大的,单片机是外国人发明的,我们一般要
先学会它的语言再使用它,所以多出了很多步骤,很多人对单片机的理解层次也
不同,写程序的风格也各异。这个都没有关系,一个问题查的资料多了,自己就
能分析出他的道理。
3、多调试。程序无论如何分析,不去调试,结果仍旧不能肯定。一般的单片机
UnRegistered
可以反复烧写上万次,好的数十万次,一个单片机不过几元钱,所以不要担心芯
片损坏而不敢去反复烧写实验,开发板就是帮助我们学习开发的工具,不要让它
成了花瓶!
开发板配置:
1. STC89C52(与51 兼容)支持在线下载程序。
2. 8 位LED 发光二极管
3. 4 位独立按键
4. USB 下载模块
5. 电源模块
6. 4 位数码管显示
7. 蜂鸣器电路
8. 红外接收头电路
9. 18B20 温度测量
10. 无线接收模块
11. 12864/1602 液晶显示电路
12. 单片机32 个IO 口全部引出,方便自己进行扩展
13. NRF24L01 无线通信模块
UnRegistered
第一章:烧录第一个程序
1.1 STC89 单片机下载(烧写程序)方法
1.1.1 硬件连接 USB 方口线插入开发板的 USB 方口座子,只需用连接一根usb
线即可
1.1.2 驱动安装与程序下载
Usb 线插入电脑后,会提示如上信息,点击“取消”
UnRegistered
手动打开PL2303 驱动文件夹(驱动程序文件夹内),双击安装驱动
点击“INSTALL”安装,成功后点击“完成”,启动后,重新拔插usb 线,如果
不能识别请点击自动安装即可。 UnRegistered
出现虚拟的 COM 口( COM5)
双击打开下载软件,也可以到 http://www.mcu-memory.com/下载最新版本
UnRegistered
以上主要是操作分为 4 步
1、选择芯片类型,必须是 STC 系列
2、.打开需要烧写的 HEX 文件
3、选择对应的 COM 口
4、点击“下载”,关掉开发板电源,然后稍等片刻打开电源,等待下载完成
5、以上步骤中 第 4 步的操作顺序非常重要,冷启动:即电源完全关掉,然后
重新上电。
UnRegistered
如果出现上图现象长期不动作,请检查以下几点:
1、第 4 步开关顺序不正确
2、串口没有选择正确
3、串口线或者 usb 转串口线没有连接好
4、晶振没有插紧
5、芯片没有放置正确(不要放偏)
6、软件不兼容,去 http://www.mcu-memory.com/下载最新版本
1.2 安装 keil C51 软件编写第一个程序
1.2.1 keil C51 安装
双击光盘中开发板光盘资料\3、各种配套软件\keil C51 完全破解版\setup
文件夹中 setup.exe 可执行安装文件,出现如下界面:
UnRegistered
选择 full Version
点击 Next
UnRegistered
点击 Yes
点击 Browse 选择安装路径,我们这里选择 D:\Keil
UnRegistered
点击 Next
UnRegistered
需要输入序列号,这个时候打开开发板光盘资料\3、各种配套软件\keil C51 完
全破解版 文件夹中 安装方法.txt 文档
分别复制 SN = K1DZP-5IUSH-A01UE 序列号到相应位置
UnRegistered
姓名和公司名字可任意填写,点击 Next
点击 Next
UnRegistered
UnRegistered
点击 Next
UnRegistered
点击 Finish 完成安装声明:本破解版本仅作测试使用,长期使用请到 keil 公
司购买正版软件
1.2.2 用 keil C51 编写一个新程序
双击打开桌面上图标
UnRegistered
点击 Project->New Project
选择保存路径并填写文件名,这里文件名为 test1
UnRegistered
注: )尽量单独建立一个文件夹存放一个工程,这样方便管理,如下:
存放在 test1 文件夹中,单击 保存
选择对于的芯片型号,假设我们开发板上使用的是 AT89S52 单片机,选择如下
UnRegistered
选择 Atmel 厂商中的 AT89S52 单击确定
注: ) STC 系列单片机在 keil 中没有此型号,可以直接用 Atmel 的型号代
替,如 STC89c52 可以用 AT89C52 或者 AT89S52 代替,其他依次类推,也可以
到 STC 官网下载 STC 芯片型号插件。
提示是否加载 “标准启动文件” ,刚开始学习可以不用加载,选择 “否”
这个时候工程就建立完成了,下一步需要建立一个 c 或者 Asm 类型的文件,并
添加到该工程中,这里我们以 c 文件为例讲解
UnRegistered
点击 File ->New 出现一个空白 Text1 文档.
UnRegistered
在空白文档中输入需要写的程序,我们这里赋值一段代码做为演示
点击 File ->Save 出现如下对话框
UnRegistered
需要输入文件名,这里要特别注意,文件默认的保存类型是 All Files,而我们
需要的类型是C 文件,所以需要输入后缀为“ .c”的文件名,如下输入 led.c
单击“保存”
UnRegistered
可以看到保存正确的 c 文件,关键字会用蓝色显示
UnRegistered
点击前面“ +”号,出现下图
右击 Source Group 1 出现下图
UnRegistered
点击添加文件选项 Add Files to Group
选中刚才保存的 led.c 的文件,点击 Add,然后点击 Close,文件添加完成
UnRegistered
点击“ +”号,可以看到 c 文件已经添加到工程中了下一步需要进行编译前工
程设置
点击 Options for Target 出现如下对话框
UnRegistered
仅作编译文件用时需要设置 OutPut 一项,点击 OutPut
在“ Create HEX File”前打钩,表示编译需要产生十六进制文件,这个文件是
我们烧写到单片机必须的文件,所以必须勾选此项。点击“确定”
UnRegistered
至此,基础设置完成,下一步进行编译工作
UnRegistered
点击 Project -> Rebuild all target files (重新编译所有目标文件)
底部编译结果显示"test1" - 0 Error(s), 0 Warning(s). 表示没有错误没有警
告;
Program Size: data=9.0 xdata=0 code=21 可以看到程序大小, data 占用 9 字
节,程序代码占用21 字节;
creating hex file from "test1"... 产生 hex 文件,这个文件正式烧写单片
机需要的
此时用上述烧写单片机方法把生成的 hex 文件载入单片机,即可在开发板上看
到实验结果。
2.3 仿真芯片 SST89E516 使用方法
SST 仿真芯片的使用方法
硬件要求:
1.已经固化仿真程序的仿真芯片,如 SST89E58、 SST89E516
2.带有串口资源的目标板,如开发板
硬件连接: 1、将仿真芯片直接插到目标板上,代替原有单片机的位置。
2,用一根 usb 线连接电脑
3、打开电源开关
连接图和 STC 单片机一样,使用时需要把 STC 单片机换成 SST89E516 仿真芯
片,只需要连接一根 usb 线至电脑
软件设置:
1、 打开 keil 软件,并打开一个需要仿真的程序(已经编译通过的工程)
如下图:
以下以“流水灯”工程为例。
UnRegistered
2、 点击上图箭头图标打开如下对话框
3、 点击“ Debug(调试) ”选项,按照下图设置
UnRegistered
4、 如上图设置后,点击“ Setting”选项,出现如下对话框
UnRegistered
★ Com 口选在当前硬件连接的端口,不能选择错误,否则不能通讯
★ 波特率默认选择 38400,也可以尝试选其他波特率,速度较低
然后“ OK” “确认”完成设置
5、 点击如下图仿真“ ”图标
即可看到状态栏有蓝色程序载入进展条,完成后出现如下界面
如果出现如下界面
UnRegistered
说明通讯异常请按一下目标板复位键或者重新启动电源,然后点击“ Try
Again”即可,如果多次尝试仍不能进入仿真界面,请点击“ Settings”检测端
口和波特率是否正确。然后重复操作。
下图是成功进入的界面,供参考对比
左侧栏有如图现象,状态栏显示仿真器的版本,这里显示 Monitor–51 V3.4
这个时候就可以进入仿真步骤了。
UnRegistered
6、 以下是常用的仿真按钮图标
以上图标分别是(从左往右) :复位、全速运行、停止、单步、跨步
点击全速运行就可以看到实际执行效果。
用户也可以单步、跨步或者断点运行。
使用注意事项:
1.全速运行后不能通过点击“ ” 停止。产生原因如下:
下图中“ ”未勾选。建议不要勾
选,否则会影响仿真的正确性。
这时候我们如果想停止正在全速运行的程序可以通过用户板的复位按键停止,然
UnRegistered
后重新
进入其他仿真步骤。
2.不能正常进入仿真界面
请检查一下原因:
◆ 硬件是否连接牢靠
◆ 电源是否打开
◆ 软件设置是否正确
◆ 重新启动 keil 软件
UnRegistered
第二章 LED 灯闪烁
单片机的最简单操作莫过于控制IO 口的电平,本章将通过一个经典的跑马
灯程序,带大家开启神奇的单片机之旅。通过本章的学习,你将了解到单片机的
IO 口的使用方法。在本章中,我们将点亮开发板上的8 个LED 灯。本章分为如
下几个部分:
2.1 硬件设计
2.2 软件设计
2.3 仿真与下载
UnRegistered
2.1 硬件设计
LED 灯与1K 的电阻串联,接在P1 口,当端口赋值为0 时,点亮LED 灯,端
口赋值为1 时,熄灭LED 灯,。下图是LED 的原理图。注意:在使用LED 时,不
要忘了将J12 跳线帽短接!
2.2 软件设计
此程序来自于开发板的实验1(LED 灯闪烁),此处略有改动
/*******延时函数*************/
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 255; j > 0; j--);
}
void main()
{
while(1)
{
P1 = 0xff; //置P1 口为高电平(熄灭LED 灯)
delay(600); // 调用延时程序
P1 = 0x00; //置P1 口为低电平(点亮LED 灯)
delay(600); // 延时
}
}
UnRegistered
2.3 仿真与下载
具体怎么下载程序,请参考第一章的程序下载部分,在这里就不讨论了。
实物效果图如下图所示
当然有时候我们调试时,每次都要把程序烧到芯片里面去,觉得很麻烦。如果身
边没有硬件仿真器,软件仿真就不失为一种不错的选择。注意:软件仿真只能进
行逻辑仿真,在一些情况下是不能用的,望读者多留意。
首先,我们进行软件仿真(请先确保 Options for Target->Debug 选项卡里面
已经设置为Use Simulator。查看一下,是否生成了HEX 文件。先按开始仿
真,接着按,显示逻辑分析窗口,点击,新建信号P1,如下图所示
逻辑分析设置
然后单击 Close 关闭该对话框。可以看到逻辑分析窗口出来了P1 信号,如下图
所示。
UnRegistered
设置后的逻辑分析窗口
接着点击 ,开始运行。运行一段时间之后,按按钮,暂停仿真回到逻
辑分析窗口,可以看到如下图所示的波形。
仿真波形
UnRegistered
这里注意 Gird 要调节到 0.25s 左右比较合适,可以通过 Zoom 里面的 In 按
钮来放大波形,通过 Out 按钮来缩小波形,或者按 All 显示全部波形。
第三章LED 跑马灯
在第二章的基础上,我们将进一步学习开发板的LED 灯,实现LED 跑马灯。彻底
掌握IO 口的使用。本章分为如下几个部分:
3.1 硬件设计
3.2 软件设计
3.3 下载验证
UnRegistered
3.1 硬件设计
此部分利用第二章的原理图,如下图所示。同样需要注意,记得短接J12 跳
线帽哦!
3.2 软件设计
此程序来自于开发板的实验2(LED 跑马灯)
void main()
{
UnRegistered
uchar num,dat1,dat2;
delay(500);
while(1)
{
dat1=0xfe;
dat2=0x7f;
for(num=0;num<7;num++)
{
GPIO1 = dat1; //初始化赋值
dat1 = dat1<<1; //右移一位
delay(500); //延时
}
for(num=0;num<7;num++)
{
GPIO1 =dat2; //初始化赋值
dat2 = dat2>>1; //右移一位
delay(500); //延时
}
}
}
void delay(uint z)
{
uchar j;
for(z;z>0;z--)
for(j=200;j>0;j--);
}
3.3 下载验证
具体怎么下载程序,请参考第一章的程序下载部分,在这里就不讨论了。
第四章 LED 渐亮渐灭
前面我们已经学会了LED 灯闪烁和跑流水灯,这次我们将进一步深入,来学
UnRegistered
习LED。LED 灯的渐亮渐灭,说白了,就是调节LED 的占空比。当然实现方法有
多种多样,可以利用中断,也可以利用简单的循环。这里就以循环为例,说明如
何实现LED 的渐亮渐灭,感兴趣的读者可以自己用中断实现占空比的调节。本章
分为如下几个部分:
4.1 硬件设计
4.2 软件设计
4.3 下载验证
4.1 硬件设计
此部分利用第二章的原理图,如下图所示。同样需要注意,记得短接J12 跳
线帽哦!
UnRegistered
4.2 软件设计
此程序来自于开发板的实验3(LED 渐亮渐灭)
void Delay(uint uiTemp)
{
while(uiTemp--);
}
void main()
{
uint Duty_Ratio = 0;//调节亮度变量
uint i;
while(1)
{
for(i = 0; i < 71 ;i++)
{
Duty_Ratio += i;
GPIO1 = 0x00;
Delay(Duty_Ratio); //相当于调节占空比
GPIO1 = 0xFF;
Delay(2500-Duty_Ratio); //周期大约为2500
}
for(i = 71; i > 15 ;i--)
{
Duty_Ratio -= i;
GPIO1 = 0x00;
Delay(Duty_Ratio); //相当于调节占空比
GPIO1 = 0xFF;
UnRegistered
Delay(2500-Duty_Ratio); //周期大约为2500
}
Duty_Ratio = 0;
}
}
4.3 下载验证
可以看到LED 灯由暗到亮,然后慢慢地熄灭,接着就一直重复前面的现象,与我
们期望的是一致的。
第五章 蜂鸣器
前几章我们学了通过IO 口来控制LED,这里我们将使用IO 口来控制蜂鸣器,
原理是一样的。本章分为如下几个部分:
5.1 蜂鸣器简介
5.2 硬件设计
5.3 软件设计
5.4 下载验证
UnRegistered
5.1 蜂鸣器简介
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、
打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产
品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。此开
发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图所示:
有源蜂鸣器
这里的有源不是指电源的 “源”,而是指有没有自带震荡电路,有源蜂鸣器自
带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提
供 2~5Khz 左右的方波驱动,才能发声。
5.2 硬件设计
因为单片机本身的IO 驱动能力不够,所以加上三极管能大大提高其驱动能力,
感兴趣的同学可以参考一下模电的相关知识。注意:记得将J9 短接。
UnRegistered
5.3 软件设计
程序来自开发板的实验5(警报发生器)
void delay500(void)
{
uchar i;
for(i=230;i>0;i--);
}
main()
{
uchar j;
while(1)
{
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率1KHz
delay500(); //延时500us
}
for(j=200;j>0;j--)
{
BEEP=~BEEP; //输出频率500Hz
delay500(); //延时1ms
delay500();
}
UnRegistered
}
}
5.4 下载验证
我们可以听见类似报警器的声音,与我们的预期是一致的。
第六章 数码管动态显示
前面的实验都是对单片机的IO 口进行简单的操作。这次我们将学习数码管
的静态显示。当然相对于前面的东西,我们学习数码管要掌握的东西就比以前的
多一些,望读者能好好掌握数码管。因为数码管显示比较直观,而且操作方便,
所以以后还有很多实验,都需要用到数码管显示结果。本章分为如下几个部分:
6.1 数码管简介
UnRegistered
6.2 硬件设计
6.3 软件设计
6.4 下载验证
6.1 数码管简介
4 位一体数码管的引脚图,共阳型。1,2,3,4 是从右边数起的
UnRegistered
数码管显示对照表(共阳型,0 时点亮,1 时熄灭)
读者可以使用万用表来核对表格的值,以此来加深对数码管的操作。例如要显示
0.我们可以将万用表笔的正极接共阳段,万用表的负极接a,b,c,d,e,f。读者会
发现这样就形成了一个0.同样如果将万用表的负极接b,c 管教,会形成一个1.
有了这些基础,大家就可以编程了。
6.2 硬件设计
注意:在使用数码管时,记得把J10 短接。
UnRegistered
6.3 软件设计
程序来自开发板的实验10(数码管静态显示)
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0x90};//共阳代码
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
GPIO0 = table[4];//显示数字4
P2_0 = 0;
delay(5);
P2_0 = 1;
GPIO0 = table[3];//显示数字3
P2_1 = 0;
delay(5);
P2_1 = 1;
GPIO0 = table[2];//显示数字2
P2_2 = 0;
delay(5);
P2_2 = 1;
GPIO0 = table[1];//显示数字1
P2_3 = 0;
delay(5);
P2_3 = 1;
}
void main(void)
UnRegistered
{
while(1)
{
display();
}
}
6.4 下载验证
实验结果如下图。可以在数码管上看到1234 的显示。试验成功。
UnRegistered
第七章独立键盘
按键作为人机交互的输入,读者可以通过键盘来控制程序的运行,这样可以更好的看到
程序效果。在本章,我们学习开发板上的独立键盘。本章分为如下几个部分:
7.1 硬件设计
7.2 软件设计
7.3 下载验证
7.1 硬件设计
注意:因为我们的按键有一段接的是GND,需要检测相应的管脚为0,才能确认
有按键按下(当然在检测管脚时,要先将IO 口拉低,这样检测的数值才是正确
的)。这和我们平时的逻辑有点不同,呵呵
7.2 软件设计
程序来自开发板的实验11(独立键盘)
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
UnRegistered
}
void main()
{
P0 = 0;
while(1) //一直循环
{
if(key1==0) //KEY1 是否按下
{
delay(5); //软件去抖
if(key1==0) //确认按键按下(闪烁一次)
{
while(!key1);//松手检测
P1=0;
delay(200);
P1=0XFF;
}
}
if(key2==0) //KEY2 是否按下
{
delay(5); //软件去抖
if(key2==0) //确认按键按下
{
while(!key2);//松手检测(闪烁二次)
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
}
}
if(key3==0) //KEY3 是否按下
{
delay(5); //软件去抖
if(key3==0) //确认按键按下(闪烁三次)
{
while(!key3);//松手检测
P1=0;
UnRegistered
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
if(key4==0) //KEY4 是否按下
{
delay(5); //软件去抖
if(key4==0) //确认按键按下
{
while(!key4);//松手检测(闪烁四次)
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
P1=0;
delay(200);
P1=0XFF;
delay(200);
}
}
delay(10);
}
}
7.3 下载验证
当我们按下独立按键时,会有相应的LED 变化,与我们预期的是一样的。
UnRegistered
第八章 定时中断
前面的实验都是基本上没有涉及寄存器。这章我们将会使用51 里面的寄存器。
熟悉并且熟练得掌握单片机寄存器将是学好单片机的关键。读者以后可能会在
51 基础上继续学习例如STM32,MSP430 等芯片,这里面就有比较多的寄存器。
本章分为如下几个部分:
8.1 定时器简介
8.2 硬件设计
8.3 软件设计
8.4 下载验证
UnRegistered
8.1 定时器简介
中断是为使单片机具有对外部或内部随机发生的事件进行处理而设置的。51 单
片机有5 种中断源,即有5 种对应的情况发生时会使单片机去处理中断程序(中
断函数)。其中,中断寄存器,定时器/计数器相关寄存器本身或者相关位用来做
初始化,中断函数的内容主要是体现发生中断后所需要的操作(在中断函数内写
代码)。
1.中断允许寄存器IE
中断寄存器IE
中断寄存器用来设定各个中断源的打开和关闭,IE 在特殊功能寄存器
中,字节地址为A8H,位地址(由低位到高位)分别是A8H~AFH,该寄存器运
UnRegistered
行位寻址,即可对该寄存器的每一位进行单独操作。单片机复位时IE 全部
被清零。下面列举各位的在不同状态下的具体含义:
EA-------全局中断允许位
EA = 1,打开全局中断控制,在此条件下由各个中断控制位(TCON 寄存
器中的TRn 位)控制相应中断的打开和关闭。
EA = 0,关闭全部中断。
-- 无效位
ET2--定时器/计数器2 中断允许位
ET2 = 1,打开T2 中断。
ET2 = 0,关闭T2 中断。
ES--串行口中断允许位
ES = 1,打开串行口中断。
ES = 0,关闭串行口中断。
ET1--定时器/计数器中断允许位
ET1 = 1,打开T1 中断。
ET1 = 0, 关闭T1 中断.
EX1--外部中断1 中断允许位
EX1 = 1,打开外部中断1 中断。
EX1 = 0,关闭外部中断1 中断。
ET0--定时器/计数器0 中断允许位
ET0 = 1, 打开T0 中断。
ET0 = 0,关闭T0 中断。
EX--外部中断0 中断允许位
EX0 = 1,打开外部中断0 中断。
EX0 = 0,关闭外部中断0 中断。
2.定时器/计数器相关寄存器(TMOD,TCON)
定时器/计数器工作方式寄存器(TMOD)
定时器/计数器工作方式寄存器
UnRegistered
定时器/计数器工作方式寄存器在特殊功能寄存器中,字节地址为89H,
不能位寻址。TMOD 用来确定定时器的工作方式及功能选择。单片机复位时
TMOD 全被被清零。下面介绍各位在不同值下的含义:
GATE --门控制位。
GATE = 0,定时器/计数器启动与停止仅受TCON 寄存器中TRn(n = 0, 1)
来控制。
GATE = 1,定时器/计数器启动与停止由TCON 寄存器中的TRn(n=0, 1)
和外部中断引脚(INT0 或INT1)的电平状态来共同控制。
C/T`--定时器模式和计数器模式选择位。
C/T` = 1,为计数器模式;C/T` = 0,为定时器模式。
M1M0--工作方式选择位(见下表)
定时器/计数器的4 中工作方式
定时器/计数器控制寄存器TCON
定时器/计数器控制寄存器在特殊功能寄存器中,字节地址为88H,位
地址(由低到高)分别为88H~8FH,该寄存器可进行位寻址。TCON 寄存器用来
控制定时器启,停,标志寄存器溢出和中断情况。单片机复位时TCON 全部
被清零。各位被赋不同值的含义如下:
定时器/计数器控制寄存器TCON
TF1--定时器1 溢出标志位
当定时器1 计满溢出时,由硬件使TF1 置1,并申请中断。进入中断程
序后由硬件自动清零。如使用定时器中断,则该位不用人为操作;但如用软
件查询方式,当查询到该位为1 时,需用软件清零。
TR1--定时器1 运行控制位
由软件清0 关闭定时器1。当GATE = 1,且INT1 为高电平时,TR1 置
1 启动定时器1;当GATE = 0 时,TR1 置1 时即可启动定时器1.
UnRegistered
TF0--定时器0 溢出标志位,功能和操作方式和TF1 相同。
TR0--定时器0 运行标志位,其功能和操作方式同TR1。
IE1--外部中断1 请求标志
当IT1 = 0,时为电平触发方式,每个机器周期的S5P2 采样INT1 引脚;
若INT1 引脚为低电平,则置1,否则IE1 清0。
当IT1 = 1,INT1 为跳变沿触发方式,当第一个机器周期采样到INT1
为低电平时,则IE1 置1。IE1=1 时,表示外部中断1 正在向CPU 申请中断。
当CPU 响应中断,转向中断服务程序时,该位由硬件清0.
IT1--外部中断1 触发方式选择位
IT1= 0,为电平触发方式,引脚INT1 上低电平有效。
IT1 = 1,为跳变沿触发方式,引脚INT1 上的电平从高到低的负跳变
有效。
IE0--外部中断0 请求标志,其功能及操作方式同IE1。
IT0--外部中断0 触发方式选择位,其功能及操作方式同IT1。
详细资料,请查看开发板的实验12(定时中断模式2)目录下的资料。
8.2 硬件设计
为了便于观察定时中断的效果,这里我们就使用一个LED 灯来检测是否发生定时
中断。顺便说一下,中断函数和其他函数的区别很小,使用时可以把它理解成一
个普通函数,只是它是靠事情来调用函数的。
8.3 软件设计
void Timer_Mode2_Init(void)//定时中断初始化函数
{
TMOD |= 0x02; //模式二,自动重装
UnRegistered
ET0 = 1; //开定时器0 中断
TR0 = 1; //启动定时计数器
TH0 = 72; //T0 赋值,每次进中断时间为200us
TL0 = 72;
}
void Timer_Mode2(void) interrupt 1//中断函数
{
static unsigned int i=0;
i++;
if(i==2500)//延时0.5s 闪烁(因为每次进中断的时间是200us)
{
LED2 = ~LED2;//开LED 灯
i = 0;
}
}
void main()
{
Timer_Mode2_Init();
EA = 1; //开总中断
for(;;)
;
}
8.4 下载验证
将程序下到芯片后,可以看到LED 灯不停闪烁。LED 灯的状态改变是发生在中断
程序中,说明中断起作用了。
第九章定时中断显示时钟
8.1 硬件设计
8.2 软件设计
8.3 下载验证
UnRegistered
第十章 外部中断
前面我们用到了定时中断,本章我们将学习外部中断。51 单片机一般有两个外
部中断输入端,并允许外部中断源以低电平或负边沿两种触发方式输入中断请求
信号。本实验是基于负边沿触发方式。本章分为如下几个部分:
10.1 外部中断简介
10.2 硬件设计
10.3 软件设计
10.4 下载验证
UnRegistered
10.1 外部中断简介
外部中断需要用到寄存器如下:
1.中断允许寄存器IE
UnRegistered
中断优先级次序寄存器IP
详细资料,请看开发板的实验14(外部中断)目录下的资料。
10.2 硬件设计
K1,K2 与外部中断0,1 的连接如下图
10.3 软件设计
程序来自开发板的实验14(外部中断)。注意:在这里我是用了H 文件和C 文
件。目的是希望读者能够从这个简单的例子中,体会到H 文件和C 文件的使用。
/************* Ex_Inter.c 文件 *****************/
void EXT1_Initial()
{
EX1 = 1;
IT1 = 1;
}
void EXT0_Initial()
{
EX0 = 1;
IT0 = 1;
}
void INT_1 (void ) interrupt 2 //外部中断2 函数
{
LED = LED_ON;//LED 亮
UnRegistered
}
void INT_0 (void ) interrupt 0 //外部中断0 函数
{
LED = LED_OFF;//LED 灭
}
/************* main.c 文件 *****************/
void main(void )
{
EXT0_Initial(); //初始化外部中断0
EXT1_Initial(); //初始化外部中断1
EA = 1;//开中断
for(;;)
{
}
}
10.4 下载验证
当我们按下K1,K2 时,
第十一章 字符点阵液晶屏1602
前面的实验基本上只是简单的IO 口操作,本章我们要学习1602 字符型液晶显示
屏。我们可以将1602 理解成一个芯片,对此我们只要把相应的命令和数据写进
去就可以了。本章分为如下几个部分:
11.1 1602 简介
11.2 硬件设计
11.3 软件设计
11.4 下载验证
UnRegistered
11.1 1602 简介
1602 液晶模块内部的字符发生存储器(CGROM)已经存储了160 个不同的点阵
字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文
假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是
01000001B(41H),显示时模块把地址41H 中的点阵字符图形显示出来,我们就
能看到字母“A”。
因为1602 识别的是ASCII 码,试验可以用ASCII 码直接赋值,在单片机编
程中还可以用字符型常量或变量赋值,如'A’。
以下是1602 的16 进制ASCII 码表:
UnRegistered
读的时候,先读上面那行,再读左边那列,如:感叹号!的ASCII 为0x21,字
母B 的ASCII 为0x42(前面加0x 表示十六进制)。
1602 显示地址
1602 字符液晶显示可分为上下两部分各16 位进行显示,处于不同行时的字符显
示地址如下
1602 指令集
UnRegistered
详细资料,请参考开发板的实验15(LCD1602)目录下的LCD1602 的数据手册。
11.2 硬件设计
LCD1602 的原理图如下。注意:记得拔下J10 的跳线帽。
UnRegistered
11.3 软件设计
程序来自开发板的实验15(LCD1602)
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ wela=0;
lcdrs=0;
GP_P2=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
wela=0;
lcdrs=1;
GP_P2=date;
delay(5);
UnRegistered
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);//显示俩行,8 位数据,5*7 点阵(多次初始化)
delay(90);
write_com(0x38);
delay(90);
write_com(0x38);
delay(90);
write_com(0x0e);//打开显示,显示光标
write_com(0x06);//当读取一个字符之后,地址指针加一
write_com(0x01);//清屏指令
}
void main()
{
init();
write_com(0x80);//设置显示地址,第一行显示
for(num=0;num<16;num++)
{
write_data(table[num]);//显示数据
delay(20);//可以不用添加延时
}
write_com(0x80+0x40);//设置显示地址,在第二行显示
for(num=0;num<16;num++)
{
write_data(table1[num]);//显示数据
delay(20);
}
while(1);
}
11.4 下载验证
程序下载之后,可以看到液晶屏上显示俩行:0123456789abcdef,与预期的一致,
实验成功。
UnRegistered
第十二章 串口实验
通信的三种基本类型常用的通信从传输方向上可以分为单工通信、半双工通
信、全双工通信三类。单工通信就是指只允许一方向另外一方传送信息,而另一
方不能回传信息。比如电视遥控器、收音机广播等,都是单工通信技术。半双工
通信是指数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外一
方,比如我们的对讲机就是典型的半双工。全双工通信就发送数据的同时也能够
接收数据,两者同步进行,就如同我们的电话一样,我们说话的同时也可以听到
对方的声音。本章分为如下几个部分:
12.1 UART 简介
12.2 硬件设计
12.3 软件设计
12.4 下载验证
UnRegistered
12.1 UART 简介
IO 口模拟串口通信,让大家了解了串口通信的本质,但是我们的单片机程序却需要不
停的检测扫描单片机 IO 口收到的数据,大量占用了单片机的运行时间。这时候就会有聪明
人想了,其实我们并不是很关心通信的过程,我们只需要一个通信的结果,最终得到接收到
的数据就行了。这样我们可以在单片机内部做一个硬件模块,让它自动接收数据,接收完了,
通知我们一下就可以了,我们的 51 单片机内部就存在这样一个 UART 模块,要正确使用它,
当然还得先把对应的特殊功能寄存器配置好。
详细的寄存器描述,由于篇幅过长,这里就不赘述,读者可以参考开发板的
实验17(单片机的UART 串口通信)目录下的51 单片机串行通信,这里面有详
细的讲解。
12.2 硬件设计
由于单片机的UART 端口不能直接和电脑相连,所以就通过CH340 进行电平
转换。
12.3 软件设计
void UART_Init(void)
{
TMOD = 0x20; //用定时器设置串口波特率 9600
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
REN = 1; //串口初始化
SM0 = 0;
SM1 = 1;
ES = 1;
}
void main()
{
UART_Init();
UnRegistered
EA = 1; //开启总中断
while(1)
{
if(Flag==1) //判断是否有串口数据的传送
{
ES = 0;
Flag = 0;
SBUF = a; //发送数据a 到SBUF,即将单片机的数据发送
到计算机
while(!TI); //等待发送结束
TI = 0;
ES = 1;
}
}
}
void ser() interrupt 4
{
if(RI)
{
RI = 0; //接收数据SBUF,即将计算机的数据接收。
a = SBUF;
Flag = 1;
}
}
12.4 下载验证
读者可以自己到网上下载SSCOM3.3 串口调试软件。打开SSCOM3.3。设置串
口为 CH340 的 USB 串口(根据你自己的电脑选择,我的电脑是 COM4).波特率
为9600,数据位为8 位,一位停止位。无校验,无流控制。参数配置后,如下
图所示。 UnRegistered
UnRegistered
读者可以在字符框输入任意一串字符,例如:长沙冠阳电子科技有限公司,
就可以在输出栏显示:长沙冠阳电子科技有限公司。
注意:UART 是通过一个个的字符传送的。
UnRegistered
第十三章 温度测量
本章我们将学习DS18B20 这款传感器。这里面最重要的一点是我们要学会看
DS18B20 的通信协议和它的时序图。本章分为如下几个部分:
13.1 DS18B20 简介
13.2 硬件设计
13.3 软件设计
13.4 下载验证
UnRegistered
12.1 DS18B20 简介
DS18B20 是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度
高的特点。DS18B20 数字温度传感器接线方便,封装成后可应用于多种场合,如
管道式,螺纹式,磁铁吸附式,不锈钢
封装式,型号多种多样,有LTM8877,LTM8874 等等。主要根据应用场合的不同
而改变其外观。封装后的DS18B20 可用于电缆沟测温,高炉水循环测温,锅炉测
温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。
耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测
温和控制领域。
DS18B20 读写时序
DS18B20 初始化过程
UnRegistered
上面只是基本的操作信息。详细资料,请参考开发板的实验19(并行数码管温
度测量)目录下面的资料。在这里,就不赘述了。
13.2 硬件设计
注意:这里在数据端接上了1K 的上拉电阻,同时记得将J16,J10 跳线帽短
接。
13.3 软件设计
程序来自开发板的实验19(并行数码管温度测量)
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延时124*8+10=1002us
}
void Init_DS18B20(void)
{
unsigned char x=0;
DQ=1; //DQ 先置高
delay(8); //稍延时
DQ=0; //发送复位脉冲
delay(80); //延时(>480us)
DQ=1; //拉高数据线
delay(5); //等待(15~60us)
x=DQ; //用X 的值来判断初始化有没有成功,18B20 存在的话X=0,否则X=1
delay(20);
}
ReadOneChar(void) //主机数据线先从高拉至低电平1us 以上,再使数据线升
为高电平,从而产生读信号
{
UnRegistered
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必
须有1us 以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8 位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0; //数据线从高电平拉至低电平,产生写起始信号。15us
之内将所需写的位送到数据线上,
for(i=8;i>0;i--) //在15~60us 之间对数据线进行采样,如果是高电平就写
1,低写0 发生。
{
DQ=0; //在开始另一个写周期前必须有1us 以上的高电平恢复期。
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
delay(4);
}
void ReadTemperature(void)
{
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0x44); //启动温度转换
delay(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化
WriteOneChar(0xcc); //跳过读序列号的操作
WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
if(tempH>0x7f) //最高位为1 时温度是负
UnRegistered
{
tempL=~tempL; //补码转换,取反加一
tempH=~tempH+1;
fg=0; //读取温度为负时fg=0
}
sdata = tempL/16+tempH*16; //整数部分
xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位
xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
}
void Led(unsigned int date)
{
if(fg==1)
{
P2=0xf7; //P1.3=0,选通第四位,小数点第二位
P0=seg7code[date/10]; //十位数,查表,输出
delay1ms();
P0=0xff; //消影
P2=0xfb; //P1.3=0,选通第三位,小数点第一位
P0=seg7codeB[date%10];
delay1ms();
P0=0xff; //消影
P2=0xfd; //P1.1=0,选通第二位,个位数
P0=seg7code[xiaoshu1];
delay1ms();
P0=0xff; //消影
P2=0xfe; //P1.0=0,选通第一位
P0=seg7code[xiaoshu2];
delay1ms();
P0=0xff; //消影
}
if(fg==0) //温度为负时显示的数据
{
P2=0xfe; //P1.0=0,选通第一位
P0=seg7code[11]; //显示负号
delay1ms();
P0=0xff; //消影
P2=0xfd; //P1.1=0,选通第二位,十位数
P0=seg7code[date/10];
UnRegistered
delay1ms();
P0=0xff; //消影
P2=0xfb; //P1.3=0,选通第三位,个位数
P0=seg7codeB[date%10];
delay1ms();
P0=0xff; //消影
P2=0xf7; //P1.3=0,选通第四位,小数点第一位
P0=seg7code[xiaoshu1];
delay1ms();
P0=0xff; //消影
}
}
main()
{
while(1)
{
ReadTemperature();
Led(sdata);
}
}
13.4 下载验证
下载完成后,我们可以看到数码管显示温度了。说明DS18B20 开始工作了。
UnRegistered
第一十四章 红外遥控实验
上一章我们介绍了DS18B20,本章我们将学习红外遥控接收头。同样我们也需
要关注红外接收头的读1 或0 时序。本章分为如下几个部分:
14.1 红外接收头简介
14.2 硬件设计
14.3 软件设计
14.4 下载验证
UnRegistered
13.1 红外接收头简介
红外线接收头就是接收红外线的元件。红外线的光谱位于红色光之外, 波
长是0.76~1.5μm,比红光的波长还长。红外遥控是利用红外线进行传递信息
的一种控制方式,红外遥控具有抗干扰,电路简单,容易编码和解码,功耗小,
成本低的优点。红外遥控几乎适用所有家电的控制。
红外遥控时序图
上图是红外遥控接收头的基本时序,详细资料,请参考开发板的实验20(红外
遥控数码管显示实验)目录下的资料。
14.2 硬件设计
注意:记得短接J15,J10 跳线帽
14.3 软件设计
程序来自开发板的实验20(红外遥控解码数码管显示实验)
void main()
{
unsigned int a;
IRIN=1; //I/O 口初始化
IE=0x81; //允许总中断中断,使能 INT0 外部中断
TCON=TCON|0x01; //触发方式为脉冲负边沿触发
while(1)
{
for(a=100;a>0;a--)
{
display();
}
}
UnRegistered
}
void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
unsigned char q=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1;
return;
}
//确认IR 信号出现
while (!IRIN) //等IR 变为高电平,跳过9ms 的前导低电平信
号。
delay(1);
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8 位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms 的前
导高电平信号。
{delay(1);}
while (!IRIN) //等 IR 变为高电平
delay(1);
while (IRIN) //计算IR 高电平时长
{
delay(1);
N++;
if (N>=30)
{
EX0=1;
return;
} //0.14ms 计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if(N>=8)
{
IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补“1”
}
N=0;
}
UnRegistered
}
if(IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4 次,高四位变为低四位
if(IRCOM[5]>9)
{
IRCOM[5]=IRCOM[5]+0x37;
}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
{
IRCOM[6]=IRCOM[6]+0x37;
}
else
IRCOM[6]=IRCOM[6]+0x30;
q= (((IRCOM[6]&0x0f)<<4) + (IRCOM[5]&0x0f));
switch(q) //判断按键键码值
{
case 0x16:m=0;break; //串口发送0
case 0x03:m=1;break; //串口发送01
case 0x18:m=2;break; //串口发送02
case 0x55:m=3;break; //串口发送03
case 0x08:m=4;break; //串口发送04
case 0x13:m=5;break; //串口发送05
case 0x51:m=6;break; //串口发送06
case 0x42:m=7;break; //串口发送07
case 0x52:m=8;break; //串口发送08
case 0x41:m=9;break; //串口发送09
default :break;
}
UnRegistered
EX0 = 1;
}
14.4 下载验证
当我们在遥控器上按下0~9 这里面的任意一个数字时,数码管上面将会显示
我们按下的键值。
UnRegistered
第十五章 超声波测距模块
前一章,我们学习了红外遥控接收器。本章我们将学习超声波测距。当然和
前面的有点不同,本章将使用红外遥控模块来测距。这章的内容相比前章的内容,
就简单很多。本章分为如下几个部分:
15.1 超声波模块工作原理
15.2 硬件设计
15.3 软件设计
15.4 下载验证
UnRegistered
15.1 超声波模块工作原理
(1)采用IO 触发测距,给至少10us 的高电平信号;
(2)模块自动发送8 个40khz 的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO 输出一高电平,高电平持续的时间就是超声波从发射到
返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
关键点是对输入高电平的捕获。因为51 单片机没有相应的捕获功能,所以我们这里就使用
中断来计算高电平时间。
15.2 硬件设计
注意:短接J10 跳线帽(数码管)。接线:模块TRIG 接 P1.2 ECH0 接P1.1
15.3 软件设计
程序来自开发板的实验31(超声波测距数码管显示)
void delay1ms()
{
unsigned char i;
for(i=124;i>0;i--); //延时124*8+10=1002us
}
void Display(void) //扫描数码管
{
UnRegistered
P2=0xf7;
P0=discode[disbuff[0]]&0x7f;
delay1ms();
P0=0xff; //消影
P2=0xfb;
P0=discode[disbuff[1]];
delay1ms();
P0=0xff; //消影
P2=0xfd;
P0=discode[disbuff[2]];
delay1ms();
P0=0xff; //消影
}
Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=700)||flag==1) //超出测量范围显示“-”
{
flag=0;
disbuff[0]=10; //“-”
disbuff[1]=10; //“-”
disbuff[2]=10; //“-”
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
}
}
void zd0() interrupt 1 //T0 中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
void zd3() interrupt 3 //T1 中断用来扫描数码管和计800MS
启动模块
{
TH1=0xf8;
UnRegistered
TL1=0x30;
Display();
timer++;
if(timer>=400)
{
timer=0;
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
void main(void)
{
TMOD=0x11; //设T0 为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS 定时
TL1=0x30;
ET0=1; //允许T0 中断
ET1=1; //允许T1 中断
TR1=1; //开启定时器
EA=1; //开启总中断
while(1)
{
UnRegistered
while(!RX); //当RX 为零时等待
TR0=1; //开启计数
while(RX); //当RX 为1 计数并等待
TR0=0; //关闭计数
Conut(); //计算
}
}
15.4 下载验证
UnRegistered

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表