东北大学单片机课程设计报告.docx

上传人:b****8 文档编号:29798673 上传时间:2023-07-27 格式:DOCX 页数:52 大小:549.48KB
下载 相关 举报
东北大学单片机课程设计报告.docx_第1页
第1页 / 共52页
东北大学单片机课程设计报告.docx_第2页
第2页 / 共52页
东北大学单片机课程设计报告.docx_第3页
第3页 / 共52页
东北大学单片机课程设计报告.docx_第4页
第4页 / 共52页
东北大学单片机课程设计报告.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

东北大学单片机课程设计报告.docx

《东北大学单片机课程设计报告.docx》由会员分享,可在线阅读,更多相关《东北大学单片机课程设计报告.docx(52页珍藏版)》请在冰豆网上搜索。

东北大学单片机课程设计报告.docx

东北大学单片机课程设计报告

1、引言

1.1实习的目的和要求

本次生产实习的目的是为了增强我们对所学知识的感性认识,进一步巩固我们所学的专业课程。

这是一个在我们学习了专业基础课程和相当的专业课程以后,进行的一个理论联系实际的教学环节。

通过生产实习使我们接触到了广播发射的真实过程,达到了理论与实践相结合的目的,加深了我们对所学知识的了解,同时也拓宽了我们的知识面。

通过在实验室的独立设计环节使我们获得了基本操作训练,培养我们分析问题和解决问题的能力。

本次生产实习要求本专业学生无特殊情况者全员参与,按时作息,不得迟到早退。

按照安排参观辽宁广播电台,在实验室独立完成自己的设计。

1.2实习内容

本次实习内容分为两个部分。

第一部分,组织学生到辽宁省广播电台参观,通过参观使我们真实的了解广播发射的过程,了解这一过程中用到的设备这其中涉及到的我们所学的知识。

在这一环节中通过接待人员的讲解,以及我们的互动,我们更完整的了解到了广播的发射,对所学知识的理解更加直观深刻。

第二部分是我们自己在实验室独立完成一项基于51单片机的设计。

在这个过程中,每个人可以根据自己的兴趣选择适合自己的题目或者自拟题目,利用一周的时间,自主完成一项自己的设计,最终向验收老师展示自己的设计成果。

这一环节更注重锻炼同学自己的整体设计能力,包括软件编程和硬件操作等重要技能。

2、企业参观

本次生产实习我们参观的是辽宁广播电台,在广播电台我们参观了外部的发射塔以及内部信号处理的相关设备,接待人员为我们讲解了这些设备的基本工作原理,同时也告诉我们这些用到的是我们本科阶段所学的那门课的知识。

在参观过程中,他们也向我们展示了相关的设备,对照着真实的设备为我们讲解各部分的功能。

在他们讲解中,我也更深刻的了解到我们自己技术的落后,里面太多的设备来自国外。

我们参观的首先是从发射塔开始的,接待人员为我们讲解了发射塔的基本构造,除了上面我们能看到的塔体以外,地下还需要埋设圆形网络,半径与塔体高度相当。

同时向我们介绍了他们一些采用先进技术的传输线,延伸到我们学过的同轴电缆,当然他们的传输线比同轴电缆先进,也贵多了。

在大楼内部的信号处理环节,接待人员向我们讲解了他们的一些设备的用途,然后向我们一一展示了信号处理的各个环节用到的技术和设备,同时将接收到模拟信号然后转换为数字信号处理最终转换为模拟信号发射这样一个复杂的过程详细的向我们一一讲述。

在这一环节中有很多我们课本上学习到的知识,比如推挽电路等等,内部的一些设备便是由单片机实现控制的。

在各个设备上我们都能清楚的看到电路板,同时他们也向我们展示了他们维修过的一块小的电路板。

在本次参观后,我体会最深的一点便是,我们需要牢固掌握我们专业课程中所学的基础知识,真正的把这些基础知识掌握好,掌握扎实,而不能好高骛远觉得这些知识没有用。

在日后我们所学的或者是所用的好多都是基于这些基础知识,基础知识不牢固,那么是很难走出很远的。

另外一点我也体会到我们基础知识的薄弱,在讲解过程中,他们提出的问题很少有人能回答好,即使他讲解了,能听的真正明白的人也不多,因为好多人已经连基本的名词术语都忘记了。

所以这次参观我体会最什么的就是在今后学习中要真正的牢固掌握基础知识,把丢掉的捡起来,为以后做好基础。

另外一点便是上文中提到的,国产的设备跟别人比还有很长的路要走,希望自己能够通过自己的努力,有机会为铺平这条路尽一份力绵薄之力。

3.基于51单片机的近距离可控智能洗衣机系统

3.1选题意义及系统主要功能

洗衣机已经很普遍了,除了基本的洗衣功能之外,各个洗衣机在功能设定上略有差异,本洗衣机系统突破了在功能设定上的缺陷,让用户拥有更多的设定权限,并且提供LCD显示,方便用户对各个功能的设定以及对当前的洗涤情况和一些其他的信息的查询。

另一方面该洗衣机有计费功能,因此可以放在宿舍等公共场所进行收费式洗涤。

所以该洗衣机系统具有更强的普适性。

适合各类用户购买使用。

该洗衣机系统主要有一下功能,首先是作为洗衣机的基本功能,上水,浸泡,强洗,轻洗,弱洗,漂洗,甩干。

上水环节采用AD0832芯片将水位变化这一模拟量转换为数字量发送给51单片机,由单片机监控水位。

水位是可以由用户进行设定的,分为3个级别,用户在开始洗涤之前可以根据衣物的多少设定最低水位,这样可以避免水资源的浪费。

浸泡环节,采用内部定时器实现浸泡时间的精确定时。

洗涤环节,这一环节包括强洗,弱洗,轻洗,脱水,漂洗,这些环节的时间以及进行哪些环节用户都是可以设定的,用户可以根据自己的需要选择强洗,弱洗或者轻洗,同时也可以根据具体情况选择洗涤多上时间,以及漂洗的次数等等。

另外在洗涤环节中电动机采用的是正反转结合。

甩干时的电动机转速要大一些,并且只进行正转。

以上介绍的是洗衣机的一些基本功能,另外为了方便用户使用附加了一些功能,首先是上文提到的LCD显示屏,屏幕上显示一些提示信息和洗涤信息,用于人机交互,在运行洗衣机以后,LCD上会显示一些操作的提示信息,提示你设定水位,以及当前的设定值;提示设定漂洗次数,以及当前的设定值;提示设定洗涤时间,以及当前的设定值;提示设定洗涤类型,即全自动洗涤还是只进行轻洗或者弱洗,并显示当前选定的洗涤类型。

在洗涤开始后LCD屏幕上会提示当前上水的水位值,当前洗涤进行到哪一环节,当前距离洗涤结束还有多长时间,若是收费洗涤的话屏幕上还会显示当前累计费用是多少。

另外一项就是在LCD屏幕最下面一行是一个数字钟,这是由DS12887芯片做的时钟,在LCD上实时显示当前时间,用户可以在屏幕上方便的看时间。

洗衣机单片机和LCD上电时钟就会运行,无需启动洗衣机。

最后介绍的是在洗衣机系统上加的一个RS232通信模块,这个模块的作用是设定洗衣机功能的按键模块不需要装在洗衣机侧面可以通过串口把按键模块装在洗衣机周围的墙壁上,这样做的目的是洗衣机一般较低,对于老年人来说设定功能的时候弯腰不方便,另外小孩子可能经常去按那些键,时间久了按键可能坏掉,所以可以把按键模块装在周围墙壁上,通过RS232与洗衣机通信,这样既可以避免前文提到的弊端,也不至于使挪动洗衣机很困难。

按键模块是由8279芯片完成的,用户通过按键设定自己需要的功能之后由RS232发送给洗衣机系统,有洗衣机系统按照用户的意愿执行洗涤功能。

在本系统设计中,所有工作由我自己独立完成。

从开始的系统总流程图以及主要模块流程图的设计,到各个模块的程序的编写到最后的调试均是我自己独立完成。

在书写代码时用过一些实验室已有的模块程序,其中LCD,8279,DS12887这三个模块的初始化用的实验室的模块,但是LCD显示函数是自己完成的,因为实验室提供的查表找汉字码的方法个人觉得不适用。

另外8279和DS12887也做过这样的改动,因为实验室这几个模块程序一般不符合我的整个系统设计的需要,除了初始化程序以外,其他均需改动,这些都是自己独立完成。

3.2系统功能设计

本系统分为两个部分,首先是发送部分,包括键盘模块,RS232模块和LCD模块;然后是接收执行部分,包括步进电机,LCD显示模块,水位检测模块,DS12887的时钟模块。

首先介绍发送部分的3个模块。

3.2.1键盘模块

键盘模块主要用的是8279芯片,用户通过键盘输入自己的功能设定信息。

键盘模块的硬件电路如下图所示:

图1-1键盘硬件连接

8279的IRQ引脚接的是51单片机的外部中断1引脚,CLK接的是ALE引脚。

当用户按下按键时就会通过IRQ引脚向单片机发送外部中断请求,这时单片机从8279的数据口读出键值,然后根据检测到的键值,执行相应的操作,并在LCD上显示相应的键值。

键值检测模块设计流程图1-2所示。

检测到按键以后向CPU产生外部中断申请,此时CPU可读取键值,并进行后续操作。

3.2.2发送部分的LCD显示模块

LCD模块主要是在系统运行后为用户显示一些提示信息,同时在按键操作后显示当前的操作信息和下一步操作的提示信息。

LCD的硬件连接如图1-3所示。

本系统采用并行模式,按照实验指导书要求将实验板上的开关拨到相应的位置。

图1-2键值检测流程图

图1-3LCD液晶显示硬件连接图

LCD显示模块负责显示提示信息以及相关的当前状态的显示。

在不系统中用到两块LCD液晶显示屏。

在发送端的液晶显示用于提示用户当前需要进行的操作,比如:

请输入洗涤类型,请设定水位等信息。

同时也显示当前用户输入的键值。

洗衣机系统一端的显示器用于显示当前正在进行的洗涤环节,以及距离结束的时间,和由DS12887时钟芯片得到的当前时间。

在上水时,lCD将实时显示当前水位等信息。

LCD的流程图设计如图1-4所示。

3.2.3串口发送模块

该模块的主要功能是将用户的按键信息发送给洗衣机系统,有洗衣机系统执行相应的功能,在本系统中主要发送水位等级、漂洗次数、洗涤类型和洗涤时间。

以下是发送模块的流程图:

图1-4LCD显示模块流程图

图1-5串口发送模块流程图

3.2.4CPU控制模块

这一部分主要完成采集各模块信息,分析之后发送到洗衣机系统,使其完成相应的功能。

这部分的流程分为两部分:

其一是主程序;其二是中断服务程序。

图1-6控制模块主程序流程图

图1-7控制模块中断服务程序流程图

 

3.2.5洗衣机系统

1、电动机控制模块

该模块用来完成洗衣机的主要功能:

强洗、轻洗、弱洗、脱水、漂洗、甩干这些过程均由该模块完成,知识转动速度不同,转动方向除了甩干和脱水是单方向转动外,其余均为正反转结合。

所以本文只做一个流程图,甩干和脱水没有流程图中的反转环节,各个过程电动机的转速是由各拍之间的延时时间决定的。

延时越长转动越慢,每拍转完转动的角度是3.75度,两圈一共需要转动24个8拍。

本系统硬件连接如图1-8所示。

采用4相步进电机。

采用4相8拍控制方式。

图1-8步进电机硬件连接图

软件设计流程图如图1-9所示。

该程序是一个公用程序,强洗,轻洗,弱洗,脱水,甩干,漂洗等都用这一个程序,判断该过程是否结束的标志位不一样,各拍之间的延时不一样而已,其中甩干和脱水没有反转环节。

图1-9步进电机模块流程图

2、水位监测模块

本模块用的是AD0809,通过电位计模拟上水,由AD芯片将模拟量转为数字量,由单片机比对当前上水量与设定水位的大小,确定是否执行洗涤的步骤。

硬件连接如图1-10所示。

图1-10水位检测模块硬件连接图

水位检测模块在上水环节由电位计模拟上水,AD检测模拟量并将其转换为数字量,单片机读出数字量与设定的水位值进行比较,直到当前水位值大于设定值才开始继续进行后续操作。

软件设计流程图如图1-11所示。

图1-11水位检测模块流程图

3、主控制模块

主控模块主要是单片机,这一部分也由两部分完成,定时器中断服务函数和主程序两部分完成,定时器0的主要作用是:

1.计时控制各个洗涤环节严格在规定时间内完成。

2.控制LCD模块实时显示,屏幕上数据每1秒钟更新一次,当前剩余时间,以及正在进行的环节;上水时当前水位值是没50ms更新一次。

主程序主要完成各个子模块之间的调度,以及相关参数的计算。

主控制模块的软件设计流程图如图1-12和图1-13所示。

图1-12控制模块主程序流程图

 

图1-13控制模块中断服务程序流程图

3.2.6源程序代码

1.控制端源程序

本部分包括键值检测以及相关处理和RS232的发送部分的程序。

2.洗衣机系统源程序

#include

#include

#include

#include

#include

#definesecondXBYTE[0x6000]/*秒寄存器地址*/

#definesec_alarmXBYTE[0x6001]

#defineminuteXBYTE[0x6002]/*分寄存器地址*/

#definemin_alarmXBYTE[0x6003]

#definehourXBYTE[0x6004]/*小时寄存器地址*/

#defineweekXBYTE[0x6006]/*星期寄存器地址*/

#definedateXBYTE[0x6007]/*日期寄存器地址*/

#definemonthXBYTE[0x6008]/*月寄存器地址*/

#defineyearXBYTE[0x6009]/*年寄存器地址*/

#defineregaXBYTE[0x600A]/*A寄存器地址*/

#defineregbXBYTE[0x600B]/*B寄存器地址*/

#defineregcXBYTE[0x600C]/*C寄存器地址*/

#defineregdXBYTE[0x600D]/*D寄存器地址*/

#definew_c_addXBYTE[0x2070]/*写命令字地址*/

#definew_d_addXBYTE[0x2071]/*写数据地址*/

#definer_s_addXBYTE[0x2072]/*读状态字地址*/

#definer_d_addXBYTE[0x2073]/*读数据地址*/

#defineIN0XBYTE[0x2030]/*通道0地址*/

unsignedcharcodenum[]="0123456789";

unsignedcharrflag;

unsignedcharbdatasta_ds;

sbituip=sta_ds^7;

unsignedchards_h;

unsignedchards_m;

unsignedchards_s;

unsignedchards_t;

unsignedcharbdatads_time;

voidcheck_ds12887(void);

voidclock(void);

voidDelay(unsignedintxms);

voidtimer0_Init();

voidstrowash(unsignedintveloc);

voidwash(unsignedintveloc);

voidshuaigan(unsignedintveloc);

voidpiaowash(unsignedintveloc);

voidweakwash(unsignedintveloc);

voidtuoshui(unsignedintveloc);

voidcheck_lcd(void);

voidlcd_play(unsignedcharloc,unsignedchar*p);

voidlcd_time(unsignedcharx,unsignedchary,unsignedcharp);

voidsh_ck(unsignedcharshuiwei);

voidlcd_busy(void);/*LCD忙状态检测函数*/

voidshy_time(void);

voidjs232(void);

voidshy_da(unsignedcharpk);

voidshy_jp(void);

voidjinpao(unsignedcharjtime);

voidmony(void);

voidzant(void);

voidzt(void);

voidtimer1_Init();

unsignedcharkey_num[4];

unsignedintpia_num;

unsignedcharadc0809();

unsignedcharcodetab[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfC,0xf8,0xf9};//正转

unsignedcharcodehz[]="进入洗衣机系统";

unsignedcharcodehz1[]="正在上水";

unsignedcharcodehz2[]="正在强洗";

unsignedcharcodehz3[]="正在轻洗";

unsignedcharcodehz4[]="正在弱洗";

unsignedcharcodehz5[]="正在漂洗";

unsignedcharcodehz6[]="正在甩干";

unsignedcharcodehz7[]="正在脱水";

unsignedcharcodehz8[]="0123456789";

unsignedcharcodehz9[]="剩余时间:

";

unsignedcharcodehz10[]="洗涤结束";

unsignedcharcodehz11[]="请取衣物";

unsignedcharcodehz12[]="传输异常";

unsignedcharcodehz13[]="采用默认设置";

unsignedcharcodehz14[]="当前水位:

";

unsignedcharcodehz15[]="正在浸泡:

";

unsignedcharcodehz16[]="目前费用:

";

unsignedcharcodehz17[]="缴费分!

";

unsignedcharcodehz18[]="时间";

 

unsignedcharbdatastatus;/*可位寻址片内数据存储器,允许位与字节混合访问*/

sbitbusy=status^7;/*“忙”线的第7位*/

sbitLED1=P1^7;

sbitzanting=P1^6;

sbitLED=P1^5;

sbitfmq=P1^4;

unsignedintstr_time;

unsignedintwas_time;

unsignedintwea_time;

unsignedinttuo_time;

unsignedintpia_time;

unsignedintshg_time;

unsignedintjp_time;//各环节结束的标志位

unsignedinttime;

unsignedintztime;

unsignedcharkey;

unsignedcharleix;

unsignedintpw_time;

unsignedintwashtime;

unsignedintcont=0;

unsignedintR_time;

unsignedintjp;

unsignedintfgp;

unsignedcharjs;

unsignedcharshuiwei;

unsignedintmoney=0;

unsignedcharzan=0;

unsignedcharbi,si,gi;

/**********************************************************************

**洗衣机洗衣服函数

**washtime表示洗涤时间;shuiwei表示水位,分为3个等级;

**pia_num表示漂洗次数,3到5次,leix表示全部或者只进行轻洗或者弱洗

**

***********************************************************************/

voidmain()

{

unsignedchari=0,k=0,j=0;

EA=1;

EX1=1;

check_ds12887();

/********标志位初始化***************/

jp=0;

fgp=1;

str_time=0;

was_time=0;

wea_time=0;

tuo_time=0;

pia_time=0;

shg_time=0;

jp_time=0;//标志位初始化

check_lcd();

lcd_play(0x80,hz);

js232();

while(js==1)

{

while(RI==0)

{

}

key=SBUF;

key_num[k]=key;

k++;

RI=0;

if(k==4)

{

js=0;

ES=0;

}

}

shuiwei=key_num[0]%16;

pia_num=key_num[1]%16;

washtime=key_num[3]%16;

leix=key_num[2]%16;//将接收到的水位、漂洗次数、洗涤时间、和洗涤类型读出来

timer1_Init();

/************判断接收到的数据是否合法***********************/

if(washtime<1||washtime>6)

{

lcd_play(0x80,hz12);

lcd_play(0x90,hz13);

washtime=2;

fmq=0;

Delay(1000);

fmq=1;

}

if(pia_num<3||pia_num>5)

{

lcd_play(0x80,hz12);

lcd_play(0x90,hz13);

pia_num=3;

fmq=0;

Delay(1000);

fmq=1;

}

if(shuiwei<1||shuiwei>3)

{

lcd_play(0x80,hz12);

lcd_play(0x90,hz13);

shuiwei=3;

fmq=0;

Delay(1000);

fmq=1;

}

if(leix<1||leix>3)

{

lcd_play(0x80,hz12);

lcd_play(0x90,hz13);

leix=1;

fmq=0;

Delay(1000);

fmq=1;

}

/**********根据接收到的指标计算各个环节的时间************/

ztime=washtime*60;

pw_time=ztime/6;

time=ztime*1000/50/6;

/**********上水程序*********************************/

check_lcd();

lcd_play(0x80,hz1);

sh_ck(shuiwei);

/***********根据洗涤类型判断洗涤流程**********/

if(leix==1)

{

str_time=0;

cont=0;

}

if(leix==2)

{

str_time=1;

cont=0;

was_time=0;

}

if(leix==3)

{

str_time=1;

was_time=1;

cont=0;

wea_time=0;

}

/*******

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1