版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日单片机课程设计及实训报告模板x文档仅供参考,不当之处,请联系改正。广东水利电力职业技术学院课程设计/实训报告(-第2学期)学生:周雄君(组长)、周雄君提交日期:6月26日学生签名:周雄君学号与姓名的排序相同学院自动化系课程名称单片机接口技术任课教师郭玲教师评语:成绩评定教师签名湿度探测器周雄君摘要随着人们的生活及其生产水平的不断提高,对生活环境和生产环境的要求就显的尤为重要,温湿度的控制就是一个典型的例子,因此温湿度检测系统就是现代生产生活中应运而生的一种智能、快捷、方便可靠的检测系统,特别是在工业生产中如果检测得不准确就会发生许多的生产事故。为了给现代人工作、科研、生活提供更好的更方便的设施,对现有的温湿度控制器的设计、改良有着很大的现实意义利用ATMEl51系列单片机和HR202湿度模块设计并制作一个简单的湿度检测装置,以单片机为核心,其它外围设备如电源HR202湿度模块等,其中湿度模块D0输出口是数字开关量输出,输出0和1,因此单片主要是检测D0输出口的高低电平。关键词D0输出口的工作模式、单片机如何与湿度模块联系设计要求及目标设计要求:阅读相关文献,学习湿度检测的原理;根据网上提供的用户说明,熟悉所提供的湿度探测模块接口特性。设计并搭建湿度探测电路,调试电路,令模块正常工作。加载传感器的单片机驱动程序,实现湿度探测功能:湿度探测:热毛巾,将传感器模块放置在其附近,观察传感器模块输出信号的变化情况。热水或开水的水蒸气,将传感器模块放置在其附近,观察传感器模块输出信号的变化情况。调节传感器,令在上述情况下,传感器报警(led闪烁等)。选作:将湿度报警的开始时间和结束进行记录,保存到EEPROM里。当有按键按下,就调出记录,显示在数码管上。当有按键按下,就将记录发送到PC端。设计目标:经过湿度模块和51单片机对周围环境湿度进行简单检测,当环境湿度变化或者人为加大减小HR202周围的湿度后,模块达到设定阀值时DO口输出高电平,输送到单片机IO口并用LED和数码管显示相关数据。4位数码管显示AT89C51单4位数码管显示AT89C51单片机湿度模块杜邦杜邦线LED上下限显示LED上下限显示环境湿度环境湿度湿度模块:模块在环境湿度达不到设定阈值时,DO口输出高电平,当外界环境湿度超过设定阈值时,模块D0输出0;杜邦线:杜邦线可用于实验板的引脚扩展,增加实验项目等。能够非常牢靠地和插针连接,无需焊接,能够快速进行电路试验;数码显示:设置定时器,利用外部中断0实现按键发生事件,当环境湿度大于或小于阀值时D0口输出0或1,并开始计时显示在数码管上;LED模块:当D0口输出0或1时LED有相应。三、电路图设计整体电路图:模块电路图:模块接口说明(4线制)
1VCC外接3.3V-5V
2GND外接GND
3DO小板开关数字量输出接口(0和1)
4AO小板模拟量输出接口四、程序流程说明主程序:开启定时器1;开启外部中断0;开启外部中断1;while(1) { if(!HUM)当环境湿度达到阀值时取反,D0口输出低电平 {second=0;时间开始取0msecond=0;TR0=1; P1=temp;while(!HUM)Display();TR0=0;P1=0x00; } Display(); }}定时器1中断程序:{装载定时器1的TH1,TL1初值;每隔250ms就产生1个10us的高电平输出到P3_2IO口,}I2C程序:I2C起始程序:voidstart(){SDA=1;//SDA初始化为高电平“1”SCL=1;//开始数据传送时,要求SCL为高电平“1”delay();SDA=0;//SDA的下降沿被认为是开始信号delay();//等待一个机器周期SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)}voidstop(){SDA=0;//SDA初始化为低电平“0”_nSCL=1;//结束数据传送时,要求SCL为高电平“1”delay();SDA=1;//SDA的上升沿被认为是结束信号delay();SDA=0;SCL=0;}写程序:voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr处写入数据WriteCurrent{start();//开始数据传递WriteCurrent(OP_WRITE);//选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add);//写入指定地址WriteCurrent(dat);//向当前地址(上面指定的地址)写入数据stop();//停止数据传递Delaynms(4);//1个字节的写入周期为1ms,最好延时1ms以上}I2C读程序:unsignedcharReadSet(unsignedcharset_addr)//在指定地址读取{start();//开始数据传递WriteCurrent(OP_WRITE);//选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(set_addr);//写入指定地址return(ReadCurrent());//从指定地址读出数据并返回}软硬件开发过程及调试结果第一天拿到题目后上淘宝和百度文库查阅了关于本次实训要用的湿度模块的相关资料,详细了解了湿度模块的工作原理和电路原理图,如工作条件是什么,阀值如何调整到最佳的值等等,了解好模块的工作原理后才能开始下一步的工作;第二天开始着手编写程序,变写过程中遇到很多问题,经过多次调试编写成功能编译,可是很多功能不完善,如数码时间显示的不正常,串口通信会崩溃等问题;之后经过查阅资料和问同学解决了一些问题,整体上把老师布置的要求先大概完成,选做的先留着,这是预期的想法。第二个礼拜,就是开始对程序进行修改,如:让单片机的显示效果更完善更有特点,计数更准确些,湿度模块更精确地测试到环境湿度等等。实训过程中遇到的困难可谓重重,由于基本功不是太扎实,一些小细节会疏忽遗漏,比如串口与PC之间的通信不灵活,单片机不能正常的发送数码管显示的时间到PC等经过一个多礼拜的实训,老师要求的目的大部分都已经完成,可是串口部分因为程过于复杂等原因始终调试不成功。现象结果:参考文献:[1]《单片机应用技术》主编邵忠良[2]《10天学会单片机》郭天祥[3]《C程序设计教程》主编林小茶附件1程序代码#include<REGX51.H>#include<I2C2.c>sbitHUM=P3^2;sbitSDA=P3^4;//将串行数据总线SDA位定义在为P3.4引脚sbitSCL=P3^3;//将串行时钟总线SDA位定义在为P3.3引脚//*********************变量声明*************************unsignedcharcodetable1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsignedcharDat[]={0,0,0,0},temp=0xaa;unsignedcharsecond=0,msecond=0;//**********************子程序***************************voidDelay1ms(void)//1ms{unsignedcharj,z;for(j=1;j<4;j++)for(z=10;z<200;z++);}voidDelaynms(unsignedcharn){unsignedchari;//k=255;for(i=0;i<n;i++)Delay1ms();}//voiddisplay(unsignedchara,b,c,d){P2=0xff;P0=table1[a];P2_0=0;P0_7=0;Delaynms(2);P2=0xff;P0=table1[b];P2_1=0;P0_7=0;Delaynms(2);P2=0xff;P0=table1[c];P2_2=0;P0_7=1;Delaynms(2);P2=0xff;P0=table1[d];P2_3=0;P0_7=0;Delaynms(2);}voidDisplay(void)//数码扫描{Dat[0]=msecond%10;Dat[1]=msecond/10;Dat[2]=second%10;Dat[3]=second/10;display(Dat[0],Dat[1],Dat[2],Dat[3]);}voidmain(){ unsigneda;EA=1;ET0=1;TMOD=0x01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=0;P1=0x00; while(1) { if(!HUM) {second=0;msecond=0;TR0=1; P1=temp;while(!HUM)Display();TR0=0;P1=0x00;WriteSet(0x31,second); WriteSet(0x32,mecond); if(P3_3==0) {P0=a; a=ReadSet(0x31); a=ReadSet(0x32); } } Display(); }}voidintserv1(void)interrupt1using1{TH0=(65536-37037)/256;TL0=(65536-37037)%256;msecond=msecond+2; if(msecond%25==0) { temp=~temp; P1=temp; }if(msecond>=100){msecond=0;second++;if(second>=100)second=0; }}I2C子程序:#include<REGX51.H>#include<intrins.h>//包含_nop_()函数定义的头文件#defineOP_READ0xa1//器件地址以及读取操作,0xa1即为10100001B#defineOP_WRITE0xa0//器件地址以及写入操作,0xa1即为10100000B#defineucharunsignedcharsbitSDA=P3^4;//将串行数据总线SDA位定义在为P3.4引脚sbitSCL=P3^3;//将串行时钟总线SDA位定义在为P3.3引脚uchara,i;/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),能够认为是1毫秒***************************************************/externvoidDelay1ms(void);externvoidDelaynms(unsignedcharn);voiddelay(){_nop_();//等待一个机器周期_nop_();//等待一个机器周期_nop_();//等待一个机器周期_nop_();//等待一个机器周期}voidstart(){SDA=1;//SDA初始化为高电平“1”SCL=1;//开始数据传送时,要求SCL为高电平“1”delay();SDA=0;//SDA的下降沿被认为是开始信号delay();//等待一个机器周期SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)}voidstop(){SDA=0;//SDA初始化为低电平“0”_nSCL=1;//结束数据传送时,要求SCL为高电平“1”delay();SDA=1;//SDA的上升沿被认为是结束信号delay();SDA=0;SCL=0;}/***************************************************函数功能:从AT24Cxx读取数据出口参数:x***************************************************/unsignedcharReadData()//从AT24Cxx移入数据到MCU{unsignedchari;unsignedcharx;//储存从AT24Cxx中读出的数据for(i=0;i<8;i++){SCL=1;//SCL置为高电平x<<=1;//将x中的各二进位向左移一位x|=(unsignedchar)SDA;//将SDA上的数据经过按位“或“运算存入x中SCL=0;//在SCL的下降沿读出数据}return(x);//将读取的数据返回}/***************************************************函数功能:向AT24Cxx的当前地址写入数据入口参数:y(储存待写入的数据)***************************************************///在调用此数据写入函数前需首先调用开始函数start(),因此SCL=0bitWriteCurrent(unsignedchary){unsignedchari;bitack_bit;//储存应答位for(i=0;i<8;i++)//循环移入8个位{SDA=(bit)(y&0x80);//经过按位“与”运算将最高位数据送到S//因为传送时高位在前,低位在后_nop_();//等待一个机器周期SCL=1;//在SCL的上升沿将数据写入AT24Cxx_nop_();//等待一个机器周期_nop_();//等待一个机器周期SCL=0;//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲y<<=1;//将y中的各二进位向左移一位}SDA=1;//发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,//以让SDA线转由接收设备(AT24Cxx)控制_nop_();//等待一个机器周期_nop_();//等待一个机器周期SCL=1;//根据上述规定,SCL应为高电平delay();//等待一个机器周期ack_bit=SDA;//接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节//若送高电平,表示没有接收到,传送异常SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)returnack_bit;//返回AT24Cxx应答位}/***************************************************函数功能:向AT24Cxx中的指定地址写入数据入口参数:add(储存指定的地址);dat(储存待写入的数据)***************************************************/voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr处写入数据WriteCurrent{start();//开始数据传递WriteCurrent(OP_WRITE);//选择要操作的AT24Cxx芯片,并告知要对其写入数据WriteCurrent(add);//写入指定地址WriteCu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度办公场地租赁合同标准版3篇
- 2025年度美发店教育培训股份入股合同
- 课题申报参考:明代八景图画史料的搜集研究
- 课题申报参考:面向资源受限场景的语音情绪状态学习研究
- 课题申报参考:面向复杂网络环境的AIGC内容标识机制研究
- 2025年度个人网络虚拟商品购买合同示范文本3篇
- 二零二五年度美容美发行业美容仪器研发与销售合同2篇
- 2025年度个人私有房屋购买合同(精装修房屋智能安防系统版)4篇
- 二零二五版美容院养生项目开发与推广合同4篇
- 2025年度个人与公司间商业借款合同标准版4篇
- 诊所负责人免责合同范本
- 2024患者十大安全目标
- 印度与阿拉伯的数学
- 会阴切开伤口裂开的护理查房
- 《钢铁是怎样炼成的》选择题100题(含答案)
- 实验报告·测定鸡蛋壳中碳酸钙的质量分数
- 部编版小学语文五年级下册集体备课教材分析主讲
- 电气设备建筑安装施工图集
- 《工程结构抗震设计》课件 第10章-地下建筑抗震设计
- 公司法务部工作细则(草案)
- 第18课《文言文二则 铁杵成针》(学习任务单)- 四年级语文下册部编版
评论
0/150
提交评论