单片机课设(共21页)_第1页
单片机课设(共21页)_第2页
单片机课设(共21页)_第3页
单片机课设(共21页)_第4页
单片机课设(共21页)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学 号 1322020207 天津(tin jn)城建大学单片机原理(yunl)及应用A课程设计(shj)说明书双通道电压采集电路设计(LCD显示)起止日期: 2016年1月 4日 至 2016年1月15日学生姓名张文班级13智能化2班成绩指导教师(签字) 控制与机械工程学院2016年1月15日目 录原理(yunl) 1硬件(yn jin)介绍 1 2.1 单片机介绍(jisho)1 2.2 AT24C02 I2C数据存储 2 2.3 PCF8591 A/D转换 2 2.4 LCD1602 液晶显示模块3 硬件连接及工作过程简介4 3.1 硬件连接4 3.2 工作过程简介5工作流程图 6程序清

2、单 7PCB图 18总结18八、参考文献19一、原理(yunl)本文所设计的是一种以单片机STC12C5A60S2(引脚排序及基本功能同AT89S51)作为主控芯片的双通道电压采集电路,将采集到的模拟信号电压值利用PCF8591来进行模数转换,PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取信号。其中PCF8591共有4个模拟输入、一个模拟输出和一个串行口I2C总线接口,通过PLCF8591将转换成的数字信号电压值传给液晶显示屏,并将所测电压值在LCD1602液晶显示屏中显示出来,而且要利用AT24C04设置电压上下限,在电压超出上下限时显示屏要有所表示.本文主要针对

3、双通道的数据采集与显示,继而推广(tugung)多通道数据采集的方法,重点分析介绍了基于AT89S51数字电压采集的硬件设计和软件设计。二、硬件(yn jin)介绍2.1 单片机介绍单片机是把微型计算机主要部分都集成在一个芯片上的单芯片微型计算机,即将运算器,控制器,输入输出接口,部分存储器以及其他一些逻辑部件集成在一个芯片上,故可以把单片机看成是一个不带外部设备的微型计算机,相当于一个没有显示器,没有键盘,不带监控程序的单板机。由于单片计算机具有体积小,重量轻,耗电少,功能强和价格低等特点,又由于数据大多是在芯片内传送处理,所以运行速度快,抗干扰能力强。单片机从七十年代问世以来,在二十多年的

4、时间里,发展异常迅速,并已广泛应用于各种领域。单片机具有通讯接口,用单片机进行接口的控制与管理,单片机与主机可并行工作,大大地提高了系统的运行速度,所以在网络通讯领域也得到了越来越多的应用。AT89C51单片机AT89S51是一个低功耗,高性能 HYPERLINK /view/22318.htm t /_blank CMOS 8位 HYPERLINK /view/1012.htm t /_blank 单片机,片内含4k Bytes HYPERLINK /view/855.htm t /_blank ISP(In-system prog HYPERLINK /view/3558.htm t /_

5、blank rammable)的可反复擦写1000次的 HYPERLINK /view/7641.htm t /_blank Flash只读 HYPERLINK /view/421016.htm t /_blank 程序存储器,器件采用 HYPERLINK /view/110906.htm t /_blank ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51 HYPERLINK /view/178189.htm t /_blank 指令系统及80C51 HYPERLINK /view/641241.htm t /_blank 引脚结构,芯片内集成了通用8位 HYPERLINK

6、 /view/14045.htm t /_blank 中央处理器和ISP Flash HYPERLINK /view/1223079.htm t /_blank 存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。接口(ji ku)分配电路设计:P0口为一个(y )8位漏级开路(kil)双向I/O口,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在这里P0口作为输出和数码管显示的输入端相连,且P0外部被阻值为1K的电阻拉高。P2口:这里只用到了P2.0P2.3四个端口,其中P2.1P2.3都是作为数码管显示的位选端口。 2.2 AT24C02

7、I2C数据存储AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256*8位存储空间,具有工作电压宽擦写次数多(大于10000次),写入速度快(小于10ms),抗干扰能力强,数据不易丢失,体积小等特点。并且它是采用I2C总线式进行数据读写的串行操作,只占用很少的资源和I/O线。AT24C02有一个16字节页写缓冲器,该器件通过I2C总线接口进行操作,还有一个专门的写保护功能。AT24C02的引脚如图1所示各引脚功能如下 图2-1 AT24C02引脚图SCL:串行时钟输入管脚,用于产生器件所有数据发送或接收的时钟。 SDA:双向串行数据/地址管脚,用于器件所有数据的发送或接收

8、。A0、A1、A2:器件地址输入端。这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。使用AT24C02最大可级联8个器件,如果只有一个24C02被总线寻址,这三个地址输入脚A0、A1、A2可悬空或连接到VSS。WP:写保护。如果WP管脚连接到Vcc,所有的内容都被写保护,只能读。当WP管脚连接到Vss或悬空,允许器件进行正常的读/写操作。VSS:电源地(GND)。 VCC:电源电压(5V)。AT24C02支持I2C总线数据传送协议,I2C总线协议规定:任何将数据传送到总线的器件作为发送器,任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控

9、制的,主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据发送或接收的模式。 2.3 PCF8591 A/D转换PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS HYPERLINK /doc/719606.html t /doc/_blank 数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C HYPERLINK /doc/1669963.html t /doc/_blank 总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上

10、输入输出的地址、 控制和 HYPERLINK /doc/4902951.html t /doc/_blank 数据信号都是通过双线双向I2C总线以串行的方式进行传输。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit HYPERLINK /doc/733710.html t /doc/_blank 模数转换和8-bit HYPERLINK /doc/6157010.html t /doc/_blank 数模转换。PCF8591的最大转化速率由I2C总线的最大速率 HYPERLINK /doc/261679.html t /doc/_blank 决定。主要特性为单独供电、PCF859

11、1的操作电压范围2.5V-6V、低待机电流、通过I2C总线串行输入/输出、PCF8591通过3个硬件地址(dzh)引脚寻址、PCF8591的采样率由I2C总线速率决定、4个模拟输入可编程为单端型或 HYPERLINK /doc/2103399.html t /doc/_blank 差分(ch fn)输入、自动(zdng)增量频道选择、PCF8591的 HYPERLINK /doc/7027478.html t /doc/_blank 模拟电压范围从VSS到VDD、PCF8591内置跟踪保持电路、8-bit逐次逼近A/D转换器、通过1路模拟输出实现DAC增益。2.4 LCD1602 液晶显示模块

12、1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的 HYPERLINK /view/545607.htm t /_blank 点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程

13、序可以很方便地应用于市面上大部分的字符型液晶。LCD1602管脚图如图2所示 图2-2 LCD1602管脚图LCD1602管脚功能第1脚:GND为 HYPERLINK /view/8503941.htm t /_blank 电源地 第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为 HYPERLINK /view/6159.htm t /_blank 寄存器选择,高电平1时选择 HYPERLINK /view/1547752.htm t /_b

14、lank 数据寄存器、低电平0时选择 HYPERLINK /view/178142.htm t /_blank 指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,以51为例的简单原理图低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第714脚:D0D7为8位双向数据端。第1516脚: HYPERLINK /view/5108385.htm t /_blank 空脚或背灯电源。15脚背光正极,16脚背光负极。三、硬件(yn jin)连接及工作过程简介3.1硬件(yn jin)连接双通道电压(diny)采集电路设计(

15、LCD显示)的硬件设计原理图如图3所示 图3-1硬件连接原理图3.2工作过程简介 图3-2 AT24C02管脚图 HYPERLINK /s?wd=SDA&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9nWTznjP-njbvuymzrHu90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHbYP1m4njTYnHc3rHTLnHDYr0 t /_blank SDA、 HYPERLINK /s?w

16、d=SCL&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9nWTznjP-njbvuymzrHu90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHbYP1m4njTYnHc3rHTLnHDYr0 t /_blank SCL是 HYPERLINK /s?wd=IIC&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9nWTznjP-nj

17、bvuymzrHu90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHbYP1m4njTYnHc3rHTLnHDYr0 t /_blank IIC HYPERLINK /s?wd=%E6%95%B0%E6%8D%AE%E7%BA%BF&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9nWTznjP-njbvuymzrHu90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgv

18、PsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHbYP1m4njTYnHc3rHTLnHDYr0 t /_blank 数据线和时钟线,可连接(linji)于单片机任何 HYPERLINK /s?wd=IO&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9nWTznjP-njbvuymzrHu90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv

19、3EnHbYP1m4njTYnHc3rHTLnHDYr0 t /_blank IO管脚在。在本次设计中通过(tnggu)芯片AT24C02来编写所测电压的上下限值。我们这次试验所测得电压是直流电压0至5伏是模拟信号由于我们所测得电压要在 LCD1602 液晶显示屏中显示出来,但是LCD1602液晶显示屏接受和表达数字信号,所以要用PCF8591 A/D转换芯片把采集的模拟信号电压值转换成数值信号,经过AT89S51再把信号传给LCD液晶显示屏,最终在液晶显示屏上显示出电压值。如果采集的电压值在设定的电压值之间,则电压值能在液晶显示屏上显示出电压,如果超出了则在液晶显示屏上有所表示。在此次试验中

20、因为是双通道采集电压,所以我们测两条电路的电压,我在这两条电路上各串联了一个滑动变阻器,用来(yn li)改变所测的电压值。四、工作流程图 开 始 采集0通道数据否上下限内是 A/D转换 延时储存同时 采集1通道数据 显示屏显示否上下限内 是 A/D转换同时 延时储存 显示屏显示结 束 图4-1 工作(gngzu)流程图五、程序清单#include common.hfloat v_low = 2.8; /电压(diny)范围下限float v_high = 4.5; /电压(diny)范围上限uchar BUF2; /从at24c04中读取的数据(shj)存储在这uchar w_buf2; /

21、写入at24c04中的数据(shj)存在这里/延时函数(hnsh)大约1msvoid delay_ms(int ms)int i;while(ms-)for(i=0;i100;i+);/连续写入两个数据void AT24C04_Write(uchar dat_1,uchar dat_2)AT24C04_Start(); /起始信号AT24C04_SendByte(0 xa0); /发送设备地址+写信号AT24C04_SendByte(0 x00); /发送存储单元地址AT24C04_SendByte(dat_1); /写入数据1AT24C04_SendByte(dat_2); /写入数据2AT

22、24C04_Stop(); /停止信号/连续读出两个数据void AT24C04_ReadPage() uchar i; AT24C04_Start(); /起始信号 AT24C04_SendByte(0 xa0); /发送设备地址+写信号 AT24C04_SendByte(0 x00); /发送存储单元地址 AT24C04_Start(); /起始信号 AT24C04_SendByte(0 xa1); /发送设备地址+读信号 for (i=0; i= read_low & re_val = read_h) /如果电压在范围内 temp0 = num/10 + 0;temp1 = .;temp

23、2 = num%10 + 0;else if(re_val read_h ) /如果高于设定值 temp0 = H;temp1 = I;temp2 = G; for(i=0;i3;i+) /用液晶显示结果(ji gu) LCD_Manifest(flag,3+i,tempi); /显示(xinsh)电压范围的上限 num = read_h * 10; temp0 = num/10 + 0;temp1 = .;temp2 = num%10 + 0; for(i=0;i3;i+) /用液晶显示结果(ji gu) LCD_Manifest(1,12+i,tempi); /显示电压范围的下限 num

24、= read_low * 10; temp0 = num/10 + 0;temp1 = .;temp2 = num%10 + 0; for(i=0;i3;i+) /用液晶显示结果 LCD_Manifest(2,12+i,tempi); /主函数void main()uchar val;/电压值LCD_Init(); /液晶初始化IIC_Init(); /I2C总线初始化 w_buf0 = v_low*10;w_buf1 = v_high*10;AT24C04_Write(w_buf0,w_buf1); /将数据(shj)写入AT24C04 LCD_Manifest(1,0,V);/在lcd16

25、02中显示字符LCD_Manifest(1,1,1);LCD_Manifest(1,2,:);LCD_Manifest(2,0,V);LCD_Manifest(2,1,2);LCD_Manifest(2,2,:);LCD_Manifest(1,10,H); LCD_Manifest(1,11,:);LCD_Manifest(2,10,L);LCD_Manifest(2,11,:);while(1) /按键(n jin)检测程序if(key_1 = 0) /调节范围(fnwi)的下限 delay_ms(100); /延时消除抖动 if(key_1 = 0) / v_low = v_low - 0

26、.1;/ if(v_low 5.0) v_high = v_low;w_buf0 = v_low*10;w_buf1 = v_high*10;AT24C04_Write(w_buf0,w_buf1); /将数据(shj)写入AT24C04 ADC_Send_Byte(0 x90,0 x41);/通道(tngdo)一ADC转换 val=ADC_Receive_Byte(0 x90);/读取AD转换(zhunhun)的值 show_num(val,1); ADC_Send_Byte(0 x90,0 x42);/通道二ADC转换 val=ADC_Receive_Byte(0 x90);/读取AD转换

27、的值 show_num(val,2);#includevoid IIC_Init()/总线初始化 SCL=1; IIC_DELAY(); SDA=1; IIC_DELAY();void IIC_Start() /启动信号 SDA=1; IIC_DELAY(); SCL=1; IIC_DELAY(); SDA=0; IIC_DELAY();void IIC_Stop()/停止(tngzh)信号 SDA=0; IIC_DELAY(); SCL=1; IIC_DELAY(); SDA=1; IIC_DELAY();void IIC_Ack() /应答(yngd)信号 unsigned char i;

28、 SCL=1; IIC_DELAY(); while(SDA=1)&(i255)i+; SCL=0; IIC_DELAY();void IIC_Write_Byte(u8 date)/写一个(y )字节 u8 i,temp; temp=date; for(i=0;i8;i+) temp=temp1; SCL=0; IIC_DELAY(); SDA=CY;/最高位将移入PSW寄存器的CY位中,然后将CY赋给SDA IIC_DELAY(); SCL=1; IIC_DELAY(); SCL=0; IIC_DELAY(); SDA=1; IIC_DELAY();u8 IIC_Read_Byte()/读

29、一个字节 u8 i,temp; for(i=0;i8;i+) SCL=0; IIC_DELAY(); temp=(temp1)|SDA; IIC_DELAY(); SCL=1; IIC_DELAY(); SCL=0; IIC_DELAY(); SDA=1; IIC_DELAY(); return temp;#include #includelcd1602.hvoid delay(u8 z)/延时函数(hnsh) unsigned char x,y; for(x=z;x0;x-) for(y=110;y0;y-);void LCD_Write_Cmd(u8 com )/液晶(yjng)写命令 L

30、CD_RS=0;/选择写命令(mng lng)模式 LCD_dat=com;/将要写的命令字送到数据总线上 delay(1); LCD_E=1;/使能端给一高脉冲,高脉冲有效 delay(1); LCD_E=0;void LCD_Write_Data(u8 date)/数据写命令 LCD_RS=1;/选择写数据模式 LCD_dat=date; delay(1); LCD_E=1;/使能端给一高脉冲(michng),高脉冲有效 delay(1); LCD_E=0;void LCD_Init()/液晶(yjng)初始化 LCD_WR=0; LCD_Write_Cmd(0 x38);/设置16*2显

31、示,5*7点阵(din zhn),8位数据接口 LCD_Write_Cmd(0 x0c);/设置开显示,不显示光标 LCD_Write_Cmd(0 x06);/写一个字符后地址指针自动加 LCD_Write_Cmd(0 x80);/数据指针定位到第一行第一个字处/ 使得写命令和写数据通过一个函数完成void LCD_Manifest(u8 row,u8 add,u8 date) if(row=1) LCD_Write_Cmd(0 x80+add);if(row=2) LCD_Write_Cmd(0 xc0+add);LCD_Write_Data(date);#includeiic.h#incl

32、udepcf8591.h/ADC发送字节命令数据函数void ADC_Send_Byte(u8 addr,u8 com) IIC_Start(); /启动总线 IIC_Write_Byte(addr); /发送器件地址 IIC_Ack(); IIC_Write_Byte(com); /发送数据 IIC_Ack(); IIC_Stop(); /结束总线 /ADC读字节数据函数 u8 ADC_Receive_Byte(u8 addr) u8 c; IIC_Start(); /启动(qdng)总线 IIC_Write_Byte(addr+1); /发送器件地址(dzh),如果是读则最低位为1即0 x

33、91 IIC_Ack(); c=IIC_Read_Byte(); /读取数据 IIC_Ack(); /发送(f sn)非就答位 IIC_Stop(); /结束总线 return(c); #includeAT24C04.hvoid Delay5us() BYTE n = 4; while (n-) _nop_(); _nop_(); void Delay5ms() WORD n = 2500; while (n-) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); void AT24C04_Start() AT_SDA = 1; /拉高数据线 AT_SCL

34、 = 1; /拉高时钟线 Delay5us(); /延时 AT_SDA = 0; /产生(chnshng)下降沿 Delay5us(); /延时 AT_SCL = 0; /拉低时钟线void AT24C04_Stop() AT_SDA = 0; /拉低数据线 AT_SCL = 1; /拉高时钟(shzhng)线 Delay5us(); /延时 AT_SDA = 1; /产生(chnshng)上升沿 Delay5us(); /延时void AT24C04_SendACK(bit ack) AT_SDA = ack; /写应答信号 AT_SCL = 1; /拉高时钟线 Delay5us(); /延

35、时 AT_SCL = 0; /拉低时钟线 Delay5us(); /延时bit AT24C04_RecvACK() AT_SCL = 1; /拉高时钟线 Delay5us(); /延时 CY = AT_SDA; /读应答信号 AT_SCL = 0; /拉低时钟线 Delay5us(); /延时 return CY;void AT24C04_SendByte(BYTE dat) BYTE i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 AT_SDA = CY; /送数据口 AT_SCL = 1; /拉高时钟线 Delay5us(); /延时 AT_SCL = 0; /拉低时钟线 Delay5us(); /延时 AT24C04_RecvACK();BYTE AT24C04_RecvByte() BYTE i; BYTE dat = 0; AT_SDA = 1; /使能内部(nib)上拉,准备读取数据 for (i=0; i8; i+) /8位计数器 dat = 1; AT_SCL = 1; /拉高时钟(shzhng)线 Delay5us(); /延时 dat |= AT_SDA; /读数据 AT_SCL = 0; /拉低时钟线 Delay5us(); /延时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论