自动检测教学教案.docx
- 文档编号:9416820
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:102
- 大小:2.50MB
自动检测教学教案.docx
《自动检测教学教案.docx》由会员分享,可在线阅读,更多相关《自动检测教学教案.docx(102页珍藏版)》请在冰点文库上搜索。
自动检测教学教案
预备项目
如果同学们从来没有做过小项目,是很难下手开展应用项目的设计的。
为此设计了几个预备项目,用于提高同学们单片机设计的基本动手能力,为实施自动检测技术的应用项目设计打好基础。
如果单片机课程中开展过同类项目教学的,可以跳过预备项目或者选作部分项目。
预备项目1用单片机设计一个简易的自动检测系统
0任务和要求
请用单片机设计一个自动检测系统,具体要求如下:
1)有2个传感器输入接口
–一个用于输入电压,包括ADC、VCC和GND三个引脚。
–一个用于输入频率,包括Freq、VCC和GND三个引脚。
Freq可以接单片机的T1。
2)具有4位独立式按键接口,包括四根IO线和一根GND。
用于插接四个按键的小键盘。
3)两个LED数码管接口,用于驱动一个四联LED数码管。
两个接口包括12根线,分别是8根段码,4根位码。
通过修改程序,可以显示时钟、电压、温度、速度、距离等。
4)电路板上带一个LED电源指示灯
5)具有一个串口通讯接口,包括VCC、RXD、TXD、GND四根线。
下载程序时可用作ISP下载端口,正常工作时,可用于单片机与单片机、单片机与PC机的通讯,接上无线模块还可以实现无线通讯。
1.基本原理分析
1.1单片机简介
单片机又叫单片微型计算机,是采用超大规模集成电路技术把CPU、RAM、ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统。
常见的单片机有很多型号,外观如下图所示。
图1各种单片机的外观
芯片的显微图如下所示。
为了理解单片机的工作原理,我们绘制单片机的内部方框图如下:
图2单片机的显微图图3单片机的内部方框图
胡老师提示:
教材上花费大量的篇幅去讲解单片机的结构和原理,我们不设计芯片,也不需要对芯片的内部结构作过多了解,其实太详细地学习冗长的工作原理也没有用,反而让同学们产生疲劳。
重要的是如何快速学会用单片机设计电子产品。
1.2单片机的特点
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点。
因此广泛地应用于家用电器、工农业自动化控制、导弹自动跟踪、电子仪表等领域。
1.3.单片机的广泛应用
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
汽车上一般配备40多部单片机。
飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物、机器人、智能仪表、医疗器械等等,这些都离不开单片机。
举例如下:
单片机在电子仪表中的应用。
结合不同类型的传感器,可实现诸如电压、电流、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
单片机在自动化控制中的应用。
用单片机可以构成形式多样的控制系统、数据采集系统、通信系统、信号检测系统、无线感知系统、测控系统、机器人等应用控制系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
单片机在家用电器中的应用。
现在的家用电器广泛采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材。
2.方案论证
单片机选型:
常用的单片机有8051、STC、AVR、C8051F和凌阳单片机等。
我们选择STC12C5A,
是因为它与8051单片机完全兼容,还提供了ISP下载,无需编程器;同时具有8路ADC模拟电压采集电路,。
键盘选型:
单片机常用的键盘有独立式、矩阵式、ADC键盘。
因为按键较少,我们选择独立式。
显示器选型:
单片机常用的显示器有LED数码管、LCD1602、LCD128*64,为了降低成本,我们选择LED数码管作为数字显示。
3.电路设计
书上讲的单片机最小系统是指刚刚能使单片机工作的系统。
一般包括单片机、时钟振荡电路、复位电路三部分,但是这样的系统什么用也没有。
我们一般讲的最小系统是指最小应用系统,要增加一些别的接口,如图所示:
如键盘接口、显示接口、传感器接口、PWM和通讯接口等。
3.1STC单片机
设计单片机电路都是以单片机为核心的,我们可以不了解单片机内部结构,但是一定要了解单片机的引脚分布。
不同单片机引脚都有差异,一般来说8051系列单片机有40个引脚。
我们选用的STC12C5A单片机与8051兼容,引脚如下图所示。
图4STC单片机的引脚分布
从图中看出,包括2个电源脚(Vcc,GND)、2个时钟脚(XTAL1,XTAL2)和32个通用IO脚。
我们选用的STC单片机内部集成了复位电路,所以没有复位脚。
32个通用IO脚又分成4组,分别叫做P0、P1、P2和P3。
因为四个口都可以当做普通的输入输出端,所以英文叫Port,国人简称为P口。
P3还有一些特殊功能。
如P3.0和P3.1又是通讯口,P3.2和P3.3同时是外中断,P3.4和P3.5又是定时器。
特别地,STC单片机的P1口还可以当做ADC用来测量端口的直流电压。
3.2时钟振荡电路设计
因为单片机18和19脚内部有一个振荡放大电路,所以在18和19脚之间外接一个石英晶体就可以产生时钟振荡。
振荡频率由石英晶体的额定频率决定,一般采用12MH。
但是,为了设置精确的通讯波特率,我们选择11.0592MHZ的晶振。
为了确保可靠启振,再外加两个33pf的接地电容。
图5晶体振荡电路
3.3复位电路
一般的单片机需要外接电阻和电容构成复位电路,但是STC单片机内部已经集成了复位电路,可以不用。
为了增强可靠性,在芯片外加一个RC电路构成复位电路也可以。
3.4键盘电路设计
采用独立式按键设计四个按钮,都各自独占一根IO线,但是采用插接件与最小系统连接。
图6键盘电路
3.5显示接口设计
本系统打算采用四联共阳LED数码管。
3.5.1四联LED数码管的结构特征
四联共阳LED数码管包含四个数码管,每个数码管包括7段数字,加小数点共8段,简称8段数码管。
其内部电路如图7所示,每个数码管都有8个LED发光二极管管,每个二极管的N极作为1个段,8个二极管的P极连在一起,作为公共端。
四个数码管的所有相同的段都并接在一起,每个数字的公共端单独引出,共8个段和4个位,引出12根线。
图7四联数码管及其内部电路
3.5.2四联LED数码管的引脚测量
采用数字万用表的二极管测量档,任意测量2个脚,看到灯亮为一个LED发光管,此时红表笔所接的为阳极,黑表笔为阴极。
红表笔测量的阳极固定不动,用黑表笔探索出所有的阴极,并在草图上记下8个段的名称(a、b、c、d、e、f、g、h);然后再固定黑表笔在任何一个阴极不动,用红表笔探索剩下的四个阳极,同时观测阳极所代表的位数(分别是个、十、百、千)。
测量结果如图8所示。
图8
3.6.3LED数码管的驱动电路
根据LED数码管的结构分析,可以采用一个P口的8个输出端驱动段码,我们选择P0。
另外选择P2口的低四位控制数码管的4个位选。
为了便于大家理解,教材上按照8+4的方式设计电路,如下图所示:
上图用P0口驱动段码,P2口的低四位驱动位码。
其显示规律非常容易推导。
可是,实际上LED插头是6+6的,为了方便插头,并简化PCB电路设计,按照就近原则设计电路图如下:
由于没有按照教材的规律,数字码表必须重新计算。
3.7传感器接口设计
有许多传感器输出的信号为0~5V的直流电压,所以需要与ADC端口连接,因为STC单片机的P1口同时具备ADC的功能,所以设计传感器测量接口如下。
有部分传感器输出的是脉冲信号,我们需测量脉冲信号的频率,为此需将信号接入T0或T1。
图中Freq表示频率,采用网络标签的方式接到单片机的T0口。
3.8通讯接口兼ISP下载端口
STC单片机是采用通讯接口来下载程序的,无论项目是否需要通讯功能,都要设计通讯接口。
按芯片资料得知,P3.0和P3.1的特殊功能就是通讯,分别为RX和TX,加上GND和供电的Vcc,设计通讯接口如下:
上图中的通讯接口包括Vcc、Rxd、Txd和GND四根线。
注意,Vcc是为了利用USB对单片机供电。
4项目实施
4.1绘制原理图和PCB图
根据上述分析,某同学设计的最小系统电路原理图和PCB如下图所示。
注意:
1)标注作品名和作者名,2)尽量采用贴片元件或者改进的贴片,3)插座尽量靠近边沿
另一位同学采用更加简易的单片机系统设计了一个自动检测系统如下图所示,该电路省略了电源电路,可以采用USB供电;因为省略了三极管驱动,数码管亮度有限,需要设置强上拉。
4.2电路焊接和安装
实际制作时,考虑到小元件难以焊接,一般是先焊接小元件,然后安装体积大的元件,顺序如下:
•先焊接贴片电阻、电容、三极管、指示灯和晶振;
•后焊接DIP40和输入输出插座;
•最后安装芯片。
4.3硬件调试
焊接好的电路可能会有短路和虚焊,首先要排除短路和虚焊,然后再通电测试,可按以下几步开展调试:
•短路测试。
先测量Vcc与GND之间是否有显著的短路,如有短路就必须排除短路,才能插电源。
否则容易导致电脑的USB供电烧坏;然后还要测量线与线之间是否短路。
•通路测试。
参照原理图测量芯片引脚与插接件之间是否通电,如果有断路,可能导致电路
不能正常工作,但是一般不会烧坏芯片。
•电源测试。
先不插芯片,插上电源、测量所有的Vcc是否为+5V。
如果电源不正常或者反接,可能
会烧坏单片机芯片。
要检查单片机的Vcc与GND
•下载测试。
插上芯片和ISP后通电,下载一个LED测试程序,看能否正常下载。
如果不能正常下载,首先需要检查下载线接口,然后检查时钟和复位电路。
如果电路没有发现问题,还是不能下载,则需要考虑是否更换芯片。
•数码测试。
如果能下载程序,说明单片机能正常工作,接上LED数码管,看能否正常显示。
如果显示不正常,说明显示接口或数码管有问题(如果程序正确的话)。
5总结
采用单片机设计了一个最小应用系统,通过测试,该电路能正常下载和显示。
为后续的产品开发奠定了硬件基础。
预备项目2数码管段码测试程序设计
0任务和要求
已知单片机与LED数码管的显示电路如图1所示。
只知P0口驱动段码,P2口驱动位码,不知道具体连接。
为此需要设计一个段码测试程序,用于测试数码管的段与P0口对应的规律。
具体要求如下:
1)按照从低位到高位的顺序,每次只点亮数码管的1个段,显示1秒钟,就关闭0.5秒钟
2)到最高位以后,熄灭3秒钟,从新开始下一轮循环。
3)记录显示规律,根据显示规律,计算0-9的显示码表。
图1.单片机与数码管的接口电路
1.基本原理
1.1程序流程
经典的单片机的程序流程图如图2所示。
从图中可以看出,单片机程序一般包含初始化程序、主程序和中断程序三部分组成。
根据程序所处的位置,得知:
初始化程序的特点是:
每次上电只能执行一次;
主程序的特点是:
能够无穷循环,多次执行都可以。
中断程序的特点是:
没有发生条件事件不会触发,只要满足条件就立刻执行的程序。
1.2数码管的结构
本系统采用的数码管为8段共阳数码管。
其内部电路如下图所示,每个数码管都有8个LED发光二极管管,每个二极管的N极作为1个段,8个二极管的P极连在一起,作为公共端。
四个数码管的所有相同的段都并接在一起,每个数字的公共端单独引出,共8个段和4个位,引出12根线。
图3.数码管的内部电路
1.3驱动位方法
从图1可知,由于驱动位码的三极管为PNP,单片机输出低电平时,三极管导通,点亮对应的1个数码管。
则驱动一个位的方法如表1所示。
表1.数码管位码驱动规律(0有效,*表示高四位为无关位,可以当作1处理,也可以当0)
端口
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
代码
反码更直观
个位
*
*
*
*
1
1
1
0
0xfe
~1
十位
*
*
*
*
~2
百位
*
*
*
*
~4
千位
*
*
*
*
~8
从上表可以看出:
点亮个位数码管的指令为:
P2=;点亮十位数码管的指令为:
P2=;点亮百位数码管的指令为:
P2=;点亮千位数码管的指令为:
P2=;
根据同样的原理可以推知,4位数码管全点亮的指令为:
P2=0;4位数码管全熄灭的指令为:
P2=0xff;
1.4驱动某一段的方法
数码管的8个段引出8根线,直接跟单片机P0口的8个输出端连接。
要想点亮数码管的某1段,就通过P0口输出1个低电平。
共有8种可能,详细规律如表2所示。
表2.共数码管段码驱动1个段的规律(低电平有效)
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
码表
反码更直观
1
1
1
1
1
1
1
0
0xfe
~(1<<0)
1
1
1
1
1
1
0
1
Oxfd
~(1<<1)
1
1
1
1
1
0
1
1
Oxfb
~(1<<2)
1
1
1
1
0
1
1
1
Oxf7
~(1<<3)
1
1
1
0
1
1
1
1
Oxef
~(1<<4)
1
1
0
1
1
1
1
1
Oxdf
~(1<<5)
1
0
1
1
1
1
1
1
Oxbf
~(1<<6)
0
1
1
1
1
1
1
1
Ox7f
~(1<<7)
从上表可以看出,
点亮最低1段的指令为:
P0=;采用取反的方法可写为:
P0=;
点亮最高1段的指令为:
P0=;采用取反的方法可写为:
P0=;
采用变量x表示任意段,则程序可以写为:
P0=;
1.5驱动LED显示数字的一般规律
如下图所示,教材上的数码管驱动电路是按从低到高的顺序将abcdefgh连接到P0口上的,所以可以按照表3来推导显示码表。
图4标准的数码管与单片机接口电路
表3.按照教材设计的数码管电路的显示规律(注意:
共阳的数码管0有效,共阴数码管1有效)
端口
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
码表
8421
8
4
2
1
8
4
2
1
对应段
h
G
F
E
D
C
B
A
数字0
0x3c
数字1
数字2
数字3
数字4
数字5
数字6
看起来显示指令中的代码与要显示的数字毫无规律,对于这种情况,可定义1个1维数组来检索,
unsignedchartable[10]={0xC0,,,,,,,,,}
如果要显示一个数,在可以采用查表法将显示内容送到端口,例如:
如需要显示1,则程序为P0=table[1];
如需要显示x,则程序为P0=;//注意x<10.
备注:
因为LED的引脚并不是按a-b-c的顺序排列的。
为了简化电路板的设计,我们自己设计的LED驱动电路采取了就近接线的方法,与教材不同,所以不能参考教材上现成的码表,因此需要自己写一个程序来测试LED显示规律。
通过观察显示规律,再计算码表。
3程序设计步骤
要测试LED数码管与单片机P0口的连接,可采用Keil设计一个C程序,控制单片机的P2口全打开,同时在P0口按从低到高的顺序输出低电平,就可以通过观测数码管的显示规律来确定数码管的连接。
3.1建立工程
编写程序代码之前一定要做好以下几件事情。
1)新建文件夹。
新建一个用于存放整个项目文件的文件夹,可以用中文段码测试程序。
同时在项目文件夹内部添加三个文件夹,分别是output、List和source。
然后将源程序放在source;将编译器自动产生的列表文件放在List;将编译器产生的目标代码存放在output。
2)创建工程。
打开Keil,创建1个工程,保存在新建的“段码测试程序”文件夹,项目名称为seg_test。
3)创建文件。
新建1个文件,一般来说,第一个主文件保存时最好命名为main.c
4)将main.c添加到工程中。
3.2绘制程序流程,构建程序框架
本程序仅用于测试P0口与数码管的连接关系,没有初始化,也没有中断程序。
根据任务要求,设计主程序流程和对应的程序代码如下图所示:
图5程序流程和对应的代码
根基单片机C语言程序设计的基础,代码主要包含以下内容:
1)main函数
main函数就是指主函数。
主函数的结构可以与程序流程一一对应。
主函数具有以下特点:
a)每一个单片机项目中,有且只有1个主函数。
b)主函数可以调用别的程序,但是任何程序不能调用主函数。
c)主函数是没有参数也没有返回值,
d)主函数是所有程序的开始,也就是说,初始化程序必须在main函数中首先调用
e)主函数中必须有一个无条件的循环,也只能有一个无条件的循环。
用于调用主程序。
根据模块化程序设计的基本原则,主程序只能调用子函数,不可以在主程序中直接写代码。
要想实现具体的功能,可以在无穷循环内调用相关的子函数。
2)程序标签。
这部分代码是给程序员自己看的,没有运行代码,可以不写,但是优秀的程序员一定会认真注解,举例如下
3)包含头文件。
头文件详细描述了51单片机的硬件地址,我们不需要记住,只要包含就可以。
Keil中没有STC单片机的头文件,可以借用兼容的51单片机头文件代替,也可以从STC的官方网站下载一个STC12C5A.H。
包含头文件的代码如下:
#include
4)变量定义和函数定义。
(开始可以空着,什么时候需要,什么时候补充)
编译程序会发现,在main函数中调用了一个不存在的子函数,编译器找不到函数原型,会发出错误提示:
表示:
在main函数中调用的任何子函数,都需要在main函数之前定义一个子函数。
5)补充子函数定义
函数定义一般在宏定义之后和main函数之前,补充一个空白的segment_test()子函数之后,完整的代码如下:
到此为止,程序框架已经建成。
框架程序完成以后要编译是否出错,编译测试应该是0错误,0警告。
但是框架程序没有任何功能,不用下载到单片机。
3.3绘制子程序的流程,编写相关的函数
3.3.1编写segment_test函数
子函数segment_test()的作用是逐个循环点亮数码管的段。
其实就是控制P0口循环输出低电平。
为了同时测量所有的数码管,P2口输出低电平。
其程序流程和程序代码如下:
voidsegment_test(void)
{
}
由于调用了一个不存在的函数,编译时会发现错误提示:
为此还在还需要在segmenttest(void)之前要定义并编写一个延时子函数。
3.3.2编写delay函数
如果单片机采用12M的晶振,则每个机器周期需要的时间是1us。
也就是说每运行一个简单的指令需要的时间是1us。
为此我们可以用运行空指令的方法延时。
为了延时1ms,可以设计一个1000次的循环,循环体内执行空指令。
为了使延时参数可变,可以设计一个带形式参数的子函数。
调用时加入实际参数,可以改变延时的长度。
设计代码如下:
3.4编译和调试程序
整个项目的程序代码如下(程序前的注解略):
编译程序,编译器会及时提示错误所在,双击第一个错误提示,光标会自动定位。
常见的错误有:
表示括号附近有语法错误。
4.试验观测数码管显示规律
将程序下载到单片机,观测显示规律,将显示规律的代码填入下表,按照8421码的规律计算码表(特别注意:
低电平有效,就是0亮灯,1灭灯.)
表3.自己设计的LED驱动电路段码表
P0口
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
P0.1
P0.0
码表
BCD码
8
4
2
1
8
4
2
1
显示规律
数字“0”
数字“1”
数字“2”
数字“3”
数字“4”
数字“5”
数字“6”
数字“7”
数字“8”
数字“9”
根据上表,可将码表用C语言的数组表示为
Led_table[]={,,,,,,,,,}
6.总结
本项目分析了单片机与4位数码管接口电路,设计了1个用于8段LED数码管的测试程序。
该单片机程序控制P0口按从低到高的规律逐一输出低电平,使得数码管的段逐一点亮。
观测LED数码管的显示规律,并根据显示规律按16进制,计算出出数码管的显示码表。
以后在应用程序中,我们就可以采用查表的方法显示数字了。
本程序只能测试段码,不知道位码的规律,还需要设计一个位码测试程序。
简易参照本程序设计一个8子循环的程序,按从低位到高位的顺序循环点亮数码管的1位。
找出显示规律,为设计数码管显示程序奠定基础。
课堂练习:
练习段码程序的设计,要求在5分钟内完成。
编写程序时务必养成以下良好习惯:
1)程序正文之前一定要加标签注解。
说明程序名、程序功能作用、程序端口设置等。
2)变量定义放在宏定义之后,函数定义之前。
3)被调用的子程序(函数)必须在主程序(函数)之前定义,这样就可以无需额外声明。
4)变量和函数名称都一定要采用英文命名,最好采用两段式命名,表达真实的目的,
如定时器初始化程序定义为timer_init(void);
5)每一行指令都要100%的注释,便于多年以后你自己可以看懂程序。
6)严格按照程序流程编写程序代码,写出的程序不能与程序流程无关。
预备项目3数字码表测试程序设计
0任务和要求
通过前面设计的段码测
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动检测 教学 教案