单片机课设完整的.doc

上传人:豆**** 文档编号:17506958 上传时间:2022-05-24 格式:DOC 页数:22 大小:174.50KB
返回 下载 相关 举报
单片机课设完整的.doc_第1页
第1页 / 共22页
单片机课设完整的.doc_第2页
第2页 / 共22页
点击查看更多>>
资源描述

《单片机课设完整的.doc》由会员分享,可在线阅读,更多相关《单片机课设完整的.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流单片机课设完整的.精品文档.福州大学至诚学院 单片机原理及应用课程设计题 目: 抢答器 姓 名: 金鑫 学 号: 210992115 系 别: 电气工程与自动化系 专 业: 电气工程及其自动化 年 级: 2009 起讫日期 : 2011.12.12 2011.12.23 指导教师: 张丽萍 目 录第1章 课程设计目的,题目和目标以及设计方案11.1 课程设计目的11.2 课程设计题目和实现目标11.3 设计方案11.3.1 设计思路 21.3.2 器件功能说明21.3.3 AT89C5121.3.4 振荡器特性5第2章 Proteus仿真原理

2、图.6第3章 程序流程图7第4章 程序代码 8第5章 调试总结和心得体会18参考文献 20第1章 课程设计目的,题目和目标以及设计方案1.1 课程设计目的单片机原理及应用课程设计是与单片机原理及应用课程相配套的实践教学环节。单片机原理及应用是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。通过课程设计,掌握以下知识和技能:1、单片机应用系统的总体方案的设计;2、单片机应用系统的硬件设计;3、单

3、片机应用系统的软件程序设计;4、单片机开发系统的应用和调试能力。1.2 课程设计题目和实现目标课程设计题目:用串行AD芯片PCF8591T对正弦波、三角波、方波进行采样。实现目标:(1) 能输出3种波形的瞬时值、峰值、平均值。(2) 精度为0.01V(3) 所采样的值能在LCD1602上显示;(4) 幅值可以在05V任意调节;(5) 频率可以在01KHz任意调节;(6) 根据开发板原理图接线,并且上电可以运行。1.3 设计方案主要由四个模块组成:(1)控制模块:使用STC89C52作为主控制器。(2)液晶显示模块:使用双行16*2显示的LCD1602做显示模块;(3)AD采样模块:使用8位逐次

4、逼近AD转换器PCF8591T芯片。PCF8591T芯片性价比很高,可达到精度8位的精度,即最小分辨率可达0.01V,幅值采样范围为(0,+5)V,工作电压范围为(+2,+6)V。(4)键盘模块:选用3个独立按钮作为3种波形的切换。1.3.1 设计思路设计思路:首先确定课程设计的目标是设计一个键盘控制波形模式,由单片机和AD转换器及其它相关部件共同实现。根据所要实现的功能,先在proteus软件上仿真。根据所选用的硬件可以将整个软件设计分为若干子程序,有初始化、查询时间、发送指令、读取数据、显示电压等构成,可以将以上子程序分别设计,实现各自的功能,再在子程序中调用,就可以实现预期的目标,在pr

5、otues软件里画出相应的电路图,将编写好的程序导入到软件里进行仿真,对仿真中波形发生器设置不同频率和幅值,看是否达到了设计的要求,若仿真成功,就按照电路图进行开发板实物连接。 采用一个AD转换器PCF8591T和单片机控制,可以通过液晶显示屏直接读取被采样的瞬时值,在通过比较取得最大值(即幅值),1.3.2 器件功能说明AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可 擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,

6、与工业标准的MCS-51指令集和输出管脚相兼容。由于将多 功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机 为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO92小体积封装形式;温度测量范围为55125,可编程为9位12位A/D转换精度,测温分辨率可达0.0625。 主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个

7、芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。按键扫描子程序对数字温度计的K1K3键进行扫描,得到键值完成相应操作。按下K1键设定温度报警值,调整TH的设定值,再次按下K1键调整TH的设定值,K2键减少温度值,K3键增加温度值。设定过程中可以通过按键K2,K3来决定是增还是减调整,按下K1键将设定的温度报警值写入DS18B20。设定完毕,将温度报警值写入DS18B20的E2ROM中保存,每次开机时自动从DS18B20中读出温度报警值。当实测温度超过设定温度限制

8、范围时,发出声光报警信号,喇叭发出鸣响,LED灯关闪烁。1.3.3 AT89C51AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是

9、一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图1-2所示。图1-2 AT89C51单片机管脚结构图VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出

10、4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能

11、寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(

12、外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC

13、指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL

14、2:来自反向振荡器的输出。 1.3.4 振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。第2章 Proteus仿真原理图第3章 程序流程图开 始初始化DS18B20读取EEPROM中的报警温度判断SET?测 温 温判断温度是否超标报 警设定报警温度是否否是第4章 程序代码4.1程序代码#include #include DS18B20.h #define ui

15、nt unsigned int#define uchar unsigned char #define SET P3_1 #define DEC P3_2 #define ADD P3_3 #define BEEP P2_7 bit shanshuo_st; bit beep_st; sbit DIAN = P07; uchar x=0; signed char m; uchar n; uchar set_st=0; signed char shangxian=28; signed char xiaxian=10; unchar code LEDData=0xC0,0xF9,0xA4,0xB0,

16、0x99,0x92,0x82,0xF8,0x80,0x90,0xff;void Delay(uint num)while( -num );void InitTimer(void)TMOD=0x1;TH0=0x3c;TL0=0xb0; void timer0(void) interrupt 1TH0=0x3c;TL0=0xb0;x+;void int0(void) interrupt 0EX0=0; if(DEC=0)Delay(2000);while(!DEC);if(set_st=1)shangxian-;if(shangxianxiaxian)shangxian=xiaxian;else

17、if(set_st=2)xiaxian-;if(xiaxian99)shangxian=99;else if(set_st=2)xiaxian+;if(xiaxianshangxian)xiaxian=shangxian;void check_wendu(void)uint a,b,c;c=ReadTemperature()-5; a=c/100; b=c/10-a*10; m=c/10; n=c-a*100-b*10; if(m99)m=99;n=9; Disp_init() P0 = 0xbf; P2 = 0xf7; Delay(200); P2 = 0xfb; Delay(200); P

18、2 = 0xfd; Delay(200); P2 = 0xfe; Delay(200); P2 = 0xff; Disp_Temperature() P0 =0xc6; P2 =0x77;Delay(200);P2= 0x7f;P0 =LEDDatan; P2 =0x7b;Delay(200);P2 =0x7f;P0 =LEDDatam%10; DIAN = 0; P2 = 0x7d;Delay(200);P2 = 0x7f;P0 =LEDDatam/10; P2 = 0x7e;Delay(200);P2 =0x7f; Disp_alarm(uchar baojing)P0 =0xc6; P2

19、 =0x77; Delay(200);P2 = 0x7f;P0 =LEDDatabaojing%10; P2 =0x7b;Delay(200);P2 = 0x7f;P0 =LEDDatabaojing/10; P2 =0x7d;Delay(200);P2 = 0x7f;if(set_st=1)P0 =0x89; else if(set_st=2)P0 =0xc7; P2 =0x7e;Delay(200);P2 =0x7f; void Alarm() if(x=10)beep_st=beep_st;x=0; if(m=shangxian&beep_st=1)|(mxiaxian&beep_st=

20、1)BEEP=1;P0=0x00; else BEEP=0;P0=0xff;/*void Alarm(uchar t)uchar i,j;for(i=0;i50;i+)BEEP=BEEP;for(j=0;jt;j+); BEEP=1;void main(void) uint z;BEEP=0; InitTimer(); EA=1; TR0=1; ET0=1; IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z2)set_st=0; if(set_st=0) EX0=0; EX1=0; check_wendu(); Disp_Tempera

21、ture();BEEP=0; Alarm() ; else if(set_st=1) BEEP=0; EX0=1; EX1=1; if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(shangxian); else if(set_st=2) BEEP=0; EX0=1; EX1=1; if(x=10)shanshuo_st=shanshuo_st;x=0; if(shanshuo_st) Disp_alarm(xiaxian);/*END*/#include #define DQ P1_0 void Delay_DS1

22、8B20(int num)while(num-) ;void Init_DS18B20(void)unsigned char x=0;DQ = 1; Delay_DS18B20(8); DQ = 0; Delay_DS18B20(80);DQ = 1; Delay_DS18B20(14);x = DQ; Delay_DS18B20(20);unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; dat=1;DQ = 1; if(DQ)dat|=0x80;Delay

23、_DS18B20(4);return(dat);void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat=1;unsigned int ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0x44); I

24、nit_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); t=b;t=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; return(t);/*END*/#include #define DQ P1_0 void Delay_DS18B20(int num)while(num-) ;void Init_DS18B20(void)unsigned char x=0;DQ = 1; Delay_DS18B20(8); DQ = 0; Delay_DS18B20(8

25、0); DQ = 1; Delay_DS18B20(14);x = DQ; Delay_DS18B20(20);unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-)DQ = 0; dat=1;DQ = 1; if(DQ)dat|=0x80;Delay_DS18B20(4);return(dat);void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = dat&0x01

26、;Delay_DS18B20(5);DQ = 1;dat=1;unsigned int ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20();WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); t=b;t=8;t=t|a;tt=t*0.0625;t

27、= tt*10+0.5; return(t);/*END*/ 第5章 调试总结与心得体会5.1调试总结(1)检查版各器件、引线的焊接是否正确;(2)确保芯片的电源稳定和电压符合要求;芯片如外接晶振,要确保时钟输入正确;复位信号要确保存在、存在时间长短,及系统多个复位信号的先后顺序;要保证芯片的工作参数和外围配置电路设置正确。(3)对输出部分进行检查,可编写测试程序,检查数码管的显示是否正常,有无闪烁和拖尾现象。若有,则可以调节延时程序,改变每个数码管显示时间,直至无异常现象。(4)分别调节按键使温度调高和调低,观察数码管显示的数值,看误差是否在允许范围。若偏差太大,检查程序中的计算部分,修改程

28、序使其符合要求。(5)调试过程中出现的最大问题在于蜂鸣器一直报警,经调试发现是P2端写入程序值拉高了(蜂鸣器低电平不报警,高电平报警),修改了程序使其符合要求。在调试过程中,要仔细阅读芯片说明,仔细记录调试过程中的异常现象。在调试时,应仔细阅读芯片说明中的配置(主要是操作模式)、管脚定义(是否复用、电压电平)、协议、时序图。在记录异常现象时,一定要记下来前几步的操作,这样可以重复模拟,如果重复出现三次以上,应考虑该地方必有问题存在,应及时解决;如果该现象是由某特定原因造成的,而没有及时重复模拟发现问题所在,可能造成后期出现问题多,而无从下手。5.2心得体会通过这次的课程设计,让我接触到了很多课

29、本以外的知识,了解了设计电路的程序,也知道了温度显示报警的原理和设计理念,要设计一个电路首先要先用仿真软件仿真成功之后才能进行制作硬件、接线等过程。但是仿真和实物成品相差很多,因为焊板的原理图不是原先的仿真图,所以焊好后要进行调试,并且修改原来的程序。在仿真里有些元件不能使用,比如键盘用按键来代替,但在焊接板上可以,因此要相应的改掉原来的程序。通过这次的课设让我体会到合作的重要性,也让我熟悉了温度显示类型的相关电路,以及焊接的基本技巧和注意要点。所以说“坐而言不如立而行”只有自己真正的动手去做才能学到东西,才能把别人的东西变为自己的东西。从这次的学习中,我深刻的体会到,在以后的学习中,要理论联系实际,把我们所学的知识用到实际中去,学习单片机亦是如此,程序只有在多读多写的过程中才能提高,这也是我这次的收获。参考文献1 李群芳,肖看单片机原理、接口及应用嵌入式系统技术基础北京:清华大学出版社,2005.3.2 彭伟.单片机C语言程序设计实训100例基于8051+Proteus仿真.北京:电子工业出版社,2009-06.3 于永,戴佳,刘波.51单片机C语言常用模块与综合系统设计实例精讲.北京:电子工业出版社,2008-10. 4 李朝青.单片机原理及接口技术.北京:北京航空航天大学出版社,2005-5.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁