《单片机课程设计报告心得体会》由会员分享,可在线阅读,更多相关《单片机课程设计报告心得体会(20页珍藏版)》请在金锄头文库上搜索。
1、单片机课程设计报告心得体会 单片机课程设计报告 题 目 数字电压表 班 级 姓 名 学 号 指导老师 设计时间 1 方案设计与论证 1.1 硬件总体设计 设计并制作一个基于单片机的数字电压表的电路其构造框图如图 1-1 所示: 单片机 STC 89C52 时钟电路 复位电路 按键 测量电压输入 PCF8591 A/D转换电路 电压数码管显示系统 图1-1 硬件构造框图 (1)单片机最小系统电路部分 (2)数码管显示部分 (3) PCF8591芯片 AD转换部分 (4)外部电压采集部分 1.2软件总体设计 良好的设计方案可以减少软件设计的工作量,进步软件的通用性,扩展性和可读性。本系统的设计方案
2、和步骤如下: (1)根据需求按照系统的功能要求,逐级划分模块。 (2)明确各模块之间的数据流传递关系,力求数据传递少,以增强各模块的独立性,便于软件编制和调试。 (3)确定软件开发环境,选择设计语言,完成模块功能设计,并分别调试通过。 (4)按照开发式软件设计构造,将各模块有机的结合起来,即成一个较完善的系统。采用 PCF8591芯片,其中A/D转换器用于实现模拟量向数字量的转换,单电供电。单片机模块采用STC89C52单片机作为系统的控制单元。通过按键来选择相应的档位,主控控制相应继电器来选取不同的模拟量输入。通过A/D转换将被测值转换为数字量送入单片机中,再由单片机来送显。 2 硬件设计
3、2.1 电电路 本设计的电部分采用的是外部直流直接供电方案。采用DC插座为连接器件。电压值为直流5V供电。当外部直流5V电输入时,首先进展滤波处理,减少直流电中的交流部分。为本系统提供稳定的5V电,保证各个电路正常地稳定工作。 图2-1 电电路图 2.2 显示电路 显示电路由一个4位的共阳数码管,4个PNP型的三极管S8550和4个限流电阻构成。S8550为数码管的段码驱动开关管,当它的B极为低电平时,三极管导通,当它的B极为高电平时,三极管截止,而这4个三极管的B极是受控于单片机的IO口的。三极管的E极接电正,当三极管导通时,电正极就到达了数码管的阳极。此时数码管的8个段的点亮与熄灭完全受控
4、于数码管的段码控制IO,只要它为低电平,就可以点亮数码管中相应的段。 图2-2-1 显示电路图 图2-2-2 显示电路图 2.3 单片机最小系统电路 单片机最小系统由复位电路与晶振电路组成电路图如下: 图2-3-1 单片机最小系统电路图 复位电路由按键复位和上电复位两部分组成。STC89C52系列单片及为高电平复位,通常在复位引脚RST上连接一个电容到VCC,再连接一个电阻到GND,由此形成一个RC充放电回路保证单片机在上电时RST脚上有足够时间的高电平进展复位,随后回归到低电平进入正常工作状态,这个电阻和电容的典型值为10K和10uF。 按键复位就是在复位电容上并联一个开关,当开关按下时电容
5、被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。 晶振电路由晶振器件与2个助振电容组成,晶体振荡器作为振荡,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。 本系统采用内部方式的时钟电路和加电自复位的复位电路,如以下图所示: 图2-3-2 时钟电路图 图2-3-3 复位电路图 2.4 PCF8591芯片 AD转换部分电路 PCF8591芯片将模拟电压信号转化为二进制数值,再用IC总线传送给单片机,经由单片机转换成十进制数值并通过数码管显示。PCF8591芯片AD转换部分电路如图2-4所示: 图2-
6、4 PCF8591芯片 AD转换部分电路图 按照不同的量程,设置不同的衰减比例,即输入电阻的大小与总回路电阻的比值。外部采集到的电压进过电阻进展衰减,降到 PCF8591 芯片的基准采集电压范围之内, PCF8591是8位的 D/A采用的是串行数模转换器。有4路采样通道,因为本设计要采样温度和电压,需要用到2个采样通道.并且PCF8591与单片机通迅方便简单,PCF8591一共有4个采集通道,分别为AIN0,AIN1,AIN2,AIN3。AIN3为电压检测通道,它检测的是输入端的电压,单片机可以处理PCF8591发送来的数据计算出相应的电压值,并且经数码管显示出来. TL431为可调的稳压芯片
7、,此图上的接法是最典型的2.5V接法,它不需要可调电阻,方便简单。2.5V经R4电阻,C5组合成RC滤波,然后供给PCF8591做基准电压。我们知道,PCF8591是一个8位AD/DA芯片,8位共有256个量,假设用2.5V做基准的话,每个分辨量是:2.5V/(256-1) 约等于 9.8mV,就是PCF8591每检测到一个量就是9.8mV,由此来检测电压值。 RW为高精细可调电阻,称为电压校正电阻。它的作用是来调整输入电压分压.因为输入的电压一般都大于其准电压。所以要把输入的电压进展分压处理,然后在程序里进展复原处理。 3 软件设计 3.1 主程序 系统主程序包括PCF8591AD转换模块,
8、电压计算、数码管显示。主程序主要通过调用其他函数来实现系统的总体功能,其工作顺序如下: 1系统启动后,进展系统的初始化。 2读取 PCF8591芯片的值,判断值得大小是否超过最大电压,再通过数码管显示。 3假设超过量大测量电压就显示OL,表示超量程,没有超过就显示相应电压值。 主程序的程序流程图如图 3-1所示。 程序开始 初始化 循环30次读取AD结果 AD结果/30=平均值 AD结果是最大值吗? 电压值计算 显示电压 显示超量程 N Y 图 3-1 主程序的程序流程图 3.2 PCF8591AD转换程序设计 电压表的测量是通过 PCF8591AD、D/A转换芯片实现的,在硬件电路的设计中已
9、经做了设计,如今设计 PCF8591AD、D/A转换芯片的软件部分。 AD转换流程如以下图: 子程序初始化 I2C初始条件 写入器件地址(写) 发送控制字 检测应答信号 I2C初始条件 写入器件地址(读) 检测应答信号 接收数据存入指针地址 完毕 图3-2 AD转换流程图 AD系统程序设计主要包括三部分:总线的初始化程序、启动信号程序、应答信号程序、停顿信号程序、写字节程序、读字节程序。 4 安装与调试 4.1 电路安装 1检查元件的好坏 按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进展检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错
10、误焊件后不便改正。 2放置、焊接各元件 按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,注意芯片的安装方向。 4.2 系统调试 1在Keil软件中编写并调试程序,修改语法错误,最终生成.hex目的程序。 2利用Proteus软件绘制电路图,在确保电路连接正确无误的情况下,载入目的程序,仿真并查看结果,如图4-1所示。 图4-1仿真图 5 性能测试与结果分析p 使用STC-ISP软件烧入目的程序,观察实物运行效果,将导线接在纽扣电池正负端,电压测量效果如图5-1所示。经实验测试,该数
11、字电压表设计方案正确、可行,各项指标稳定、可靠。 图5-1实物运行效果 6 心得体会 通过本次的设计,使我们不仅对单片机这门课程有了更深化的认识,懂得了如何运用课本知识结合实际来完成定时器的显示和编程方法以及数码显示电路的驱动方法,使我们可以很快的适应现代控制技术开展的需求,同时也进步了我们的思维才能和实际操作才能,为以后更好的走上工作岗位奠定了坚实的根底。另外,这次的设计还让我更进一步的认识了关于 STC89C52等芯片的引脚功能以及使用方法,使我学会了应用不同的芯片来配合完成整个设计的操作。在做硬件电路的这段时间里,从考虑设计到对电路的调试经过了许多困难。同样在对软件进展设计时,也可为一路
12、坎坷。但是通过对软硬件不断撞墙,不断考虑解决问题的过程中,我学会了很多东西,同时对单片机也有了更深的认识。 【参考文献】:p 】: 1 王福瑞单片机测控系统设计大全M 北京:北京航空航天大学出版社,2000 2 谭浩强C程序设计M北京:清华大学出版社,2022 3 丁元杰单片机原理及应用M 北京: 机械工业出版社,2022 附录: 1 电路图 2 实物图正反面 3 程序 #include <reg52.h /包含头文件 #define setPcf8591Add 0x90 /定义PCF859的器件地址 sbit SCL = P26; /定义PCF859的时钟IO口 sbit SDA =
13、P27; /定义PCF859的数据IO口 /*-这样做的好处就是可以随意改IO与段码的对应关系(方便洞洞板接线)-*/ sbit LED1 = P37; /定义第1个数码管的位选 sbit LED2 = P36; /定义第2个数码管的位选 sbit LED3 = P12; /定义第3个数码管的位选 sbit LED4 = P11; /定义第4个数码管的位选 sbit LED_a = P35; /定义数码管的段选a段 sbit LED_b = P13; /定义数码管的段选b段 sbit LED_c = P30; /定义数码管的段选c段 sbit LED_d = P32; /定义数码管的段选d段
14、sbit LED_e = P33; /定义数码管的段选e段 sbit LED_f = P34; /定义数码管的段选f段 sbit LED_g = P17; /定义数码管的段选g段 sbit LED_dp = P31; /定义数码管的段选dp段 /*=把数显段码存放在数组里,并且与数组下标对应=*/ unsigned char dig10 = 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09; /0 1 2 3 4 5 6 7 8 9段码 /*=数码管显示暂存数组=*/ unsigned char ledData = 0xff,0xff,0xff,0x03; /第3位,第2位,第1位,第0位 /*=数码管显示函数=*/ void led_out(void) unsigned char i,j; for(i = 0;i < 4;i+) /for循环4次,i从0到3循