




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微机与单片机原理及应用课程设计报告题 目:模拟智能灌溉系统 学 号: 110603136 姓 名: 黄鑫 年 级: 11级自动化 指导教师: 丛玉华 开课学期教室上交时间成绩大三上实B3032013-12-21 一、 硬件部分1、涉及芯片:(1)、STC90C519RD+基本功能8位CPU·4kbytes程序存储器(ROM) (52为8K)128bytes的数据存储器(RAM) (52有256bytes的RAM)32条I/O口线·111条指令,大部分为单字节指令21个专用寄存器2个可编程定时/计数器·5个中断源,2个优先级(52有6个)一个全双工串行通信口外部数据
2、存储器寻址空间为64kB外部程序存储器寻址空间为64kB逻辑操作位寻址功能·双列直插40PinDIP封装单一+5V电源供电CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产
3、生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M12M。引脚图引脚功能P0口有三个功能: 1、外部扩展存储器时,当做数据总线 2、外部扩展存储器时,当作地址总线 3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。、P1口只做I/O口使用:其内部有上拉电阻。 P2口有两个功能: 1、扩展外部存储器时,当作地址总线使用 2、做一般I/O口使用,其内部有上拉电阻; P3口有两个功能:除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置,PSEN 外部程序存储器读选通信号ALE 地址锁存控制信号EA 访问和序存储器控制信号XTAL
4、1和XTAL2 外接晶振引脚。当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。VCC:电源+5V输入 VSS:GND接地 RST 复位信号(2)、74HC138基本功能HC138 按照三位二进制输入码和赋能输入条件,从8 个输出端中译出一个 低电平输出。真值表 引脚图引脚功能(3)、DS1302基本功能74HC138可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。引脚图引脚功能DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2
5、两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电
6、平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。数据格式控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。(4)、PCF8591基本功能PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。引脚图引脚功能AIN0AIN3:模拟信号输入端。 A0A2:引脚地址端。VDD、VSS:
7、电源端。(2.56V) SDA、SCL:I2C 总线的数据线、时钟线。OSC:外部时钟输入端,内部时钟输出端。EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。AGND:模拟信号地。 AOUT:D/A 转换输出端。 VREF:基准电源端。数据格式在传输数据的时候,SDA线必须在时钟的高电平周期保持稳定,SDA的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变 。SCL 线是高电平时,SDA 线从高电平向低电平切换,这个情况表示起始条件;SCL 线是高电平时,SDA 线由低电平向高电平切换,这个情况表示停止条件。(5)、24C02基本功能串行E2PROM是基于I2C-BUS
8、的存储器件,遵循二线制协议,其具有接口方便,体积小,数据掉电不丢失等特点。引脚图引脚功能A0,A1,A2:器件地址选择 SDA:串行数据、地址 SCL:串行时钟WP:写保护 Vcc:1.8V-6.0V工作电压 Vss:地数据格式同上(PCF8591)2、 系统电路图:二、 软件部分2、程序#include<reg51.h> #include"i2c.h" #include"ds1302.h" #include<intrins.h> #define GPIO_DIG P0 /-定义使用的IO-/-定义PCF8591的读写地址-/#d
9、efine WRITEADDR 0x90 /写地址#define READADDR 0x91 /读地址/74LS138定义 sbit LSA=P22; sbit LSB=P23; sbit LSC=P24; /独立按键 sbit S4=P10; sbit S5=P11; sbit S6=P12; sbit S7=P13; sbit LED_RED=P14; /红灯,手动模式 sbit LED_GREEN=P15; /绿灯,自动模式 sbit fengmingqi=P16; sbit RELAY=P17; bit flag_mode=0; bit issetting=0; uchar num=5
10、0; /-定义全局变量-/ unsigned char code DIG_CODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData8;/用来存放要显示的8位数的值 unsigned char table8; /用来存放自动模式下设置界面 /-声明全局变量-/ void DigDisplay(); void Delay10ms(uchar c); bit I
11、SendByte(unsigned char sla,unsigned char c); unsigned char IRcvByte(unsigned char sla); void At24c02Write(unsigned char ,unsigned char ); unsigned char At24c02Read(unsigned char ); void Timer0Configuration(); void Key_down(); /*PCF8591*/ void Pcf8591SendByte(unsigned char channel); unsigned char Pcf
12、8591ReadByte();/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main() unsigned int adNum;float value;LED_RED=0;LED_GREEN=0;num = At24c02Read(2);Ds1302Init(); while(1) Pcf8591SendByte(0); /发送电位器转换命令 adNum = Pcf8591ReadByte(); /将转换结果读走value = adNum / 2.55 ; if(adNum>99) adNum=99;if(adNum>num
13、) RELAY=1; fengmingqi=1; else RELAY=0;fengmingqi=0; Ds1302ReadTime();Key_down();DisplayData0 = DIG_CODETIME2/16;/时DisplayData1 = DIG_CODETIME2&0x0f; DisplayData2 = 0x40;DisplayData3 = DIG_CODETIME1/16;/分DisplayData4 = DIG_CODETIME1&0x0f;DisplayData5 = 0x00;DisplayData6 = DIG_CODEadNum/10;Dis
14、playData7 = DIG_CODEadNum%10;table0=0x40;table1=0x40;table2=0x40;table3=0x40;table4=0x40;table5=0x40;table6=DIG_CODEnum/10;table7=DIG_CODEnum%10; DigDisplay();/* 按键*/void Key_down() uchar n=0; if(S7=0) Delay10ms(1); if(S7=0) if(flag_mode=0) flag_mode=1; else flag_mode=0; while(n<50)&&(S7=
15、0) Delay10ms(1); n+; n=0;if(flag_mode) /手动模式 LED_RED=1; LED_GREEN=0; if(S6=0) Delay10ms(1);if(S6=0) fengmingqi=fengmingqi;while(n<50)&&(S6=0) Delay10ms(1); n+;n=0; if(S5=0) Delay10ms(1);if(S5=0) RELAY=0; /打开灌溉系统while(n<50)&&(S5=0) Delay10ms(1); n+;n=0; if(S4=0) Delay10ms(1);if(
16、S4=0) RELAY=1; /关闭灌溉系统 while(n<50)&&(S4=0) Delay10ms(1); n+;n=0; if(adNum>num) RELAY=1; fengmingqi=1; else/自动模式 LED_RED=0;LED_GREEN=1; if(S6=0) Delay10ms(1);if(S6=0) issetting=issetting;while(n<50)&&(S6=0) Delay10ms(1); n+;n=0; if(issetting) if(S5=0) Delay10ms(1);if(S5=0) if
17、(num<99) num+;while(n<50)&&(S5=0) Delay10ms(1); n+;n=0; if(S4=0) Delay10ms(1);if(S4=0) if(num>0) num-;while(n<50)&&(S4=0) Delay10ms(1); n+;n=0; else At24c02Write(2,num);if(adNum>num) RELAY=1; fengmingqi=1;else RELAY=0; fengmingqi=0; /* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显
18、示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i+)switch(i) /位选,选择点亮的数码管,case(0):LSA=0;LSB=0;LSC=0; break;/显示第0位case(1):LSA=1;LSB=0;LSC=0; break;/显示第1位case(2):LSA=0;LSB=1;LSC=0; break;/显示第2位case(3):LSA=1;LSB=1;LSC=0; break;/显示第3位case(4):LSA=0;LSB=0;LSC=1; break;/
19、显示第4位case(5):LSA=1;LSB=0;LSC=1; break;/显示第5位case(6):LSA=0;LSB=1;LSC=1; break;/显示第6位case(7):LSA=1;LSB=1;LSC=1; break;/显示第7位if(issetting) GPIO_DIG=tablei;/发送段码else GPIO_DIG=DisplayDatai;/发送段码j=50; /扫描间隔时间设定while(j-);GPIO_DIG=0x00;/消隐/* 函 数 名 : void At24c02Write(unsigned char addr,unsigned char dat)* 函
20、数功能 : 往24c02的一个地址写入一个数据* 输 入 : 无* 输 出 : 无*/void At24c02Write(unsigned char addr,unsigned char dat)I2C_Start();I2C_SendByte(0xa0, 1);/发送写器件地址I2C_SendByte(addr, 1);/发送要写入内存地址I2C_SendByte(dat, 0);/发送数据I2C_Stop();/* 函 数 名 : unsigned char At24c02Read(unsigned char addr)* 函数功能 : 读取24c02的一个地址的一个数据* 输 入 : 无
21、* 输 出 : 无*/unsigned char At24c02Read(unsigned char addr)unsigned char num;I2C_Start();I2C_SendByte(0xa0, 1); /发送写器件地址I2C_SendByte(addr, 1); /发送要读取的地址I2C_Start();I2C_SendByte(0xa1, 1); /发送读器件地址num=I2C_ReadByte(); /读取数据I2C_Stop();return num;/* 函 数 名 : Pcf8591SendByte* 函数功能 : 写入一个控制命令* 输 入 : channel(转换
22、通道)* 输 出 : 无*/void Pcf8591SendByte(unsigned char channel)I2C_Start();I2C_SendByte(WRITEADDR, 1); /发送写器件地址I2C_SendByte(0x40|channel, 0); /发送控制寄存器I2C_Stop();/* 函 数 名 : Pcf8591ReadByte* 函数功能 : 读取一个转换值* 输 入 : 无* 输 出 : dat*/unsigned char Pcf8591ReadByte()unsigned char dat;I2C_Start();I2C_SendByte(READADD
23、R, 1);/发送读器件地址dat=I2C_ReadByte(); /读取数据I2C_Stop(); /结束总线 return dat;void Delay10ms(uchar c) uchar a,b; for(;c>0;c-) for(b=38;b>0;b-) for(a=130;a>0;a-); 三、 系统说明手册功能简述:要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设定及存储等基本功能。通过电位器Rb2输出电压信号,模拟湿度传感器输出信号,再通过AD采集完成湿度测量功能;通过DS1302芯片提供时间信息;通过按键完成灌溉系统控制和湿度阈值调整功能,通过LED完成系统工作状态指示功能。系统硬件电路主要由单片机控制电路、显示单元、ADC采集单元、RTC单元、EEPROM存储单元、继电器控制电路及报警输出电路组成,系统框图如图1所示:1. 系统工作及初始化状态说明1.1、自动工作状态,根据湿度数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏开发临时测试工程师项目合同
- 子女医疗费用分担及疾病防治服务合同
- 企业管理核心要素与实践策略
- 架子工高空作业安全责任及劳务派遣合同
- 《成交策略解析与应用》课件
- 影视剧化妆间租赁与化妆服务一体化合同
- 《心情与养生》课件2
- 《肺部听诊解析》课件
- 公交公司安全管理体系构建与实施
- 《心理健康与生活品质》课件
- GA 576-2005防尾随联动互锁安全门通用技术条件
- 河北经贸大学经济管理学院《大学英语》课件-Unit3The art of communication
- 大跨度连续梁线型监控课件
- 产品开发设计课件
- 室内设计综合施工图制作教案
- 新部编版四年级下册道德与法治全册优秀教学课件(1-12课)
- 公司送电工作票
- 案件进度管理规定表--执行
- 美国药品批发行业发展历程译稿
- 十字头零件的加工工艺规程及精车外圆工装夹具毕业设计(机械CAD图纸)
- 含公式新财务报表模板 包括:三大报表、所有者权益变动表、和相关指标计算
评论
0/150
提交评论