XXXXXXX学生实习(实训)总结报告学院: XXXXXXXXXXXX专业班级: 测控学生姓名: xxxxxxx 学号: 2014000000 设计地点(单位) I001设计题目:单片机综合实训--基于单片机的电压表设计完成日期:年月日指导教师评语:成绩(五级记分制):指导教师(签字):前言本次单片机综合训练,我们做了一个基于单片机的数字电压表。
在设计这个电压表之前,指导老师给我们讲解了设计要求和步骤。
按照要求我们设计的数字电压表,通过A/D转换芯片实时采集输入端电压的变化,显示于数码管上。
可通过按键选择输入通道。
在芯片的选择上,单片机选用的是AT89C52芯片,A/D采样芯片片为PCF8591A/D转换芯片。
这个数字电压表除了测量电压的功能,还可以设置报警,超过上下限自动报警。
本次单片机综合训练,用到了单片机开发板、proteus软件等工具,运用了IIC总线、数码管显示等技术。
经历了一个从设计到产品的过程,学到了很多,也收获了很多。
目录前言 (I)一、实训的目的和任务 (1)1.1实训目的 (1)1.2实训任务 (1)二、设计总方案 (2)三、系统硬件设计 (3)3.1单片机最小系统 (3)3.2 A/D转换部分 (5)3.3数码管 (7)3.4四位独立按键及声光报警 (8)四、系统软件设计 (9)4.1软件实现流程图 (9)4.2 IIC总线在实训中的应用 (10)4.3完整程序见附录3 (12)五、调试及性能分析 (13)5.1调试效果图 (13)5.2性能分析 (13)心得体会 (14)致谢 (15)参考文献 (16)附录1 任务书 (17)附录2 自画原理图 (18)附录3 源程序: (19)一、实训的目的和任务1.1实训目的培养学生的单片机系统的实际应用能力,掌握单片机系统设计、调试技能。
通过实训,要求学生掌握单片机最小系统、定时器及中断的应用,掌握按键、LED显示等接口技术,了解proteus软件如何仿真,如何使用,完成一个单片机应用系统的设计,写出设计报告。
1.2实训任务要求电压表完成以下功能:1.基本功能对输入的4路直流电压进行测量并显示出来;可以选择显示方式,轮流显示和指定通道显示;有报警功能,按键设定上下限报警。
2. 扩展功能实现历史数据的保存,可保存10组电压值3.参数设计1)测量精度5%2)测量范围0-5V4.其他要求及可参考资料,见附件1二、设计总方案系统整体结构如图所示:图2-1系统结构图根据系统功能要求,可将系统组成结构分成六大部分:单片机系统、PCF8591A/D转换芯片、LED数码管显示系统、LED和蜂鸣器报警系统、软件。
单片机采用STC89C52,系统的工作原理为:STC89C52单片机开关复位后,通过IIC总线给PCF8591发送相关指令,PCF8591收到指令开始工作,采集到数据后通过IIC总线发送给单片机,经过单片机处理后在数码管上显示相应电压值。
可以通过按键K1选择要采集的通道号,通过K4 进入电压阈值的设置,K2 设置上限K3 设置下限K1 确认。
当采集到电压超出上下限是,8个LED闪烁,蜂鸣器发出滴滴响声。
个模块的大致关系如图2-1。
三、系统硬件设计说明:本次综合实训虽然有电路的设计,但用的是现成实验板,故在介绍相关硬件系统时将按照成品的各个模块介绍及配套相应电路图,在附件2中将附上自己画的电路图。
3.1单片机最小系统3.3.1单片机最小系统图:图3-1单片机最小系统3.3.2单片机简介:STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但也做了很多改进使得芯片具有传统51单片机不具备的功能。
STC89C52具有8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构,全双工串行口。
图3-1加上电源及为单片机最小系统。
以下为STC89C52的管脚说明:1)P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写“1”时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
2)P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
3)P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH 编程和校验时接收高八位地址信号和控制信号。
4)P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为STC89C52的一些特殊功能口:P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器0外部输入);P3.5T1(记时器1外部输入);P3.6 /WR(外部数据存储器写选通);P3.7 /RD(外部数据存储器读选通);P3口同时为闪烁编程和编程校验接收一些控制信号。
5)RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
6)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
7)/PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
8)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
9)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
10)XTAL2:来自反向振荡器的输出。
振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
本次实验应用晶振为11.0592MHz。
3.2 A/D转换部分如图3-2所示,为A/D转换部分。
其中SW3和SW4为蓝白卧式电位器,调节电阻可使VO输入芯片的电压发生变化R11为LED的限流电阻,L3(红色)为电压大小体现的发光二极管。
图3-2 A/D转换部分PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。
PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。
在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit 数模转换。
PCF8591的最大转化速率由I2C总线的最大速率决定。
如图3-3为PCF8591内部结构图:图3-3为PCF8591内部结构图如图3-4为PCF8591引脚图:图3-4为PCF8591引脚图AIN0~AIN3:模拟信号输入端。
A0~A3:引脚地址端。
VDD、VSS:电源端。
SDA、SCL:I2C总线的数据线、时钟线。
OSC:外部时钟输入端,内部时钟输出端。
EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。
AGND:模拟信号地。
AOUT:D/A转换输出端。
VREF:基准电源端。
3.3数码管3.3.1数码管简介:数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管;按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。
本实验用的是两个四位八段共阴数码管。
3.3.2数码管连接电路图3-5图3-5数码管显示3.4四位独立按键及声光报警3.4.1四位独立按键四位独立按键如电路图3-6,按键无动作,对应端口为高电平。
当按键按下,单片机检测到低电平,按程序实现相应动作。
图3-6独立按键3.4.2 led灯和蜂鸣器图3-7 8个共阳极led灯图3-8蜂鸣器当给测量电压超过上下限时8个led开始闪烁,同时,蜂鸣器发出滴滴的声音。
当看到这一现象是说明测量电压超限,应注意调节电压。
四、系统软件设计4.1软件实现流程图4.2 IIC总线在实训中的应用4.2.1单片机与PCF8591芯片之间IIC总线应用程序void init() //初始化总线 SCL 和SDA 都拉成高电平{SCL=1;//时钟线_nop();SDA=1;//数据线_nop();_nop();_nop();_nop();_nop();}void start()//开始信号{SDA=1;SCL=1;_nop();_nop();_nop();_nop();_nop();SDA=0;_nop();_nop();_nop();_nop();_nop();SCL=0;}void stop()//终止信号{SDA=0;SCL=1;_nop();_nop();_nop();_nop();_nop();SDA=1;_nop();_nop();_nop();_nop();_nop();SDA=0;}void ack()//发送应答{uchar i;SDA=0;SCL=1;_nop();_nop();_nop();_nop();while((SDA==1)&&(i<255))i++;SCL=0;_nop();_nop();_nop();_nop();}void noack()//发送非应答{SDA=1;SCL=1;_nop();_nop();_nop();_nop();SCL=0;SDA=0;}void sendbaty(uchar da)//发送字节{uchar i,temp;temp=da;for(i=0;i<8;i++){temp=temp<<1;SCL=0;_nop();_nop();_nop();_nop();SDA=CY;_nop();_nop();_nop();_nop();SCL=1;_nop();_nop();_nop();_nop();}SCL=0;_nop();_nop();_nop();_nop();SDA=1;_nop();_nop();_nop();_nop();}unsigned char readbaty()//读字节{uchar i,temp;SCL=0;_nop();_nop();_nop();_nop();SDA=1;for(i=0;i<8;i++){SCL=1;_nop();_nop();_nop();_nop();temp=(temp<<1)|SDA;SCL=0;_nop();_nop();_nop();_nop();}_nop();_nop();_nop();_nop();return temp;}void DAC(uchar Data){start();sendbaty(0x90); //写入芯片地址ack();sendbaty(0x40); //写入控制位ack();sendbaty(Data); //写数据ack();stop();}unsigned char ReadADC(uchar Chl){uchar Data;start(); //写入芯片地址sendbaty(0x90);ack();sendbaty(0x40|Chl);//写入选择的通道ch1(1.2.3.4通道)ack();start();sendbaty(0x91); //读入地址ack();Data=readbaty(); //读数据SCL=0;noack();stop();return Data; //返回值}4.3完整程序见附录3五、调试及性能分析5.1调试效果图从左到右依次是,通道号、上限、下限、电压值。