现代电子技术综合实验报告 熊万安
综合实验报告范文

综合实验报告范文一、实验目的本实验旨在通过综合应用所学知识和技能,完成一个具有一定复杂性的综合实验,并进一步提升实验者的综合分析和问题解决能力。
二、实验内容本次实验以一些电子设备的维修为主题,具体需要完成以下几个步骤:1.故障现象观察和记录:对电子设备进行初步检查,观察出现的各种故障现象,并按顺序记录下来。
2.故障分析:根据故障现象的记录,对可能的故障原因进行分析,并进行实验验证。
3.故障修复:通过对故障原因进行实验验证,确认具体故障点,并进行修复。
三、实验步骤1.故障现象观察和记录:经过初步观察,电子设备无法开机,电源指示灯未亮起。
将该现象记录下来。
2.故障分析:根据故障现象的记录,初步判断可能存在以下几种故障原因:a.电源问题:电源线连接不良或损坏,电源开关故障等。
b.电路板问题:主板或电路板上的元器件损坏等。
3.故障修复:a.检查电源线连接情况,发现电源线连接良好。
b.使用万用表对电源开关进行测试,发现电源开关无故障。
c.拆卸电子设备,对主板进行仔细观察,发现一个电容器破裂。
推测该电容器故障可能导致电子设备无法开机。
d.更换故障电容器,重新组装电子设备。
e.进行开机测试,电子设备正常开机,故障修复成功。
四、实验结果和分析经过实验,成功修复了电子设备的故障,使其能够正常开机。
故障原因是电容器损坏,导致电子设备无法正常供电。
五、实验心得通过本次综合实验,我深刻体会到综合应用所学知识和技能的重要性。
在解决实际问题时,我们不仅需要具备相关的理论知识,还需要能够将理论知识应用到实践中,并善于分析和解决问题。
同时,实验过程中还需要细致入微地观察和记录现象,以便确定故障原因和进行有效的修复。
通过这样的综合实验,我不仅提升了自己的实际操作能力,还增强了自己的问题解决能力和创新思维能力。
综上所述,本次综合实验取得了良好的实验结果,并为进一步提升实验者的综合分析和问题解决能力打下基础。
这次实验让我更深入地了解了电子设备故障检修的过程和方法,对我今后的学习和工作都大有裨益。
现代电子技术综合实验设计报告范文

综合性实验设计报告课程名称:现代电子技术综合实验实验名称:数显定时器设计学生姓名:吴志斌班级: 09电科学号:实验地点:电子设计实验室实验学时: 322012年5月本课题以STC89C52单片机和数码管为主要器件,设计出一个通电时显示“99”,以后每分钟减1;时间减到零时,蜂鸣器鸣响10秒钟;定时过程中可通过两个控制按钮动态调整定时时间的数显定时器。
关键词:单片机; LED数码管显示器;定时器;三极管1 项目的主要任务 ···································································错误!未定义书签。
2 总体设计方案 ······································································错误!未定义书签。
电子和场综合实验报告

电子和场综合实验报告
实验目的:通过电子和场综合实验,建立基本的电路仿真和
测量电路准确度的能力,了解电荷在电场中的运动规律。
实验仪器和材料:电压表、电流表、电阻箱、导线、电容器、电感器、电源、示波器等。
实验原理:
1. 电路基本定律:欧姆定律、基尔霍夫定律、电功率定律。
2. 收费粒子在电场中的运动规律:库仑定律、电势差、电场强度、等势线等。
实验步骤:
1. 实验1:测量电阻器的电阻值。
2. 实验2:测量电容器的电容值。
3. 实验3:测量电感器的电感值。
4. 实验4:验证欧姆定律、基尔霍夫定律、电功率定律。
5. 实验5:测量电场强度与电势差的关系。
实验结果及分析:
1. 实验1:测量得到的电阻值与理论值相比有一定的误差,可
能是由于电阻器的质量问题。
2. 实验2:测量得到的电容值与理论值相比有一定的误差,可
能是由于电容器的质量问题。
3. 实验3:测量得到的电感值与理论值相比有一定的误差,可
能是由于电感器的质量问题。
4. 实验4:实验结果与理论预期值基本吻合。
5. 实验5:测量得到的电场强度与电势差的关系符合理论模型。
结论:
通过电子和场综合实验,我们成功建立了基本的电路仿真和测量电路准确度的能力,了解了电荷在电场中的运动规律。
同时,我们也发现了实验中可能存在的误差来源,并提出了改进的方案。
电子技术实训报告8篇

电子技术实训报告电子技术实训报告8篇在经济飞速发展的今天,报告对我们来说并不陌生,我们在写报告的时候要注意语言要准确、简洁。
你还在对写报告感到一筹莫展吗?下面是小编整理的电子技术实训报告,仅供参考,希望能够帮助到大家。
电子技术实训报告1一、实训目的:1、培养动手能力,在实践中加强对理论知识的理解。
2、掌握对电子元器件识别,相应工具的操作,相关仪器的使用,电子设备制作、装调的全过程的方法。
3、掌握查找及排除电子电路故障的常用方法。
4、学习使用protel电路设计软件,动手绘制电路图。
二、实训设备及仪器:1、电烙铁:焊接的元件多,所以使用的是外热式电烙铁,功率为30w,烙铁头是铜制。
2、螺丝刀、镊子等必备工具以及练习焊接时用的铜丝。
3、锡丝:由于锡熔点低,焊接时,焊锡能迅速散步在金属表面焊接牢固,焊点光亮美观。
4、松香,导线,剥线钳等其它需要用到的工具。
5、相关实验项目所需的电路板,电子元件等。
三、实训要求:1、识别不同的电子元器件的规格和种类,熟练掌握焊接技术。
2、按照电路图设计合理安排元器件的位置,连接好电路,对接口进行焊接,完成对指定功能的测试。
未达到测试要求的重新调试,直至排除故障。
四、实训内容:1、项目:(1)模拟声响器(2)汽车尾灯控制器(3)数字时钟(4)组装收音机2、实验电路:(1)模拟声响器电路:(2)汽车尾灯控制器电路:(3)数字时钟电路:(4)收音机电路:五、实训结果:所有项目均完成,电路成品经过测试检修。
其中,项目一达到测试目标,项目二三四部分达到测试目标。
六、实训心得:1、对电气技能训练的理论有了初步的系统了解。
进一步学习了电子技术以及电子安装工艺和测量调试技术。
我了解到了焊普通元件与电路元件的技巧、收音机的工作原理与组成元件的作用等。
2、实训项目对自己的动手能力是个很大的锻炼。
在实习中,我锻炼了自己动手技巧,提高了自己解决问题的能力。
虽然在实习中会遇到难题,但是从中我学到了很多,使自己的动手能力也有所提高,也认识到了理论学习跟实践的差别。
基于51单片机的温度报警控制系统报告

报告评分批改老师《现代电子综合实验》课程设计报告基于单片机的温度检测控制系统设计学生姓名 学 号专 业 班 级同组学生 提交日期 年 月 日指导教师目录2一、实验目的 .....................................................................................2二、实验要求 .....................................................................................2三、实验开发环境及工具 ...........................................................................2四、按键扫描和液晶显示功能实现 ...................................................................24.1矩阵键盘电路 ...............................................................................4.1.1矩阵键盘电路简介 .....................................................................224.1.2矩阵式按键扫描原理 ...................................................................24.1.3 按键扫描子程序设计思想及流程图 ......................................................34.2 LCD1602显示电路 ..........................................................................34.2.1 LCD1602模块简介 ....................................................................34.2.2 LCD1602模块引脚说明 .................................................................4.2.3 LCD1602控制方式及指令 ..............................................................344.2.4 LCD1602液晶显示子程序设计思想及流程图 ..............................................5五、基于单片机的温度检测控制系统设计过程 .........................................................55.1 系统整体电路框图及功能说明 ................................................................55.2 DS18B20数字温度传感器电路 ..............................................................55.2.1 单总线通信方式简介 ..................................................................65.2.2 DS18B20简介 ......................................................................5.2.3 DS18B20读写操作 ..................................................................665.3 声光报警及控制电路 ........................................................................75.4 软件设计 ..................................................................................5.4.1 主程序设计流程图 ....................................................................775.4.2 DS18B20子程序设计思想及流程图 ...................................................85.4.3 声光报警子程序设计思想及流程图 .....................................................9七、 实验过程及实验结果 ...........................................................................9八、实验中遇到的问题及解决方法 ...................................................................10附件 ............................................................................................一、实验目的(1). 掌握单片机应用系统的设计方法与步骤;(2).掌握硬件电路各功能模块的工作原理、应用电路与编程方法;(3).熟练掌握单总线的应用及编程;(4). 掌握基于单片机的温度检测控制系统的设计与实现。
电子技术综合实验报告模板

中南民族大学电子信息工程学院电子技术综合实验报告题目:充电器原理指导教师:年级:专业:学号:姓名:2011 年 3 月日1、功能与技术指标:1) 直流稳压电源:输入电压:交流220V,输出电压:直流3V,6V(可切换)稳压输出;最大输出电流:550mA.2)电池充电器:最通道(E1、E2)充电电流60~70mA(普通快充),又通道(E3、E4)充电电流120mA~130mA(快速充电),两通道可以同时使用,只要两者电流之和不超过500mA。
2、原理与框图:图1 充电器原理图直流稳压电源是一种将220V工频交流电转换成稳压输出3V、6V的直流电压的装置,它需要变压、整流、滤波、稳压四个环节才能完成,见图2。
工频交流脉动直流 直流负载图2 直流稳压电源组成框图①整流电路和滤波电路利用二极管的单向导电性,将50Hz的正弦交流电变换成脉动的直流电。
整流滤波电路采用单相桥式电容滤波整流电路,如图3所示。
图3 单相桥式电容滤波整流电路②稳压电路稳压电路的功能是使输出的直流电压稳定,不随交流电网电压和负载的变化而变化,如图4所示。
图4 稳压电路原理图其中开关K1的作用是调整取样电路,选择输出电压幅值的大小,如3V或6v;K2的作用是改变输出电压的极性。
③充电电路从桥式整流电路输出的直流经过电阻R13后,在V5集电极产生压降,对电池进行普充。
快充部分原理与普充电路原理相同,但由于R11与R19并联导致并联后阻值小于R16,而桥式整流电路输出电压一定,因此在快充电路产生的电流大。
在充电电路中稳压管V7和V8起到了保护电路的作用;LED4和LED3是充电显示作用,稳压管电压为稳定时,恒亮,显示电池已充满。
充电部分原理图如图5所示。
3、安装调试步骤1.焊接与安装焊接按下列步骤进行,只有完成了上一步才能进行下一步,一般先焊装低矮、耐热原件。
若有需要与印刷电路板紧固的大型元件,或与面板上孔、槽相嵌装的元件,也需给予特别的注意,具体焊装步骤:①清查元件的数量(依据元件清单)与质量,对不合格的元件应及时更换;②确定元件的安装方式、安装高度,一般它由该器件在电路中的作用、印刷电路板与外壳间的距离以及该器件两安装孔之间的距离(依据印制板图)所决定;③对器件的引脚弯曲成型处理,成型时不得从引脚根部弯曲;④插装:根据元件位号对号插装,不可插错,对又极性的元器件(如二极管、三极管、电解电容等)的脚,插孔时应特别小心;⑤焊接:各焊点加热时间及用锡量要适当,对耐热性差的元器件应使用工具辅助散热。
【精品推荐】2017年电子技术综合实验室报告【Word版 可编辑】16p

//定义显示缓冲区(由定时中断程序自动扫描) unsigned char DispBuf[8]; unsigned char temp; unsigned char Speed; //预设的电机转速值,范围 20~250 bit SWTR; //软件定时器运行标志 bit SWTF; //软件定时器溢出标志 unsigned int SWTV; /* 函数:T1INTSVC() 功能:定时器 T1 的中断服务函数 */ void T1INTSVC() interrupt 3
分享一个苹果,各得一个苹果,分享一种思想,各得两种思想。分享是件快乐的事件,乐于分享的人,事业更容易成功。
//更新扫描数据
dp:是否显示小数点,0-不显示,1-显示 */ void DispChar(unsigned char x, unsigned char c, bit dp) { code unsigned char Tab[] = {//定义 0123456789AbCdEF 的数码管字型数据 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71 }; unsigned char t; //临时变量 //防止显示位置超出范围 x &= 0x07; x = 7 - x; //分析字符 c,取得对应的数码管字型数据 if ( c == '-' ) { t = 0x40; } else { t = toint(c); //toint()为库函数,详见 C:\Keil\C51\HLP\C51.pdf if ( t < 16 ) //如果是 16 进制字符 { t = Tab[t]; //查表,取得数码管字型数据 } else { t = 0x00; //如果是其它字符则显示为空白 } } //检查是否显示小数点 if ( dp ) { t |= 0x80; } else { t &= 0x7F; } //送到显示缓冲区显示 DispBuf[x] = t; }
现代电子技术综合实验 (29)

现代电子技术综合实验设计报告要求
摘要
第1章引言
1.1 项目研究现状
1.2 本文研究的主要内容及关键技术
第2章实验项目方案设计
2.1 项目系统设计原理
2.2 项目系统设计方案及模块组成
第3章实验项目设计平台简介(软件平台与硬件平台)
(该章内容可以省略,也可由其他文档添加)
第4章实验项目单元模块电路设计
4.1 XX模块设计
4.1.1 模块描述(功能,模块符号及端口说明,模块程序,如果程序比较大,可以只写关键语句,整个完成程序放附录)
4.1.2 模块仿真(仿真文件,仿真波形,仿真波形说明)。
第5章实验项目系统电路设计
5.1 系统设计描述(功能,系统端口说明,系统程序或原理图)
5.2 系统仿真(仿真文件,仿真波形,仿真波形说明)
第6章实验项目系统设计实现
系统管脚适配表、编程文件、下载成功标志、硬件调试说明
第8章结束语
7.1 项目设计过程的重点与难点
7.2 项目设计过程中遇到的主要问题及处理方法
7.3 收获与改进意见
注:一级标题黑体4号,二级标题黑体小四,正文宋体小四。
行间距20磅。
一级标题,段前后30磅,二级标题,段前后18磅,三级标题段前后12 磅。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学通信与信息工程学院实验报告实验名称现代电子技术综合实验姓名:学号:评分:教师签字电子科技大学教务处制电子科技大学实验报告学生姓名:学号:指导教师:熊万安实验地点:科A333 实验时间:2016.3.7-2016.3.17一、实验室名称:电子技术综合实验室二、实验项目名称:电子技术综合实验三、实验学时:32四、实验目的与任务:1、熟悉系统设计与实现原理2、掌握KEIL C51的基本使用方法3、熟悉SMART SOPC实验箱的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、实验器材1、PC机一台2、SMART SOPC实验箱一套六、实验原理、步骤及内容试验要求:1. 数码管第1、2位显示“1-”,第3、4位显示秒表程序:从8.0秒到1.0秒不断循环倒计时变化;同时,每秒钟,蜂鸣器对应发出0.3秒的声音加0.7秒的暂停,对应第8秒到第1秒,声音分别为“多(高音1)西(7)拉(6)索(5)发(4)米(3)莱(2)朵(中音1)”;数码管第5位显示“-”号,数码管第6、7、8位显示温度值,其中第6、7位显示温度的两位整数,第8位显示1位小数。
按按键转到任务2。
2. 停止声音和温度。
数码管第1、2位显示“2-”,第3、4位显示学号的最后2位,第5位显示“-”号,第6到第8位显示ADC电压三位数值,按按鍵Key后转到任务3,同时蜂鸣器发出中音2的声音0.3秒;3. 数码管第1、2位显示“3-”,第3、4位显示秒表程序:从8.0秒到1.0秒不断循环倒计时变化;调节电压值,当其从0变为最大的过程中,8个发光二极管也从最暗(或熄灭)变为最亮,当电压值为最大时,秒表暂停;当电压值为最小时,秒表回到初始值8.0;当电压值是其他值时,数码管又回到第3、4位显示从8.0秒到1.0秒的循环倒计时秒表状态。
按按鍵Key回到任务1,同时蜂鸣器发出中音5的声音0.3秒。
1、硬件设计核心板硬件资源如下:(1)50MHz 晶振;(2)5V、3.3V、2.5V 和 1.2V 电源;(3)一个Xilinx 公司Spartan3E 系列的FPGA 器件,型号为XC3S250E-144;(4)一片32KB 的SRAM 存储IS61LV256AL;(5)基于JTAG 的FPGA 配置器件XCF02S/04S;(6)基于SPI(Serial Peripheral Interface)的FPGA 配置器件M25P16,含2MB 空间;(7)JTAG 接口,可下载配置数据到FPGA 和调试程序;(8)Flash 编程接口,对SPI Flash 器件编程;(9)8 个用户LED 灯和8 位数码管;(10)8 位拨码开关和 4 个用户按键;(11)配置成功指示LED;(12)重新配置按键,按下此按键后,FPGA 将重新配置;(13)一个全局时钟输入和输入/输出接口;(14)通过 2 个60 针接口将用户I/O 口、8 位数据总线、15 位地址总线和读/写信号引出,用于实验底板的各外设功能扩展。
硬件结构图如下图1:图1实验平台核心板硬件结构Quick51电路原理图为下图2:图2 Quick51电路原理图MC51单片机定制在FPGA芯片内实现,如下图3所示,在MC8051外添加了地址地址锁存模块,形成对单片机数据总线的拓展。
添加了一个地址译码模块,形成了数据总线的复用,实验平台上的多种应用模块,可敬数据总线,通过外部寻址的方式进行访问。
图3 片内MC8051单片机原理图其中FPGA与51单片机的引脚对应为下表一:2、各部分硬件原理(1)数码管动态扫描原理:图4 数码管的动态扫描动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
先把第一个数码管的显示数据送到数据线,同时打开第一个三极管,而其他数码管的对应的三极管关闭;延迟一段时间(通常不超过10ms),再把第二个数码管的显示数据送到数据线,同时打开第二个三极管,而其他数码管的对应的三极管关闭;延时一段时间,在显示下一个。
注意:整个数码管的扫描频率应当大于50Hz,防止出现明显的闪烁。
(2)I2C工作原理:图5 I2C电路图为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips开发了一个简单的双向两线总线实现有效的IC之间控制这个总线就称为Inter IC或I2C总线现在Philips 包括超过150种CMOS和双极性兼容I2C总线的IC 可以执行前面提到的三种类型的功能所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C总线通讯这个设计概念解决了很多在设计数字控制电路时遇到的接口问题。
(3)LM75特征及应用:图4 LM75应用电路LM75A是一个使用了内置带隙温度传感器和∑-△模数转换技术的温度-数字转换器。
它也是一个温度检测器,可提供一个过热检测输出。
LM75A包含许多数据寄存器:配置寄存器(Conf),用来存储器件的某些配置,如器件的工作模式、OS工作模式、OS极性和OS故障队列等(在功能描述一节中有详细描述);温度寄存器(Temp),用来存储读取的数字温度;设定点寄存器(Tos & Thyst),用来存储可编程的过热关断和滞后限制,器件通过2线的串行I2C总线接口与控制器通信。
LM75A还包含一个开漏输出(OS),当温度超过编程限制的值时该输出有效。
LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。
LM75A 可配置成不同的工作条件。
它可设置成在正常工作模式下周期性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。
OS输出有2种可选的工作模式:OS比较器模式和OS中断模式。
OS输出可选择高电平或低电平有效。
故障队列和设定点限制可编程,为了激活OS输出,故障队列定义了许多连续的故障。
温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125℃的精度。
这个高精度在需要精确地测量温度偏移或超出限制范围的应用中非常有用。
(4)按键原理:图7 按键原理图由原理图可知,按键的另一端接地,当按键按下时,按键对应的接口对应低电平,为逻辑0,当按键抬起时,由于上拉电阻的存在,接口为高电平,为逻辑1,因此可以通过查询对应的接口状态来判断是否按键是否按下。
(5)蜂鸣器工作原理:图8 蜂鸣器电路原理图三极管有两个作用:一是根据开通或者关闭控制蜂鸣器发生与否;二是驱动蜂鸣器工作,因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。
输出高电平,三极管导通,集电极电流蜂鸣器让蜂鸣器发出声音;当输出低电平时,三极管截止,没有电流流过蜂鸣器,不会发出声音。
(6)LED显示原理:图9 LED显示原理由原理图可知,当输出低电压时,LED亮;输出高电平时,LED 灭。
在一个很短的时间间隙循环时,LED亮的时间占比越多,LED呈现的亮度越亮,从而可以通过亮的时间的占比达到控制亮度的目的。
(7)AD实现原理:图10TLC549串行ADC当/CS变为低电平后,TLC549芯片被选中,同时前次转换结果的最高有效位MSB (A7)自DATA OUT 端输出,接着要求自I/O CLOCK端输入8个外部时钟信号,前7个I/O CLOCK信号的作用,是配合TLC549 输出前次转换结果的A6-A0 位,并为本次转换做准备:在第4个I/O CLOCK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动A/D开始转换。
转换时间为36 个系统时钟周期,最大为17us。
直到A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者I/O CLOCK 时钟端保持36个系统时钟周期的低电平。
由此可见,在自TLC549的I/O CLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次A/D转换开始。
3、软件设计思考题:按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。
答:若按键改用外部中断模式,可以使用INT0、INT1,需要将按键(如按键KEY1、KEY2)分别用杜邦线连到INT0、INT1外部中断口,如下图11:图11 外部中断程序则做如下修改:各个函数无需调用按键扫描函数,但在主函数或者系统初始化函数,添加几段语句进行外部中断的初始化:EX0 = 1; //使能/INT0中断;EX1 = 1; //使能/INT1中断;EA = 1 //使能总中断;中断服务程序为:void INT0SVC() interrupt 0{task++;for(;Key1==0;)Delay(81);}七、总结及心得体会八、对本实验过程及方法、手段的改进建议九、附录1、程序程序包括main.c文件和修改过的Disp.c和Disp.h文件,其中Disp.c添加了利用定时器1的软件延时函数void Delay(unsigned int t),而Disp.h添加了该函数的声明。
main.c文件:/*main.c现代电子综合实验*/#include "VolTab.h"#include "Disp.h"#include "I2C.h"#include <reg51.h>#include <string.h>#define M2 0xFCEF //587.33#define M3 0xFD45 //659.26#define M4 0xFD6C //698.46#define M5 0xFDB4 //783.99#define M6 0xFDF4 //880.00#define M7 0xFE2D //987.77#define H1 0xFE48 //1046.5sbit BUZZER = P1^0; //交流蜂鸣器由P1.0管脚控制sbit KEY1 = P2^0; //按键1//定义TLC549操作接口sbit CS = P1^5;sbit DAT = P1^7;sbit CLK = P1^6;//定义PWM最大级数#define PWM_MAX 26//定义PWM级数,分为0~PWM_MAX-1级unsigned char PwmValue;unsigned int MusicTab[] ={H1,M7,M6,M5,M4,M3,M2};//定义定时器T1重装值volatile char ReloadH;volatile char ReloadL;//定义任务、中断标志位unsigned int task,flg;/*函数:T0INTSVC()功能:定时器T0中断服务函数*/void T0INTSVC() interrupt 1{static unsigned char temp = 0;if(flg==3){TR0 = 0;TH0 = 0xFF;TL0 = 0x00;TR0= 1;temp++;if ( temp >= PWM_MAX ) temp = 0;if ( temp < PwmValue ){P0 =0x00;}else{P0= 0xff;}}else{TR0 = 0;TH0 = ReloadH;TL0 = ReloadL;TR0 = 1;BUZZER = !BUZZER;}}/*函数:Sound()功能:演奏一个音符参数:*note:音符指针,指向要演奏的音符*/void Sound(unsigned int note){//利用定时器T1发出音符的频率if ( note != 0 ){ReloadH = (unsigned char)(note >> 8);ReloadL = (unsigned char)(note);TR0 = 0;TH0 = 0xFF;TL0 = 0xF0;TR0 = 1;flg=1;EA=1;ET0=1;}}/*函数:Delay()功能:延时1ms~65.536s本函数只是简单延时函数,非秒表使用*/void Delays(unsigned int t){unsigned int t1;do{for(t1=1200;t1>0;t1--);} while ( --t != 0 );}//按键扫描函数void KeyScan(){if ( KEY1 == 0 ) task++;for(;KEY1 == 0;)Delay(81);}/*函数:SysInit()功能:系统初始化*/void SysInit(){TMOD &= 0xF0;TMOD |= 0x01; //设置T0为16位定时器DispInit(); //数码管扫描显示初始化I2C_Init(); //初始化I2C总线}/*函数:LM75A_GetTemp功能:读出LM75A的温度值返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)*/int LM75A_GetTemp(){unsigned char buf[2];int t;I2C_Gets(0x90,0x00,2,buf);t = buf[0];t <<= 8;t += buf[1];t >>= 5; //去掉无关位return t;}/*函数:ByteToStr()功能:字节型变量c转换为十进制字符串*/void ByteToStr(unsigned char idata *s, unsigned char c) {code unsigned char Tab[] = {10,1};unsigned char i;unsigned char t;for ( i=0; i<2; i++ ){t = c / Tab[i];*s++ = '0' + t;c -= t*Tab[i];}*s = '\0';}/*函数:DispTemp()功能:在数码管上显示出温度值参数:t:补码,除以8以后才是真正温度值*/void DispTemp(int t){code unsigned char Tab[8] ={'0','1','3','4','5','6','8','9'};unsigned char buf[3];unsigned char i; //整数部分unsigned char d; //小数部分//分离出整数和小数部分i = t / 8;d = t % 8;//整数部分转换成字符串ByteToStr(buf,i);//显示整数部分DispStr(5,buf);//显示小数点DispDotOn(6);//显示小数部分DispChar(7,Tab[d]); }/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsigned char ReadAdc() {unsigned char d;unsigned char n;CS = 0;n = 5;while ( --n != 0 );n = 8;do{d <<= 1;if ( DAT ) d++;CLK = 1;CLK = 0;}while ( --n != 0 );CS = 1;return d;}/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit(){CS = 1;CLK = 0;DAT = 1;ReadAdc();}/*函数:DispVol()功能:将ADC值转换成电压值,并显示参数:v:8位ADC结果*/void DispV ol(unsigned char v){DispStr(5,V olTab[v]);DispDotOn(5);}//任务一void firstf(){unsigned char T1[]="87654321";unsigned char T2[]="0987654321";unsigned int t,t1=0,t2=0,msh=0;P0=0xff; //关闭LEDDispChar(0,'1');DispChar(1,'-');DispChar(4,'-');for(;;){//显示秒表DispChar(2,T1[t1]);DispChar(3,T2[t2]);DispDotOn(2);//温度读取和显示t = LM75A_GetTemp();DispTemp(t);//发音if(T1[t1]!='1'&&T2[t2]=='0')Sound(MusicTab[msh]);msh++;if(msh==7)msh=0;}if(T2[t2]=='7'){TR0=0;BUZZER =1;}//秒表实现Delay(81);if(!(T1[t1]=='1'&&T2[t2]=='0')){t2++;if(t2==10){t2=0;}if(t2==1){t1++;if(t1==8)t1=0;}if(t1==0&&t2==1)t1++;}else{t1=0;t2=0;}//按键扫描Delay(81);KeyScan();if(task%3!=0) break;}}void twof(){unsigned char v; //电压值DispInit();AdcInit();TR0 = 0;BUZZER = 1;//短暂停顿Delay(10);P0=0xff;DispChar(0,'2');DispChar(1,'-');DispChar(4,'-');DispChar(2,'1');DispChar(3,'4');for(;;){v = ReadAdc(); //读取ADC值DispV ol(v); //显示成电压值Delay(80); //延时50msKeyScan();if(task%3!=1) break;}}//任务3void threef(){unsigned char T1[]="87654321";unsigned char T2[]="0987654321";unsigned char v; //电压值unsigned int t1=0,t2=0;AdcInit();flg=3;Delay(10);TR0=1;ET0=1;BUZZER =1;DispChar(0,'3');DispChar(1,'-');for(;;){//显示秒表DispChar(2,T1[t1]);DispChar(3,T2[t2]);DispDotOn(2);//读取显示温度v = ReadAdc(); //读取ADC值DispV ol(v); //显示成电压值//控制LEDPwmValue=v/10;//秒表实现Delay(81);if(v==0){t1=0;t2=0;}else if(v>235)Delay(81);else{if(!(T1[t1]=='1'&&T2[t2]=='0')){t2++;if(t2==10){t2=0;}if(t2==1){t1++;if(t1==8)t1=0;}if(t1==0&&t2==1)t1++;}else{t1=0;t2=0;}}//按键扫描Delay(81);KeyScan();if(task%3!=2) break;}}void main(){for (;;){SysInit();switch(task%3){case 0:firstf();break;case 1:twof();if(task%3==2){Sound(MusicTab[6]);Delay(486);}break;case 2:threef();if(task%3==0){Sound(MusicTab[3]);Delay(486);}break;}}}Disp.h:添加了软件延时函数的定义void Delay(unsigned int t);/*Disp.h数码管扫描显示驱动程序头文件*/#ifndef Disp_h_#define Disp_h_/清除数码管的所有显示void DispClear();//在数码管位置x(0~7)处显示字符c(仅限十进制数字和减号)void DispChar(unsigned char x, unsigned char c);//在数码管位置x(0~7)处显示字符串*svoid DispStr(unsigned char x, unsigned char *s);//显示指定位置x(0~7)处的小数点void DispDotOn(unsigned char x);//数码管扫描显示初始化void DispInit();void Delay(unsigned int t);#endif //Disp_h_Disp.c:添加了软件延时函数:/*Disp.c数码管扫描显示驱动程序*/#include <reg51.h>#include <absacc.h>//定义显示缓冲区(由定时中断程序自动扫描)unsigned char DispBuf[8];bit SWTF; //软件定时器溢出标志unsigned int SWTV; //软件定时器定时值bit SWTR; //软件定时器运行标志/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3{code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};static unsigned char n = 0;TR1 = 0;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;XBYTE[0x7800] = 0xFF; //暂停显示XBYTE[0x7801] = ~DispBuf[n]; //更新扫描数据XBYTE[0x7800] = ~com[n]; //重新显示n++;n &= 0x07;//模拟一个软件定时器if ( SWTR ){if ( --SWTV == 0 ) SWTF = 1;}}/*函数:Delay()*/void Delay(unsigned int t){SWTV = t; //软件定时器赋初值SWTR = 1; //启动软件定时器while ( !SWTF ); //等待溢出SWTR = 0; //停止软件定时器SWTF = 0; //清除溢出标志}函数:DispClear()功能:清除数码管的所有显示*/void DispClear(){unsigned char i;for ( i=0; i<8; i++ ){DispBuf[i] = 0x00;}}/*函数:DispChar()功能:在数码管上显示字符参数:x:数码管的坐标位置(0~7)c:要显示的字符(仅限十进制数字和减号)*/void DispChar(unsigned char x, unsigned char c){//0123456789的数码管字型数据code unsigned char Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};x &= 0x07;x = 7 - x;if ( c == '-' ){DispBuf[x] = 0x40;}else if ( ( c >= '0' ) && ( c <= '9' ) ){DispBuf[x] = Tab[c-'0'];}}/*函数:DispStr()功能:在数码管上显示字符串参数:x:数码管的坐标位置(0~7)*s:要显示的字符串(字符仅限十进制数字和减号)void DispStr(unsigned char x, unsigned char *s){unsigned char c;for (;;){c = *s;if ( c == '\0' ) break;s++;DispChar(x,c);x++;}}/*函数:DispDotOn()功能:显示指定位的小数点参数:x为数码管坐标*/void DispDotOn(unsigned char x){DispBuf[7-x] |= 0x80;}/*函数:DispInit()功能:数码管扫描显示初始化*/void DispInit(){DispClear();EA = 0;TMOD &= 0x0F;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1;EA = 1;}2、画一个包括51单片机、外部RAM和外部ROM的原理图。