《单片机应用实习》课程设计报告.doc_第1页
《单片机应用实习》课程设计报告.doc_第2页
《单片机应用实习》课程设计报告.doc_第3页
《单片机应用实习》课程设计报告.doc_第4页
《单片机应用实习》课程设计报告.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

序号(学号):0121009320503学生实习报告书实习类别单片机应用实习实习地址武汉理工大学信息工程学院学 院信息工程专 业通信工程班 级通信1005姓 名指导教师2013年1月6日34目录摘 要IAbstractII1.方案设计与论证11.1课设任务要求11.1.1键盘11.1.2显示电路11.1.3温度检测11.1.4 串口串行通信11.2各模块实现方案21.2.1 数码管选择21.2.2 串口通信21.2.3温度测量模块的选择21.2.4 系统总体设计框图32系统硬件设计与参数计算32.1 单片机最小系统32.2 矩阵键盘42.3 数码管显示电路设计42.4 串口通信部分42.5 DS18B20模块电路设计53软件设计54系统电路仿真64.1 单片机整体系统仿真64.2 温度计仿真75实物照片86设计心得97. 参考文献10附件:11武汉理工大学单片机应用实习摘 要51系列单片机是国内目前应用最广泛的一种8位单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用。51系列及其衍生单片机还会在继后很长一段时间占据嵌入式系统产品的低端市场,因此,作为新世纪的大学生,在信息产业高速发展的今天,掌握单片机的基本结构、原理和使用是非常重要的。本作品采用STC89C52单片机为控制MCU,具有数值显示、温度计、串口通信的功能,三种功能可以根据按键切换,执行其中的某一任务,任务执行效率高。数值显示可以通过按键显示09十个数值;温度计可以通过DS18B20检测当前温度;串口通信则可以实现主从机的串口通信。关键字:STC89C52 温度计 数码管显示 串口通信Abstract51 series microcontroller is domestic currently one of the most widely applied a eight one of single chip, with embedded system, the system of concept of and generally accepted and application. 51 series and its derivative single chip will be in the following after a long time of embedded system products occupy the low end of the market, therefore, as a new century of college students, in the high-speed development of the information industry today, and master the basic structure of single chip microcomputer, principle and the use is very important.This work is licensed STC89C52 microcontroller is MCU control, with digital clock, and the frequency of the plan, the thermometer function, three functions can according to switch button, the execution of a task, the task execution efficiency. Digital clock can through the button to set the current time;Keyword: STC89C52 thermometer digital tube display serial communication武汉理工大学单片机应用实习1.方案设计与论证1.1课设任务要求1.1.1键盘一个4*4的矩阵键盘,其中,10个按键是09数字键;另外六个是功能键,用于功能选择和控制。1.1.2显示电路利用单片机最小系统、6个7段LED数码管、12个按键,设计制作一个键盘、显示电路。可以使用74LS14键盘显示接口电路,也可以使用单片机的并行接口作为键盘显示接口。1.1.3温度检测在上题的硬基础上,制作一个数字温度计。完成以下功能: a. 利用DS18B20可编程1-Wire数字温度传感器芯片,或利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号;b. 当按下键盘上的温度显示按键时将实时温度信息显示在LED显示器上,当按下键盘上的时钟显示按键时,恢复时钟的正常显示;c. 通过串行通信的方式,将采集到的实时温度信息送至第二个单片机系统,并在二个单片机系统显示实时温度。1.1.4 串口串行通信利用51的串口实现串行通信接口电路。本设计中因为是直接两块51通信不需要电平装换,所以串口部分并没有使用FT232或是MAX232之类的电平转换芯片。而是直接把Master的RX和Slaver的TX连接,Master的TX和Slaver的RX连接最后把GND连在一起实现串口通信。1.2各模块实现方案1.2.1 数码管选择方案一 :数码管有共阴、共阳数码管两种;若选用共阴数码管,51单片机I/O不能直接驱动数码管显示,因为电流太小,需要加74LS04/74HC04反相器,提供驱动电流,需要2片芯片控制6个数码管。方案二:若选用共阳数码管,51单片机I/O口不需要提供电流,只需一片74LS04/74HC04反相器就可以驱动六个数码管显示。综合上述选择方案二。 1.2.2 串口通信方案一:采用MAX232和FT232之类的电平转换芯片然后利用51内部集成的串口通信模块实现串口通信。方案二:直接利用51内部的模块然后采用RX/TX/GND三线连接方式,实现串口通信,只是在下载的时候需要利用一下下载模块。综合上述选择,考虑到两块51串口通信的时候并不需要电平转化,为了节约成本,故而采用方案方案二。1.2.3温度测量模块的选择方案一:利用AD590温度传感器芯片和A/D转换器芯片采集温度温度信号,可以满足设计要求。方案二:利用DS18B20可编程1-Wire数字温度传感器芯片,集成度高,单总线模式与方案一相比系统电路相对简单。综合相比选择方案二。1.2.4 系统总体设计框图图1 系统框图 本系统以单片机STC89C52做控制MCU,由矩阵键盘模块、数码管显示模块、串口通信模块、DS18B20测温模块组成。2系统硬件设计与参数计算2.1 单片机最小系统图2 单片机最小系统 单片机最小系统由STC89C52、复位电路、晶振组成。2.2 矩阵键盘图3 矩阵键盘电路图 矩阵键盘由四行四列组成。2.3 数码管显示电路设计图4 数码管显示电路图数码管显示电路由6个单独的7段数码管和74LS04组成,74LS04为数码管提供足够的电流。2.4 串口通信部分图5 串口通信部分电路图考虑到两块51串口通信的时候并不需要电平转化,为了节约成本,直接采用三线连接方式。2.5 DS18B20模块电路设计图6 DS18B20模块电路DS-18B20数字温度传感器DS18B20的数字温度计提供9至12位的摄氏温度测量,并具有与非易失性用户可编程上限和下限报警功能。信息单线接口送入 DS18B20 或从 DS18B20 送出,因此按照定义只需要一条数据线(和地线)与中央微处理器进行通信。它的测温范围从-55 C到 +125 C,其中从-10 C至+85 C可以精确到0.5C 。此外,DS18B20可以从数据线直接供电(“寄生电源”),从而消除了供应需要一个外部电源。3软件设计图7 软件系统框图 本系统软件系统框图如图所示,所有任务函数初始化,通过按键进行任务的切换,实时的更新数码管的显示。4系统电路仿真4.1 单片机整体系统仿真图8 数字时钟仿真图本数字时钟可以通过按键进行时间设置。 4.2 温度计仿真 图9 温度计仿真图 如图所示,DS18B20此时的温度为27,采集测量的温度为27。5实物照片 图10 实物图片图11 实物图片(工作状态)图12 实物工作状态图13 实物图片(测试温度,显示为22.5)6设计心得本次课程设计有较强的综合性,不仅要求设计者能灵活使用单片机的各种指令,熟练使用单片计计数器余定时器,熟练编写顺序结构程序,循环结构程序以及分支结构程序,还要求对单片机的电路连接结构,对数码管管理芯片有明确清晰的了解与认识,否则在设计的第一步就会遇到障碍。经过几星期的查找资料,初步完成电路图的框架。把整个板块分为几个小版块,一步一步的完成,最后完成整个课设作品。通过本次的课设,加深了对单片机应用的理解。同时锻炼了编写C语言程序的能力,熟悉了while,if,for等语句的应用。做课设过程中用到了画图软件Altium.Designer,还有仿真软件Multisim。在一步步的完成自己的课设时,更加熟悉了此类软件的应用,提高了使用软件的技巧。同时也平时课本上学习的模电知识得以应用,还学到了课本没有介绍的应用,如三极管不仅仅有电流放大作用,还可以起到开关的作用。除了知识应用,还锻炼了自己心里承受能力和冷静的分析能力,当遇到程序出错了,面对几百行的程序,要冷静下来,一步一步的分析,找出错误的原因。静不下心,是很难发现错的,所以要冷静。同时学会和他人的合作,如设计分析电路时,互相的讲解,对电路的分析更加的清晰明确。7. 参考文献1 谢自美.电子线路设计实验测试(第三版).武汉:华中科技大学出版社2 康华光. 电子技术基础模拟部分.高等教育出版社,20053 康华光. 电子技术基础 数字部分.高等教育出版社,20054 樊昌信. 通信原理(第五版).北京:国防工业出版社,20055 张肃文.高频电子线路(第三版):高教出版社附件:图14 硬件原理图图15 PCB设计部分程序:#include System.h/数码管正向显示0-F,不带点unsigned char code table0 = 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e ;/数码管正向显示0-F,带点unsigned char code table1 = 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78, 0x00,0x10 ;/数码管反向显示0-9,带点unsigned char code table2 = 0x40,0x4F,0x24,0x06, 0x0B,0x12,0x10,0x47, 0x00,0x02 ;/数码管反向显示0-9,不带点带点unsigned char code table3 = 0xC0,0xCF,0xA4,0x86, 0x8B,0x92,0x90,0xC7, 0x80,0x82 ;/*/实物数码管显示unsigned char code table0 = 0x3f,0x06,0x5b,0x4f, 0x66,0x6D,0x7D,0x07, 0x7f,0x6f,0x77,0x7C, 0x39,0x5E,0x79,0x71 ;*/仿真数码管位选unsigned char code BitSwitch= 0xdf,0xef,0xf7,0xfb,0xfd,0xfe ;/键盘扫描数组unsigned char code Line=0xef,0xdf,0xbf,0x7f;unsigned char Tempi=0; /温度测量变量unsigned char BitNum=0; unsigned char cnt=0;unsigned char Key_Val=0; /初始化按键值为7,时钟显示unsigned char FlagTime=0; /门限时间切换标志位unsigned char TaskSwitch=0; /任务切换,0显示时间,1测试频率unsigned char Cursor_flag=0; /光标闪烁标志unsigned char TaskSwitch_flag=0; /三个任务切换调度标志位unsigned char Timecount=0; /时间计数位char key2=0; /键盘扫描返回的按键编号值char sec3=0; /时钟秒char mte3=0,0,59; /时钟分钟unsigned char hur3=0,0,22; /时钟小时char keynum3=0; /按键次数计算/char keynum3=0;/按键次数计数long fre2=0; /-延时函数-/void delay(unsigned int xms) unsigned int x,y; for(x=xms;x0;x-) for(y=110;y0;y-); /-测量的温度显示-/void Appear_Temp(unsigned int TData) unsigned char TempData3=0; TempData0=TData/100; TempData1=TData%100/10; TempData2=TData%100%10; SEG_Switch_DataOut(BitSwitch0,table0TempData0); SEG_Switch_DataOut(BitSwitch1,table1TempData1); SEG_Switch_DataOut(BitSwitch2,table0TempData2); SEG_Switch_DataOut(BitSwitch5,table012); /5 /-测量的频率显示-/void Appear_Fre(long FData) unsigned int FreData6=0; FreData0=FData/100000; FreData1=FData%100000/10000; FreData2=FData%10000/1000; FreData3=FData%1000/100; FreData4=FData%100/10; FreData5=FData%10; SEG_Switch_DataOut(BitSwitch0,table0FreData0); SEG_Switch_DataOut(BitSwitch1,table0FreData1); SEG_Switch_DataOut(BitSwitch2,table0FreData2); SEG_Switch_DataOut(BitSwitch5,table0FreData3);/5 SEG_Switch_DataOut(BitSwitch3,table0FreData4);/3 SEG_Switch_DataOut(BitSwitch4,table0FreData5);/4/-键盘扫描按键响应标志位切换-/void Judge_Key() Key_Val=keys(); if(Key_Val=0) TaskSwitch_flag=0;TaskSwitch=0; else if(Key_Val=7) TaskSwitch_flag=0; /显示时间TaskSwitch=0; else if(Key_Val=8) TaskSwitch_flag=1; /显示测量的温度 else if(Key_Val=12) TaskSwitch_flag=2; /显示测量的频率TaskSwitch=1; else if(Key_Val=2&TaskSwitch_flag=0) /时钟显示光标左移一位 /Cursor_flag=1; keynum0+; if(keynum0=4) keynum0=1; else if(Key_Val=10&TaskSwitch_flag=0)/时钟光标右移一位 keynum0-; if(keynum0=0|keynum0=-1) keynum0=3; else if(Key_Val=6&(TaskSwitch_flag=0) /时钟相应位加 if(keynum0=1) sec2+;if(sec2=60) sec2=0; if(keynum0=2) mte2+;if(mte2=60) mte2=0; if(keynum0=3) hur2+;if(hur2=24) hur2=0; else if(Key_Val=5&(TaskSwitch_flag=0) /时钟相应位减 if(keynum0=1) sec2-;if(sec2=-1) sec2=59; if(keynum0=2) mte2-;if(mte2=-1) mte2=59; if(keynum0=3) hur2-;if(hur2=-1) hur2=23; /-按键对应的相应响应程序-/void Flag_ResponseTask() if(TaskSwitch_flag=0) Clock_Task(); if(TaskSwitch_flag=1) Temp_Task(); if(TaskSwitch_flag=2) TestFre_Task(); /-温度测量任务-/void Temp_Task() DS18B20_Datchange();Appear_Temp(Get_wen();/-频率测量任务-/void TestFre_Task() Appear_Fre(fre1); /-时钟测量任务-/void Clock_Task() if(sec260) sec0=sec2/10; sec1=sec2%10; mte0=mte2/10; mte1=mte2%10; hur0=hur2/10; hur1=hur2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); if(sec2=60) mte2+; if(mte260) mte0=mte2/10; mte1=mte2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); if(mte2=60) hur2+; if(hur224) hur0=hur2/10; hur1=hur2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); if(hur2=24) hur2=0; hur0=hur2/10; hur1=hur2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); mte2=0; mte0=mte2/10; mte1=mte2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); sec2=0; sec0=sec2/10; sec1=sec2%10; Clock_Appear(sec1,sec0,mte1,mte0,hur1,hur0); /-时钟时间显示-/void Clock_Appear(unsigned char a0,unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5) SEG_Switch_DataOut(BitSwitch4,table0a0);/4 SEG_Switch_DataOut(BitSwitch3,table0a1);/3 SEG_Switch_DataOut(BitSwitch5,table0a2);/5 SEG_Switch_DataOut(BitSwitch2,table0a3); SEG_Switch_DataOut(BitSwitch1,table0a4); SEG_Switch_DataOut(BitSwitch0,table0a5);/-/定时器初始化过程/1、对TMOD赋值,以确定T0,T1的工作方式,/计算初值,并将初值写入TH0/TL0或TH1/TL1/中断方式时,对IE赋值,开放中断/是TR0,TR1置位,启动定时器/计数器定时或计数/-/ void Timer_Init (void) TMOD=0x51; /5:工作在计数模式, 1:16位 TH0=(65536-46080)8; TL0=(65536-46080)%256; EA=1; /开启总中断 ET0=1; /定时器中断0 /-/中断处理函数/-/void T0_ISP(void) interrupt 1cnt+;if(TaskSwitch=1) if (cnt=20&FlagTime) cnt=0; EA=0; fre1=TL1+(TH1=50000) FlagTime=0; EA=1; TL1=0; TH1=0; if (cnt=2&!FlagTime) cnt=0; EA=0; fre1=TL1+(TH18); fre1=fre1*10; fre0=fre1/1000; fre1=fre1-fre0; if(fre150000) FlagTime=1; EA=1; TL1=0; TH1=0; if(TaskSwitch=0) if(cnt=20) cnt=0; EA=0; sec2+; EA=1; TH0=(65536-46080)/256; TL0=(65536-46080)%256; /-键盘扫描程序-/unsigned int keys() unsigned char temp,Line_i; for(Line_i=0;Line_i4;Line_i+) P2=LineLine_i;temp=P2;temp=temp&0x0f;if(temp!=0x0f) delay(20); temp=P2; temp=temp&0x0f; if(temp!=0x0f) while(P2!=LineLine_i); switch(temp) case 0x0e:key0=Line_i*4+1;break; case 0x0d:key0=Line_i*4+2;break; case 0x0b:key0=Line_i*4+3;break; case 0x07:key0=Line_i*4+4;break; return key0; /-任务初始化-/void ALL_Task_Init() DS18B20_INIT(); /DS18B20初始化 Timer_Init(); /定时器初始化 TR0=1; /开启定时器0 TR1=1;/开启定时器1/-按键检测测试程序-/ void Key_Test() unsigned int Key_Val=0; while(1) Key_Val=keys(); SEG_Switch_DataOut(0x01,table0Key_Val); 实 习 日 记 2012 年 12 月 27日(主要记载实习期间的实习内容、实习心得及实习体会)(可加页) 今天开始做单片机课程设计,本次的课程设计内容一共有三个:数字时钟、频率计、温度计。三个任务在一个系统中,可以实现任务的切换,觉得很有意思。做完本次课设可以对自己系统的学习51单片机有很大的帮助。频率计前级模拟部分是本次实验的重点。 实 习 日 记 2012 年 12 月 28 日 今天是单片机的课设的第二个工作日。今天主要任务是设计自己的电路。使电路满足自己的要求;经过自己的设计测频率模拟电路满足要求。实 习 日 记 2012 年 12 月 29 日今天任务是频率计前级电路的模拟仿真。初步的想的设计方案有三种,三极管限幅放大整形、比较器限幅放大整形、运算放大器限幅放大整形。比较器方案输出的波形容易抖动,频率不稳定,运算放大器方案频率特性不好。三极管方案能够满足要求。实 习 日 记 2012 年 12月 30 日通过前三天的准备,熟悉本次的题目,了解题意,对系统的整体设计有个大体的设计理念,构思系统运行模式及框架。通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。这个设计过程中,我们通过在原有的计数器系统进行了改进,使之增添了暂停、计数、清零等的三个控制功能,使之成为一个更加适用,功能更加完备的属于自己的一个系统。设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。实 习 日 记 2012 年 12 月 31 日今任务是仿真程序的仿真, 首先根据矩阵键盘的工作原理,对矩阵键盘的键值进行判断,然后对键值进行液晶的相应显示。第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。 第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在寄存器里。第四步,从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。通过对矩阵键盘的简直读取,了解了按键的工作原理,在按键读取时要注意的是消抖和去抖。消抖和去抖可由硬件电路和软件电路实现,硬件通过RS触发器实现消抖,而软件通过适当延时在读取进行消抖,键值读取时还要注意对松手的监测。否则会出现软件BUG。实 习 日 记 2013 年 1 月 1 日根据拟定的实施方案进行系统的软件仿真,对温度计DS18B20进行仿真调试。通过对DS18B20的文档阅读我们可以了解到DS18B20的温度有读取时间和转换时间,另外的是DS18B20对时序要求比较严格,由于采用的是C语言编程,使用时会出现时序误差,这就需要我们细心的进行调试。实 习 日 记 2013 年 1 月 2 日今天任务是程序的组合,我遇到了几个难点,1:功能如何转换;2:定时器的资源不够;3:频率计信号的处理。通过查阅资料,我们没有解决的是定时器资源的问题,

温馨提示

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

评论

0/150

提交评论