电子/微电子专业 《单片机与嵌入式系统》 课程设计指导书 电子科学与技术系
目录----课程设计题目
题目1. 智能电子钟 题目2. 电子时钟 题目3. 定时闹钟 题目4. 音乐倒数计数器 题目5. 数字温度计 题目6. 十字路口交通灯控制 题目7. 波形发生器 题目8. 8位竞赛抢答器的设计 题目9. 单词记忆测试器程序设计 题目10. 数字电压表设计 题目11. 双机之间的串行通信设计 题目12. 电子琴设计 题目13. 数字音乐盒的设计 课程设计要求: 1、参考所用的单片机实验板用Proteus设计所做项目的电路原理图和PCB图等。采用Keil C51或A51编程,在Proteus中实现软件仿真,题目中的Proteus原理图只作为参考的示意图。 2、在单片机实验板上进行硬件调试和运行,也可以采用芯片的开发板,如STM32等来完成课程设计。 3、撰写实验报告。
1. 设计要求 以51单片机为核心,制作一个LCD显示的智能电子钟: (1) 计时:秒、分、时、天、周、月、年。 (2) 闰年自动判别。 (3) 五路定时输出,可任意关断(最大可到16路)。 (4) 时间、月、日交替显示。 (5) 自定任意时刻自动开/关屏。 (6) 计时精度:误差≤1秒/月(具有微调设置)。 (7) 键盘采用动态扫描方式查询。所有的查询、设置功能均由功能键K1、K2完成。 2. 工作原理 设计采用市场上流行的时钟芯片DS1302进行制作。DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与计算机进行通信,使得管脚数量减少。实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。 DS1302时钟芯片的主要功能特性: (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。 3. 电路设计(Proteus软件仿真通过) 4. Proteus仿真 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-1.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 仿真如图所示,其中,浮动窗口中显示的为DS1302当前时钟状态:
1. 设计要求 以AT89C51单片机为核心的时钟,在LCD显示器上显示当前的时间: 使用字符型LCD显示器显示当前时间。 显示格式为“时时:分分:秒秒”。 用4个功能键操作来设置当前时间。功能键K1~K4功能如下。 K1—进入设置现在的时间。 K2—设置小时。 K3—设置分钟。 K4—确认完成设置。 程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00:00”,然后开始计时。 2. 实验原理 题目难点在于键盘的指令输入,由于每个按键都具有相应的一种或多种功能,程序中需要大量使用do{}while或while{}循环结构,以检测是否有按键按下。按键检测函数的详解如下(略) 3. 参考电路(Proteus软件仿真通过) 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-2.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真,按下按键1后,可发现LED停止闪烁,即时钟停止走时,时钟停在当前时刻,按下按键2和按键3后,可改变时间,按下按键4后,时钟复位到修改后的时间,时钟重新开始运转,如下图所示。
1. 设计要求 使用AT89C51单片机结合字符型LCD显示器设计一个简易的定时闹钟LCD时钟,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。 定时闹钟的基本功能如下: 显示格式为“时时:分分”。 由LED闪动来做秒计数表示。 一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。 程序执行后工作指示灯LED闪动,表示程序开始执行,LCD显示“00:00”,按下操作键K1~K4动作如下: (1) K1—设置现在的时间。 (2) K2—显示闹钟设置的时间。 (3) K3—设置闹铃的时间。 (4) K4—闹铃ON/OFF的状态设置,设置为ON时连续三次发出“哗”的一声,设置为OFF发出“哗”的一声。 设置当前时间或闹铃时间如下。 (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。 本项目的难点在于4个按键每个都具有两个功能,以最终实现菜单化的输入功能。通过逐层嵌套的循环扫描,实现嵌套式的键盘输入。以对小时的设置的流程为例,其流程如下图。 2. 参考电路(Proteus软件仿真通过) 3. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-3.hex”;在“Clock Frequency”栏中输入晶振频率为12MHz。 启动仿真,下图为按下“开始”按键后的情况,在按下前,数码管无显示。期间如果按下“复位”按键,则LED显示归零,走时停止。
1. 设计要求 利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。 定时闹钟的基本功能如下。 字符型LCD(16?2)显示器。 显示格式为“TIME 分分:秒秒”。 用4个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。 程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。 K1—可调整倒计数的时间1~60分钟。 K2—设置倒计数的时间为5分钟,显示“0500”。 K3—设置倒计数的时间为10分钟,显示“1000”。 K4—设置倒计数的时间为20分钟,显示“2000”。 复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键, 在此基础上,可将乐曲的简谱转化为单片机可以“识别”的“数组谱”,进一步加入对音长、休止符等的控制量后,可以实现音乐的播放。 3.电路设计(Proteus仿真通过) 本题目制作的带有LCD显示的音乐倒数计数器电路原理图,如下页图所示。 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-5.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图所示,当闹钟到达时,可以听见蜂鸣器演奏的乐曲。再次提示,本题目必须选用蜂鸣器SOUNDER,否则不能发出声音。
1. 设计要求 采用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为?55℃~125℃,精确到0.5℃。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示。 2. 实验原理 从温度传感器DS18B20可以很容易直接读取被测温度值,进行转换即满足设计要求。 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字读数方式。 DS18B20的性能如下: 独特的单线接口仅需要一个端口引脚进行通信。多个DS18B20可以并联在串行传输的数据线上,实现多点组网功能。无须外部器件。 3.电路设计(Proteus仿真通过) 本项目制作的数字温度计电路原理图,如下所示: 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-6.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图所示,其中,DS18B20窗口显示的为当前环境温度,若调整DS18B20旁边的箭头,可改变环境温度,可以看到LED显示屏上的温度值发生相应的变化。
1. 设计要求 设计一个十字路口交通灯控制器。用单片机控制LED灯模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为80s,南北向通行时间为60s,缓冲时间为3s。 2. 实验原理 本项目为典型的LED显示和中断定时电路。利用定时器T0产生每10ms一次的中断,每100次中断为1s。对两个方向分别显示红、绿、黄灯,已经相应的剩余时间即可。值得注意的是,需要意识到,A方向红灯时间=B方向绿灯时间+黄灯缓冲时间这一常识。 本项目使用的MAX7219芯片使用方法请自行查询。 3.电路设计(Proteus仿真通过) 本项目制作的十字路口交通灯控制电路原理图,如下图:
1. 设计要求 设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。 2. 实验原理 产生指定波形可以通过DAC来实现,不同波形产生实质上是对输出的二进制数字量进行相应改变来实现的。本题目中,方波信号是利用定时器中断产生的,每次中断时,将输出的信号按位反即可;三角波信号是将输出的二进制数字信号依次加1,达到0xff时依次减1,并实时将数字信号经D/A转换得到;锯齿波信号是将输出的二进制数字信号依次加1,达到0xff时置为0x00,并实时将数字信号经D/A转换得到的; 梯形波是将输出的二进制数字信号依次加1,达到0xff时保持一段时间,然后依次减1直至0x00,并实时将数字信号经D/A转换得到的; 正弦波是利用MATLAB将正弦曲线均匀取样后,得到等间隔时刻的y方向上的二进制数值,然后依次输出后经D/A转换得到。 3.电路设计(Proteus仿真通过) 本波形发生器的设计电路原理图,如下图所示:
1.设计要求 以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。可简化为4位。 设置一个系统清除和抢答控制开关S,开关由主持人控制。 抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。 当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。 2. 实验原理 通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。 3. 电路设计(Proteus仿真通过) 8位竞赛抢答器的设计电路原理图,如下图所示: 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-19.hex”;在“Clock Frequency”栏中输入晶振频率为12MHz。仿真:单击按钮,启动仿真,结果如下图所示:
1. 设计要求 设计一个以单片机为核心的单词记忆测试器: ?实现单词的录入(为使程序具有可演示性,单词不少于10个)。 ?单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。 ?单词背完后给出正确率。 2. 实验原理 本题目实质上是一个具有一定复杂程度键盘扫描程序,可将单词存储在一个二维数组中,按“确定”键开始程序后,次显示0行的数组,即第一个单词。之后按下“向上”按键,显示上一行数组,即上一个单词; 按下“向下”按键,显示下一行数组,即下一个单词。当显示的行数超过9时,程序结束,并通过按“确认”的次数,计算出正确率。 3.电路设计(Proteus仿真通过) 本项目制作的单词记忆测试器程序设计电路如下图所示。 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-18.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图 (a)-(c)所示:
图(a) 单词记忆测试器程序设计启动界面仿真效果图
图(b) 单词记忆测试器程序设计测试界面仿真效果图
图(c) 单词记忆测试器程序设计正确率显示界面仿真效果
1. 设计要求 以单片机为核心,设计一个数字电压表。采用中断方式,对2路0~5V的模拟电压进行循环采集,采集的数据送LED显示,并存入内存。超过界限时指示灯闪烁。 2. 实验原理 本题目本质上是以单片机为控制器,ADC0809为ADC器件的AD转换电路,设计要求的电压显示,是对ADC采集所得信号的进一步处理。 为得到可读的电压值,需根据ADC的原理,对采集所得的信号进行计算,并显示在LED上。本项目中ADC0809的参考电压为+5V,根据定义,采集所得的二进制信号addata所指代的电压值为:
而若将其显示到小数点后两位,不考虑小数点的存在(将其乘以100),其计算的数值为:
将小数点显示在第二位数码管上,即为实际的电压。 本示例程序将1.25 V和2.5 V作为两路输入的报警值,反映在二进制数字上,分别为0x40和0x80。当AD结果超过这一数值时,将会出现二极管闪烁和蜂鸣器发声。 3. 电路设计(Proteus仿真通过) 本单片机数字电压表电路原理图,如下图所示: 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“xxxxx.hex";在“Clock Frequency”栏中输入晶振频率为12MHz。ADC0809的时钟信号设置为640kHz。 启动仿真,如下图所示,当调节滑动变阻器时,可观察到显示的电压发生变化,且两路输入电压的测算值交替显示.。当任一路电压输入超过预设值时,LED显示器闪烁,蜂鸣器发声。由于8位AD芯片精度有限,其误差大约在几十mV左右。
1. 设计要求 两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。串行口工作方式为方式1的全双工串行通信。 2. 实验原理 两个单片机之间进行通讯波特率的设定,最终归结到对定时计数器T1计数初值TH1、TL1进行设定。故本题目本质上是通过键盘扫描得到设定的波特率,从而载入相应的T1计数初值TH1、TL1实现的。示例程序中将0xaa从主机传输到从机,并显示在从机的数码管上实现串口通讯的验证。 如串口通讯线路过长,可考虑采用MAX232进行电平转换,以延长传输距离。值得注意的是,为了减少计算载入初值时的误差,本项目最好采取11.0592MHz的晶振。 3. 电路设计(Proteus仿真通过) 两个单片机之间的串行通信接口设计电路原理图,如下图所示: 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“master.hex”或"slave.hex";在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图所示,当二极管间隔点亮时,表明通讯成功:
1. 设计要求 设计一个电子琴。利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出8个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键则发另一音调的声音。 2. 实验原理 当系统扫描到键盘上有键被按下,则快速检测出是哪一个键被按下,然后单片机的定时器被启动,发出一定频率的脉冲,该频率的脉冲输入到蜂鸣器后,就会发出相应的音调。 如果在前一个按下的键发声的同时有另一个键被按下,则启用中断系统,前面键的发音停止,转到后按的键的发音程序,发出后按的键的音调。关于发声原理,参见题目5。 3. 电路设计(Proteus仿真通过) 本电子琴设计电路原理图,如下图所示: 4. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-23.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图所示,依次按下各按键可听见不同的音阶:
1. 设计要求 以单片机为核心,设计一个数字音乐盒: 利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少3首乐曲,每首不少于30s)。 采用LCD显示信息。 a. 开机时有英文欢迎提示字符,播放时显示歌曲序号(或名称)。 b. 可通过功能键选择乐曲、暂停、播放。 2. 电路设计(Proteus仿真通过) 本数字音乐盒的电路设计原理图,如下图所示。 3. Proteus仿真 加载目标代码文件 打开元器件单片机属性窗口,在“Program File”栏中添加上面编译好的目标代码文件“keil-24.hex”;在“Clock Frequency”栏中输入晶振频率为11.0592MHz。 启动仿真如下图所示,其中,液晶显示器显示的为当前乐曲等信息,同时可听见音乐的播放声 数字音乐盒的设计仿真液晶显示效果图
完整的Word格式文档51黑下载地址:
单片机与嵌入式系统_课程设计指导书.doc
(786 KB, 下载次数: 23)
|