4.Proteus仿真

Download Report

Transcript 4.Proteus仿真

课程设计题目
1
目录----课程设计题目
题目1
智能电子钟(LCD显示)
题目2
电子时钟(LCD显示)
题目3
秒表
题目4
定时闹钟
题目5
音乐倒数计数器
题目6
基于数字温度传感器的数字温度计
题目7
基于热敏电阻的数字温度计
题目8
十字路口交通灯控制
题目9
波形发生器设计
题目10
电容、电阻参数单片机测试系统的设计
2
题目11
数字频率计
题目12
8位竞赛抢答器的设计
题目13
单词记忆测试器程序设计
题目14
数字电压表设计
题目15
可编程作息时间控制器设计
题目16
节日彩灯控制器的设计
题目17
双机之间的串行通信设计
题目18
电子琴设计
题目19
数字音乐盒的设计
题目20
单片机控制步进电机
题目21
单片机控制直流电动机
3
题目1
智能电子钟(LCD显示)
1. 设计要求
以AT89C51单片机为核心,制作一个LCD显示的智能电子钟:
(1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 五路定时输出,可任意关断(最大可到16路)。
(4) 时间、月、日交替显示。
(5) 自定任意时刻自动开/关屏。
(6) 计时精度:误差≤1秒/月(具有微调设置)。
4
(7) 键盘采用动态扫描方式查询。所有的查询、设置功能均
由功能键K1、K2完成。
2. 工作原理
本设计采用市场上流行的时钟芯片DS1302进行制作。DS1302
是DALLAS公司推出的涓流充电时钟芯片,内含一个实时
时钟/日历和31字节静态RAM,可以通过串行接口与计算
机进行通信,使得管脚数量减少。实时时钟/日历电路能
够计算2100年之前的秒、分、时、日、星期、月、年的
,具有闰年调整的能力。
DS1302时钟芯片的主要功能特性:
5
(1) 能计算2100年之前的年、月、日、星期、时、分、秒的
信息;每月的天数和闰年的天数可自动调整;时钟可设置
为24或12小时格式。
(2) 31B的8位暂存数据存储RAM。
(3) 串行I/O口方式使得引脚数量最少。
(4) DS1302与单片机之间能简单地采用同步串行的方式进行
通信,仅需3根线。
(5) 宽范围工作电压2.0-5.5V。
(6) 工作电流为2.0A时,小于300nA。
(7) 功耗很低,保持数据和时钟信息时功率小于1mW。
6
3. 电路设计(Proteus软件仿真通过)
7
4. Proteus仿真
打开元器件单片机属性窗口,在“Program File”栏中添加上
面编译好的目标代码文件“keil-1.hex”;在“Clock
Frequency”栏中输入晶振频率为11.0592MHz。
仿真如下页图所示,其中,浮动窗口中显示的为DS1302当前时
钟状态:
8
图
智能电子钟仿真效果
9
题目2
电子时钟(LCD显示)
1. 设计要求
以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时
间:
使用字符型LCD显示器显示当前时间。
显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间。功能键K1~K4功能如下。

K1—进入设置现在的时间。

K2—设置小时。
10

K3—设置分钟。

K4—确认完成设置。
程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显
示“00:00:00”,然后开始计时。
2. 实验原理
题目难点在于键盘的指令输入,由于每个按键都具有相应的
一种或多种功能,程序中需要大量使用do{}while或
while{}循环结构,以检测是否有按键按下。按键检测函数
的详解如下(略)
11
3. 参考电路(Proteus软件仿真通过)
12
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-2.hex”;在“Clock Frequency”栏中输入晶振频
率为11.0592MHz。
启动仿真,按下按键1后,可发现LED停止闪烁,即时钟停止
走时,时钟停在当前时刻,按下按键2和按键3后,可改变
时间,按下按键4后,时钟复位到修改后的时间,时钟重
新开始运转,如下页图所示。
13
14
题目3
秒表
1. 设计要求
用AT89C51设计一个2位的LED数码显示作为“秒表”:显示
时间为00—99秒,每秒自动加1,另设计一个“开始”键
和一个“复位”键。
2. 实验原理
题目难点在于通过对键盘的扫描对时钟的走时/停止进行控
制,项目采用定时器T0作为计时器,每10ms发生一次中断
,每100次中断加1s。在此期间,如“开始”按键按下,
程序方将TR0置为1,从而开启中断,时钟开始走时;如“
15
复位”按键按下,程序将TR0置为0,同时将存储时间的变
量清零,从而中断停止,并实现复位。
本题目采用专用数码管显示控制芯片MAX7219。MAX7219是
美国MAXIM公司生产的串行输入/输出共阴极显示驱动器,
该芯片最多可驱动8位7段数字LED显示器或个LED和条形
图显示器。其引脚图及引脚功能参见有关参考资料。
16
MAX7219的典型应用参考电路
17
3. 电路设计(Proteus软件仿真通过)
18
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-2.hex”;在“Clock Frequency”栏中输入晶振频率
为11.0592MHz。
启动仿真,按下按键1后,可发现led停止闪烁,即时钟停止
走时,时钟停在当前时刻,按下按键2和按键3后,可改变
时间,按下按键4后,时钟复位到修改后的时间,时钟重新
开始运转,如下页图所示。
19
20
题目4
定时闹钟
1. 设计要求
使用AT89C51单片机结合字符型LCD显示器设计一个简易的定
时闹钟LCD时钟,若LCD选择有背光显示的模块,在夜晚
或黑暗的场合中也可使用。
定时闹钟的基本功能如下:

显示格式为“时时:分分”。

由LED闪动来做秒计数表示。

一旦时间到则发出声响,同时继电器启动,可以扩充控
制家电开启和关闭。
21

程序执行后工作指示灯LED闪动,表示程序开始执行,LCD
显示“00:00”,按下操作键K1~K4动作如下:
(1) K1—设置现在的时间。
(2) K2—显示闹钟设置的时间。
(3) K3—设置闹铃的时间。
(4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发
出“哗”的一声,设置为OFF发出“哗”的一声。
设置当前时间或闹铃时间如下。
(1) K1—时调整。
(2) K2—分调整。
22
(3) K3—设置完成。
(4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止
声响。
本项目的难点在于4个按键每个都具有两个功能,以最终实现
菜单化的输入功能。采用通过逐层嵌套的循环扫描,实现
嵌套式的键盘输入。以对小时的设置的流程为例,其流程
如下页图。
23
24
2. 参考电路(Proteus软件仿真通过)
25
3. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-3.hex”;在“Clock Frequency”栏中输入晶振频
率为12MHz。
启动仿真,下页图示为按下“开始”按键后的情况,在按下
前,数码管无显示。期间如果按下“复位”按键,则LED
显示归零,走时停止。
26
27
题目5
音乐倒数计数器
1. 设计要求
利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数
计数器,可用来煮方便面、煮开水或小睡片刻等。做一小
段时间倒计数,当倒计数为0时,则发出一段音乐声响,通
知倒计数终了,该做应当做的事。
定时闹钟的基本功能如下。

字符型LCD(16  2)显示器。

显示格式为“TIME 分分:秒秒”。
28
用4个按键操作来设置当前想要倒计数的时间。一旦按下键
则开始倒计数,当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操
作键K1~K4动作如下。
K1—可调整倒计数的时间1~60分钟。
K2—设置倒计数的时间为5分钟,显示“0500”。
K3—设置倒计数的时间为10分钟,显示“1000”。
K4—设置倒计数的时间为20分钟,显示“2000”。
复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键
,
29
则在LCD上显示出设置画面。此时,若:
a. 按操作键K2—增加倒计数的时间1分钟。
b. 按操作键K3—减少倒计数的时间1分钟。
c. 按操作键K4—设置完成。
键盘实现菜单功能的方法,已在题目4详细说明,不再赘
述。本题目最大难点是实现音乐的播放。作者利用定时计数
器,通过载入不同的计数初值,产生频率不同的方波,输入
到蜂鸣器(SOUNER)中,使其发出频率不同的声音。本设计
中单片机晶振为1.0592MHz,通过计算各音阶频率,可得1、2、
3、4、5、6、7共7个音应赋给定时器的初值为64580、64684、
64777、64820、64898、64968、65030。
30
在此基础上,可将乐曲的简谱转化为单片机可以“识别”的
“数组谱”,进一步加入对音长、休止符等的控制量后,
可以实现音乐的播放。
3.电路设计(Proteus仿真通过)
本题目制作的带有LCD显示的音乐倒数计数器电路原理图,如
下页图所示。
31
32
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-5.hex”;在“Clock Frequency”栏中输入晶振频率
为11.0592MHz。
启动仿真如下页图所示,当闹钟到达时,可以听见蜂鸣器演
奏的乐曲。再次提示,本题目必须选用蜂鸣器SOUNDER,否
则不能发出声音。
33
34
题目6
基于数字温度传感器的数字温度计
1. 设计要求
利用数字温度传感器DS18B20与单片机结合来测量温度。利
用数字温度传感器DS18B20测量温度信号,计算后在LED数
码管上显示相应的温度值。其温度测量范围为−55℃~
125℃,精确到0.5℃。数字温度计所测量的温度采用数字
显示,控制器使用单片机AT89C51,测温传感器使用
DS18B20,用3位共阳极LED数码管以串口传送数据,实现
温度显示。
35
2. 实验原理
从温度传感器DS18B20可以很容易直接读取被测温度值,进
行转换即满足设计要求。
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一
种改进型智能温度传感器,与传统的热敏电阻等测温元件
相比,它能直接读出被测温度,并且可根据实际要求通过
简单的编程实现9~12位的数字读数方式。
DS18B20的性能如下。

独特的单线接口仅需要一个端口引脚进行通信。

多个DS18B20可以并联在串行传输的数据线上,实现多点
组网功能。无须外部器件。
36

可通过数据线供电,电压范围为3.0~5.5V。

零待机功耗。

温度以9或12位的数字读数方式。

用户可定义报警设置。

报警搜索命令识别并标志超过程序限定温度(温度报警条件
)的器件。

负电压特性,电源极性接反时,温度计不会因发热而烧毁,
但不能正常工作。

采用3引脚PR-35封装或8引脚SOIC封装。
37
3.电路设计(Proteus仿真通过)
本项目制作的数字温度计电路原理图,如下所示:
38
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-6.hex”;在“Clock Frequency”栏中输入晶振频率为
11.0592MHz。
启动仿真如下页图所示,其中,DS18B20窗口显示的为
当前环境温度,若调整DS18B20旁边的箭头,可改变环境温度
,可以看到LED显示屏上的温度值发生相应的变化。
39
40
题目7
基于热敏电阻的数字温度计
1. 设计要求
使用热敏电阻类的温度传感器件利用其感温效应,将随被测温
度变化的电压或电流用单片机采集下来,将被测温度在显示
器上显示出来:

测量温度范围−50℃~110℃。

精度误差小于0.5℃。

LED数码直读显示。
41
2 . 实验原理
本题目使用铂热电阻PT100,其阻值会随着温度的变化而改变
。PT后的100即表示它在0℃时阻值为100欧姆,在100℃时它
的阻值约为138.5欧姆。厂家提供有PT100在各温度下电阻值
值的分度表,在此可以近似取电阻变化率为 0.385Ω/℃。
向PT100输入稳恒电流,再通过A/D转换后测PT100两端电压
,即得到PT100的电阻值,进而算出当前的温度值。
采用2.55mA的电流源对PT100进行供电,然后用运算放大器
LM324搭建的同相放大电路将其电压信号放大10倍后输入到
AD0804中。利用电阻变化率0.385Ω/℃的特性,计算出当前
温度值。
42
3.电路设计(Proteus仿真通过)
43
4. Proteus仿真
首先加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-7.hex”;在“Clock Frequency”栏中输入晶振频
率为12MHz。
启动仿真如图所示,其中,PT100旁边的数字窗口显示的为
测定的环境温度,通过调整上下温度,可以实现对环境温
度的改变。值得注意的是,由于本项目使用的核心测温器
件PT100对温度存在一定的响应时间,故启动程序后一段
时间测定的温度才能稳定下来。
44
本题目测温误差主要由以下几点引发:
ADC0804为8位ADC芯片,精度有限;程序假定PT100为完全线性
的器件,而即使是厂家推荐的线性值也会存在一定误差;运
放电路并非绝对线性。如使用12位ADC芯片,采用“四线制
”的PT100接法,采用查表法测定温度值,将极大提高温度
的测量精度。
45
46
题目8
十字路口交通灯控制
1. 设计要求
设计一个十字路口交通灯控制器。用单片机控制LED灯模
拟指示。模拟东西方向的十字路口交通信号控制情况。东西
向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。
2. 实验原理
本项目为典型的LED显示和中断定时电路。利用定时器T0
产生每10ms一次的中断,每100次中断为1s。对两个方向分
别显示红、绿、黄灯,已经相应的剩余时间即可。值得注意
的
47
是,需要意识到,A方向红灯时间=B方向绿灯时间+黄灯缓冲
时间这一常识。
本项目使用的MAX7219芯片使用方法请参考题目3。
3.电路设计(Proteus仿真通过)
本项目制作的十字路口交通灯控制电路原理图,如下页图:
48
49
4.Proteus仿真
50
题目9
波形发生器设计
1. 设计要求
设计一个能产生正弦波、方波、三角波、梯形波、锯齿
波的波形发生器。
2. 实验原理
产生指定波形可以通过DAC来实现,不同波形产生实质
上是对输出的二进制数字量进行相应改变来实现的。本题目
中,方波信号是利用定时器中断产生的,每次中断时,将输
出的信号按位反即可;三角波信号是将输出的二进制数字信
号依次加1,达到0xff时依次减1,并实时将数字信号经D/A
转换得到;锯齿波信号是将输出的二进制数字信号依次
51
加1,达到0xff时置为0x00,并实时将数字信号经D/A转换得
到的;
梯形波是将输出的二进制数字信号依次加1,达到0xff时
保持一段时间,然后依次减1直至0x00,并实时将数字信号经
D/A转换得到的;
正弦波是利用MATLAB将正弦曲线均匀取样后,得到等间隔
时刻的y方向上的二进制数值,然后依次输出后经D/A转换得
到。
3.电路设计(Proteus仿真通过)
本波形发生器的设计电路原理图,如下页图所示:
52
53
题目10
电容、电阻参数单片机测试系统的设计
1. 设计要求
设计一个能测量电容、电阻参数的测试系统。
2 实验原理
对电阻的测量,可将待测电阻与一标准电阻串联后接在
+5V的电源上,根据串联分压原理,利用ADC测定电阻两端电
压后,即可得到其阻值。对电容的测量,可将其与已知阻值
的电阻RA和RB组成基于NE555的多谐振荡器如下页图。其产
生的方波信号频率为 :
、
1.44
f
C(R A  2R B )
54
55
故通过测定方波信号的频率可以比较精确的测定C的值。测定方
波信号频率的方法,请见题目11。
3. 电路设计( Proteus仿真通过)
本题目的电容、电阻参数单片机测试系统的设计电路原理图,见
下页。
56
57
4. Proteus仿真
测量电阻仿真如下图所示,但由于Proteus中555芯片模
型存在问题,无法实现对电容测量的仿真,且仿真时必须删
去555的电路模块。
58
题目11
数字频率计
1. 设计要求
设计一个以单片机为核心的频率测量装置。使用AT89C51单
片机的定时器/计数器的定时和计数功能,外部扩展6
位LED数码管,要求累计每秒进入单片机的外部脉冲个
数,用LED数码管显示出来。
(1)被测频率fx<110Hz,采用测周法,显示频率×××.
×××;fx>110Hz,采用测频法,显示频率
××××××。
(2)利用键盘分段测量和自动分段测量。
59
(3)完成单脉冲测量,输入脉冲宽度范围是100s~0.1s。
(4)显示脉冲宽度要求如下。
Tx<1000s,显示脉冲宽度×××。
Tx>1000s,显示脉冲宽度××××。
2. 实验原理
测量频率有测频法和测周法两种。
(1)测频法,利用外部电平变化引发的外部中断,测算1s内
的波数,从而实现对频率的测定;
(2)测周法,通过测算某两次电平变化引发的中断之间的时
间,实现对频率的测定。简而言之,测频法是直接根据定义测
定频率,测周法是通过测定周期间接测定频率。
60
理论上,测频法适用于较高频率的测量,测周法适用于较
低频 率的测量。
经过调校,在测量低频信号时,本项目中测频法精度已高
于测 周法,故舍弃测周法,全量程采用测频法。
3. 电路设计( Proteus仿真通过)
以单片机为核心的频率计电路原理图,如下页图所示:
61
62
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-16.hex”;在“Clock Frequency”栏中输入晶振频率
为12MHz。
启动仿真如后两页图(a)和图(b)所示:
63
图(a) 仿真1
64
图(b) 仿真2
65
题目12
8位竞赛抢答器的设计
1.设计要求
以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手
或8个代表队比赛,分别用8个按钮S0~S7表示。
设置一个系统清除和抢答控制开关S,开关由主持人控制。
抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号
,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
抢答器具有定时抢答功能,且一次抢答的时间由主持人设定
(如30秒)。
66
当主持人启动“开始”键后,定时器进行减计时,同时
扬声器发出短暂的声响,声响持续的时间为0.5s左右。
参赛选手在设定的时间内进行抢答,抢答有效,定时器
停止工作,显示器上显示选手的编号和抢答的时间,并保持
到主持人将系统清除为止。
如果定时时间已到,无人抢答,本次抢答无效,系统报
警并禁止抢答,定时显示器上显示00。
2. 实验原理
通过键盘改变抢答的时间,原理与闹钟时间的设定相同
,将定时时间的变量置为全局变量后,通过键盘扫描程序使
每按下一次按键,时间加1(超过30时置0)。同时单片机
67
不断进行按键扫描,当参赛选手的按键按下时,用于产生时
钟信号的定时计数器停止计数,同时将选手编号(按键号
)和抢答时间分别显示在LED上。
3. 电路设计(Proteus仿真通过)
8位竞赛抢答器的设计电路原理图,如下页图所示:
68
69
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-19.hex”;在“Clock Frequency”栏中输入晶振频率
为12MHz。仿真:单击按钮,启动仿真,结果如下页图所示:
70
71
题目13
单词记忆测试器程序设计
1. 设计要求
设计一个以单片机为核心的单词记忆测试器:
实现单词的录入(为使程序具有可演示性,单词不少于
10个)。
单词用按键控制依次在屏幕上显示,按键选择认识还是
不认识,也可以直接进入下一个或者上一个。
单词背完后给出正确率。
2. 实验原理
本题目实质上是一个具有一定复杂程度键盘扫描程序,可
72
将单词存储在一个二维数组中,按“确定”键开始程序后,次
显示0行的数组,即第一个单词。之后按下“向上”按键,显
示上一行数组,即上一个单词;
按下“向下”按键,显示下一行数组,即下一个单词。当
显示的行数超过9时,程序结束,并通过按“确认”的次数,
计算出正确率。
3.电路设计(Proteus仿真通过)
本项目制作的单词记忆测试器程序设计电路如下页图所示
。
73
74
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件“keil18.hex”;在“Clock Frequency”栏中输入晶振频率为
11.0592MHz。
启动仿真如下页图 (a)-(c)所示:
75
图(a) 单词记忆测试器程序设计启动界面仿真效果图
图(b) 单词记忆测试器程序设计测试界面仿真效果图
图(c) 单词记忆测试器程序设计正确率显示界面仿真效果
76
题目14
数字电压表设计
1. 设计要求
以单片机为核心,设计一个数字电压表。采用中断方式,对
2路0~5V的模拟电压进行循环采集,采集的数据送LED显示,并
存入内存。超过界限时指示灯闪烁。
2. 实验原理
本题目本质上是以单片机为控制器,ADC0809为ADC器件的AD
转换电路,设计要求的电压显示,是对ADC采集所得信号的进一
步处理。
为得到可读的电压值,需根据ADC的原理,对采集所得的
77
信号进行计算,并显示在LED上。本项目中ADC0809的参考电压为
+5V,根据定义,采集所得的二进制信号addata所指代的电压值
为:
addata
5 V
256
而若将其显示到小数点后两位,不考虑小数点的存在(将其乘以
100),其计算的数值为:
addata 100
 5 V  addata 1.96 V
256
。将小数点显示在第二位数码管上,即为实际的电压。
78
本示例程序将1.25 V和2.5 V作为两路输入的报警值,反映在
二进制数字上,分别为0x40和0x80。当AD结果超过这一数
值时,将会出现二极管闪烁和蜂鸣器发声。
3. 电路设计(Proteus仿真通过)
本单片机数字电压表电路原理图,如下页图所示:
79
80
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“xxxxx.hex";在“Clock Frequency”栏中输入晶振频率为
12MHz。ADC0809的时钟信号设置为640kHz。
启动仿真,如下页图所示,当调节滑动变阻器时,可观察
到显示的电压发生变化,且两路输入电压的测算值交替显示.
。当任一路电压输入超过预设值时,LED显示器闪烁,蜂鸣器
发声。由于8位AD芯片精度有限,其误差大约在几十mV左右。
81
82
题目15
可编程作息时间控制器设计
1. 设计要求
设计一个以单片机为核心的可编程作息时间控制器:
按照给定的时间模拟控制,实现广播、上下课打铃、灯光控
制(屏幕显示),同时具备日期和时钟显示。
2. 实验原理
本题目原理与题目4相同,程序是在题目4的基础上将定
时闹钟改造为4路可调闹钟,从而实现打铃等功能。当四路
闹钟中的任一路到时,均会点亮灯、打铃。如有需求,可对
83
程序进行调整,增加闹钟的路数,及到时后的处理方式。
题目中4个按键的功能分别为:设置限制的时间/时的调
整、显示闹钟设置的时间/分的调整、设置闹钟的时间/设置
完成、闹钟更换。
3. 电路设计(Proteus仿真通过)
本可编程作息时间控制器程序设计电路原理图,如下页
图所示:
84
85
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-17.hex”;在“Clock Frequency”栏中输入晶振频率
为11.0592MHz。
启动仿真如下页图所示,当四路闹钟中的任一路到时,
均会点亮灯、打铃。
86
87
题目16
节日彩灯控制器的设计
1. 设计要求
以单片机为核心,设计一个节日彩灯控制器:
P1.2—开始,按此键则灯开始流动(由上而下)。
P1.3—停止,按此键则停止流动,所有灯为暗。
P1.4—上,按此键则灯由上向下流动。
P1.5—下,按此键则灯由下向上流动。
2. 实验原理
本题目本质上是由按键控制功能的流水灯,LED工作的方
式通过键盘的扫描实现。其中的LED采取共阳极接法,通过
88
依次向连接LED的I/O口送出低电平,可实现题目要求的功
能。
3. 电路设计(Proteus仿真通过)
本节日彩灯控制器电路原理图,如下页图所示,各按键
功能与实验设计要求相同:
89
90
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件“keil1.hex”;在“Clock Frequency”栏中输入晶振频率为12MHz。
启动仿真如下页图所示:
91
92
题目17
双机之间的串行通信设计
1. 设计要求
两片单片机利用串行口进行串行通信:串行通信的波特率
可从键盘进行设定,可选的波特率为1200、2400、4800和
9600bit/s。串行口工作方式为方式1的全双工串行通信。
2. 实验原理
两个单片机之间进行通讯波特率的设定,最终归结到对定
时计数器T1计数初值TH1、TL1进行设定。故本题目本质上是
通过键盘扫描得到设定的波特率,从而载入相应的T1计数初
值TH1、TL1实现的。示例程序中将0xaa从主机传输到从机,
93
并显示在从机的数码管上实现串口通讯的验证。
如串口通讯线路过长,可考虑采用MAX232进行电平转换,以
延长传输距离。值得注意的是,为了减少计算载入初值时的误差
,本项目最好采取11.0592MHz的晶振。
3. 电路设计(Proteus仿真通过)
两个单片机之间的串行通信接口设计电路原理图,如下页图
所示:
94
95
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“master.hex”或"slave.hex";在“Clock Frequency”栏中
输入晶振频率为11.0592MHz。
启动仿真如下页图所示,当二极管间隔点亮时,表明通讯
成功:
96
97
题目18
电子琴设计
1. 设计要求
设计一个电子琴。利用所给键盘的1,2,3,4,5,6,7
,8八个键,能够发出8个不同的音调,并且要求按下按键发
声,松开延时一段时间停止,中间再按别的键则发另一音调
的声音。
2. 实验原理
当系统扫描到键盘上有键被按下,则快速检测出是哪一
个键被按下,然后单片机的定时器被启动,发出一定频率的
脉冲,该频率的脉冲输入到蜂鸣器后,就会发出相应的音调
。
98
如果在前一个按下的键发声的同时有另一个键被按下,
则启用中断系统,前面键的发音停止,转到后按的键的发音
程序,发出后按的键的音调。关于发声原理,参见题目5。
3. 电路设计(Proteus仿真通过)
本电子琴设计电路原理图,如下页图所示:
99
100
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-23.hex”;在“Clock Frequency”栏中输入晶振频率
为11.0592MHz。
启动仿真如下页图所示,依次按下各按键可听见不同的
音阶:
101
102
题目19
数字音乐盒的设计
1. 设计要求
以单片机为核心,设计一个数字音乐盒:
利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同
的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。
采用LCD显示信息。
a.
开机时有英文欢迎提示字符,播放时显示歌曲序号
(或名称)。
b.
可通过功能键选择乐曲、暂停、播放。
103
2. 电路设计(Proteus仿真通过)
本数字音乐盒的电路设计原理图,如下图所示。
104
3. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-24.hex”;在“Clock Frequency”栏中输入晶振频率
为11.0592MHz。
启动仿真如下页图所示,其中,液晶显示器显示的为当
前乐曲等信息,同时可听见音乐的播放声
105
数字音乐盒的设计仿真液晶显示效果图
106
题目20
单片机控制步进电机
1. 设计要求
采用单片机控制一个三相单三拍的步进电机工作。步进
电机的旋转方向由正反转控制信号控制。步进电机的步数由
键盘输入,可输入的步数分别为3、6、9、12、15、18、21
、24和27步,且键盘具有键盘锁功能,当键盘上锁时,步进
电机不接受输入步数,也不会运转。只有当键盘锁打开并输
入步数时,步进电机才开始工作。
电机运转的时候有正转和反转指示灯指示。
电机在运转过程中,如果过热,则电机停止运转,同时
107
红色指示灯亮,同时警报响。本题目的关键之处是:如何生成
控制步进电机的脉冲序列。
2. 实验原理
步进电机的不同驱动方式,都是在工作时,脉冲信号按一
定顺序轮流加到三相绕组上,从而实现不同的工作状态。由于
通电顺序不同,其运行方式有三相单三相拍、三相双三拍和三
相单、双六拍三种(注意:上面“三相单三拍”中的“三相”
指定子有三相绕组;“拍”是指定子绕组改变一次通电方式;
“三拍”表示通电三次完成一个循环。“三相双三拍”中的“
双”是指同时有两相绕组通电)。
108
(1)三相单三拍运行方式:下页图所示为反应式步进电动
机工作原理图,若通过脉冲分配器输出的第一个脉冲使A相
绕组通电,B,C相绕组不通电,在A相绕组通电后产生的磁场
将使转子 上产生反应转矩,转子的1、3齿将与定子磁极对
齐,如果图(a)所示。第二个脉冲到来,使B相绕组通电,
而A、C相绕组不通电;B相绕组产生的磁场将 使转子的2、4
齿与B相磁极对齐,如图(b)所示,与图(a)相比,转子
逆时针方向转动了一个角度。第三个脉冲到来后,是C相绕
组通电,而 A、B相不通电,这时转子的1、3齿会与C组对齐
,转子的位置如图(c)所示,与图(b)比较,又逆时针转过
了一个角度。
109
图
反应式步进电机工作原理图
110
当脉冲不断到来时,通过分配器使定子的绕组按着A相--B
相--C相--A相……的规律不断地接通与断开,这时步进电动机
的转子就连续不停地一步步的逆时 针方向转动。如果改变步
进电动机的转动方向,只要将定子各绕组通电的顺序改为A相-C相--B相--A相,转子转动方向即改为顺时针方向。
单三拍分配方式时,步进电动机由A相通电转换到B相同点
,步进电动机的转子转过一个角度,称为一步。这时转子转过
的角度是30度。步进电动机每一步转过的角度称为步距角。
111
(2)三相双三拍运行方式三相双三拍运行方式:每次都有
两个绕组通电,通电方式是AB--BC--CA--AB……,如果通电顺
序改为AB--CA--BC--AB……则步进电机反转。双三拍分配方式
时,步进电动机的步距角也是30度
(3)三相单,双六拍运行方式:三相六拍分配方式就是每
个周期内有六个通电状态。这六中通电状态的顺序可以使A-AB--B--BC--C--CA--A……或者A-- CA--C--BC--B--AB--A……
六拍通电方式中,有一个时刻两个绕组同时通电,这是转子齿
的位置将位于通电的两相的中间位置。在三相六拍分配 方式
下,转子每一步转过的角度只是三相三拍方式下的一半,步距
角是15度。
112
单三拍运行的突出问题是每次只有一相绕组通电,在转换过
程中,一相绕组断电,另一相绕组通电,容易发生失步;另外单
靠一相绕组通电吸引转子,稳定性不好,容易在平衡位置附近震
荡,故用的较少。
双三拍运行的特点是每次都有两相绕组通电,且在转换过程
中始终有一相绕组保持通电状态,因此工作稳定,且步距角与单
三拍相同。
六拍运行方式转换时始终有一相绕组通电,且步距角较小,
故工作稳定性好,但电源较复杂,实际应用较多。
3. 电路设计(Proteus仿真通过)
本单片机控制步进电机电路原理图,如下页图所示:
113
114
4. Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-1.hex”;在“Clock Frequency”栏中输入晶振频率
为12MHz。
启动仿真,各按键功能如下页图所注,根据题目要求,
只有当开关合上时,步进电机才工作。
115
116
题目21 单片机控制直流电动机
1. 设计要求
采用单片机设计一个控制直流电机并测量转速的装置。单
片机扩展有A/D转换芯片ADC0809和D/A转换芯片DAC0832。
(1)通过改变A/D输入端可变电阻来改变A/D的输入电压
,D/A输入检测量大小,进而改变直流电机的转速。
(2)手动控制。在键盘上设置两个按键—直流电动机加
速键和直流电机减速键。在手动状态下,每按一次键,电机的
转速按照约定的速率改变。
(3)键盘列扫描(4  6)。
117
2. 实验原理
本题目难点是对直流电机的控制。与步进电机类似,直流
电机也可精确地控制旋转速度或转矩。
直流电机是通过两个磁场的互作用产生旋转。其结构如下
页图所示,固定部分(定子)上,装设了一对直流励磁的静
止的主磁极N和S,在旋转部分(转子)上装设电枢铁心。定
子与转子之间有一气隙。在电枢铁心上放置了由A和X 两根导
体连成的电枢线圈,线圈的首端和末端分别连到两个圆弧形
的铜片上,此铜片称为换向片。
118
图
有刷直流电机结构示意图
119
换向片之间互相绝缘,由换向片构成的整体称为换向器。
换向器固定在转轴上,换向片与转轴之间亦互相绝缘。在换向
片上放置着一对固定不动的电刷B1和B2,当电枢旋转时,电枢
线圈通过换向片和电刷与外电路接通。
定子通过永磁体或受激励电磁铁产生一个固定磁场,由于
转子由一系列电磁体构成,当电流通过其中一个绕组时会产生
一个磁场。对有刷直流电机而言,转子上的换向器和定子的电
刷在电机旋转时为每个绕组供给电能。通电转子绕组与定子磁
体有相反极性,因而相互吸引,使转子转动至与定子磁场对准
的位置。当转子到达对准位置时,电刷通过换向器为下一组绕
组供电,从而使转子维持旋转运动。如下页图所示。
120
121
直流电机的速度与施加的电压成正比,输出转矩则与电
流成正比。由于必须在工作期间改变直流电机的速度,直流
电机的控制是一个较困难的问题。直流电机高效运行的最常
见方法是施加一个 PWM(脉宽调制)方波,其占空比对应于
所需速度。电机起到一个低通滤波器作用,将PWM信号转换为
有效直流电平。特别是对于微处理器驱动的直流电机,由于
PWM信号相对容易产生,这种驱动方式使用的更为广泛。
本项目的示例程序为了能够演示DAC0832的使用,未使用
PWM驱动方式。而是利用直流电机的速度与施加电压成正比的
原理,通过滑动变阻器向ADC0809输入控制电压信号,经AD后
,输入到AT89C51中,AT89C51将此信号转发给DAC0832,通过
122
功放电路放大后,驱动直流电机。需要注意的是,本题目使用
的Proteus版本,未提供ADC0809的仿真模型,这里以引脚、功
能与之相同的ADC0808代替。同时,DAC0832也可以用引脚、功
能相同的DAC0830代替。ADC0809与DAC0832在教材中已有详细
介绍,在此不再叙述。按照其时序图,如下页图和后页图操作
即可。
123
图
ADC0808时序图
124
图
DAC0830时序
125
3. 电路设计(Proteus仿真通过)
本项目制作的用单片机控制直流电动机并测量转速电路原理
图,如下页图所示:
126
图
用单片机控制直流电动机的电路原理图
127
4.
Proteus仿真
加载目标代码文件 打开元器件单片机属性窗口,在
“Program File”栏中添加上面编译好的目标代码文件
“keil-12.hex”;在“Clock Frequency”栏中输入晶振频率
为12MHz。ADC0809的时钟信号设置为640kHz。
启动仿真如下页图所示,各按键功能如图中所注,LED
中显示的为当前电压的数字信号值,即当前转速的档位(0256),通过调整从滑动变阻器输出的电压值,可以观察到
直流电机不同的转速。
128
图
用单片机控制直流电动机仿真效果图
129