单片机课程设计实验资料报告材料

合集下载

51单片机课程设计报告

51单片机课程设计报告

51单片机课程设计报告.成绩:单片机原理及应用课程设计课程名<单片机原理及应用> </单片机原理及应用>学部机械与电子信息工程学部专业移动通信技术学号姓名指导教师日期 .一、设计任务与要求1. 任务:制作并调试51单片机学习板2. 要求:(1)了解并能识别学习板上的各种元器件,会读元器件标示;(2)会看电路原理图;(3)制作51单片机学习板;(4)学会使用Keil C软件下载调试程序;用调试程序将51单片机学习板调试成功。

二、实验内容(5)(6)(7)(8)(9)*****芯片工作电路,利用晶振提供控制信号。

10引脚下载口与*****芯片相关引脚相连完成下载电路。

8个10K电阻与*****芯片P0口相连,利用上拉电阻组成上拉电路。

使用开关与5.1K电阻连成外部中断0、1电路和复位电路。

利用16个开关做成键盘,实现输入号对已编程的*****芯片的控制并通过数码管显示0--F。

(10)用2片74HC573N具有锁存功能芯片与8个数码管相连,通过编程的*****位选和段选实现输出信号的显示功能。

(11)使用74HC573N锁存功能结合*****AG芯片8非门芯片和74HC04N6非门芯片与4个2N5551三极管实现对步进电机的控制,和控制步进电机的信号结合LED输出显示的功能。

(12)6、利用1片74HC573N芯片与8个共阴极LED实现跑马灯功能。

三、总原理图1.总原理图.四、硬件调试1、是否短路用万用表检查P2两端是短路。

电阻为0,则短路,电阻为一适值,电路正常。

2、焊接顺序焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。

3、器件功能1)检查原理图连接是否正确2)检查原理图与PCB图是否一致3)检查原理图与器件的*****ET上引脚是否一致4)用万用表检查是否有虚焊,引脚短路现象5)查询器件的*****ET,分析一下时序是否一致,同时分析一下命令字是否正确6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的7)飞线。

单片机课程设计实验报告

单片机课程设计实验报告

成都理工大学学院:核技术与自动化工程学院专业:电气工程及其自动化班级:2011级电气二班学号:201106050228姓名:薛成成指导教师:任家富目录一、引言—本课程设计的目的 (1)二、Led流水灯 (2)2.1上机程序 (3)三、数码管循环显示实验 (4)3.1上机程序 (5)四、键盘的操作实验 (6)4.1上机程序 (7)五、实验总结 (9)六、参考文献 (10)摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。

通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

关键词:单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。

一、引言—本课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。

在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

实验一实验要求:本次实验实现的是小灯的闪烁,流水灯可以按照程序规定的要求进行闪烁。

实验程序设计#include<reg52.h> //52单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义uint flag=0;void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void init(){TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;}void main() //主函数{init();while(1){uchar a,i,j;if(flag==1){for(j=0;j<3;j++) //寄偶交替{P1=0x55; //点亮小灯delay(300); //延时300毫秒P1=0xaa;delay(300); //延时300毫秒}for(j=0;j<3;j++) //流水灯{a=0xfe;for(i=0;i<8;i++){P1=a; //点亮小灯delay(300); //延时300毫秒 a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++) //从两边往中间流 {P1=0x7e; //点亮小灯delay(300); //延时300毫秒P1=0xbd;delay(300); //延时300毫秒P1=0xdb; //点亮小灯delay(300); //延时300毫秒P1=0xe7;delay(300); //延时300毫秒}P1=0xff;for(j=0;j<3;j++) //从中间往两边流 {P1=0xe7; //点亮小灯delay(300); //延时300毫秒P1=0xdb;delay(300); //延时300毫秒P1=0xbd; //点亮小灯delay(300); //延时300毫秒P1=0x7e;delay(300); //延时300毫秒}P1=0xff;for(j=0;j<6;j++) //全部闪烁{P1=~P1; //点亮小灯delay(300); //延时300毫秒}P1=0xff;flag=0;}}}void timer() interrupt 1{flag=1;}实验心得体会:通过本次实验一步一步的进行实验,设计程序,写入中断来实现流水灯的全部实验要求。

单片机课程设计实验报告

单片机课程设计实验报告

单片机课程设计实验报告实验名称:频率计 指导教师:徐建军 学生信息:鄢立夏(电气 0903,09271061) 闫琛 (电气 0904,09271121)一、 实验题目 6 位数码管显示频率,测量频率的范围为 50HZ—50KHZ 用外 部中断或计数器,可使用 555 波形发生器。

二、 实验电路频率测量电路鄢立本电路图根据实验板的绘制。

三、 实验原理 本实验中采用了测频的方法,使用了 T0、T1 定时计数器,其中 通过控制 T1 作为定时器设定 1S 延时,T1 作为计数器接受脉冲输入。

1S 延时到,关闭 T0、T1 读取 TH0、TL0 并将此两个 8 位数据转化为 6 位十进制数存储进 30H-35H 的位寻址空间内, 然后调用数码管显示函 数,显示 30H-35H 中的数值。

然后对 T0、T1 做下一次计数的初始化 设置,并清零 TH0、TL0。

再进入下一次测频阶段,如此循环,即可夏实现动态测量输入信号的频率并在数码管上进行显示。

四、 程序控制流程图START 关闭T0、T1 停止计数单片机读取 TH0、TL0T0->十六位计数器 初始化 T1->十六位20ms定 时初始化初始化数据存储空 间初始化数据处理 函数开启T0、T1, 开始计数 数据处理完毕并送至 30H~35H?N YP3.4管脚脉冲NT1,50次中断, 定时1秒到?数码管显示 30H~35H内容N显示完 毕?频 率 计 控 制 流 程 图Y设计:鄢立夏、闫琛五、 实测代码 由于我们采用了自己焊接的 51 单片机最小系统为新片烧写程序,然后将新 片安放至实验板上进行调试的,编写软件为 Keil,所以一下包括注释等某些格式 可能和伟福软件有些不同。

望谅解。

Org 0000H Sjmp Main; Org 000BH; Sjmp Timer0_Serv; 判断 100Khz 时溢出时使用 Org 001BH Sjmp Timer1_Serv; Main: Lcall Sys_Init; LCALL Start; Sys_Loop: Ajmp Sys_Loop; while(1);//开始函数 Start: Setb TR0; Setb TR1; Setb ET1; Setb ET0 Setb EA; Ret; //系统初始化函数 Sys_Init: Lcall Timer_Init; //设置定时时间 50*20ms=1s MOV 20H,#50; //保存 T0 的计数值 Mov 21H,#0; Mov 22h,#0; Mov 23H,#0;//100Khz 位 //设置六位数据存储空间; MOV 31H,#0; MOV 32H,#0; MOV 33H,#0; MOV 34H,#0; MOV 35H,#0; MOV 36H,#0; Ret; //定时器/计数器 0、1 初始化函数,T0 作为计数器,T1 作为定时器 Timer_Init: Mov TMOD,#15H; Mov TH0,#00H; Mov TL0,#00H; Mov TH1,#0ECH;定时 10ms Mov TL1,#078H; Ret; //T0 中断服务函数 Timer0_Serv: INC 23H; 十万位处理; Reti; //T1 中断服务函数 Timer1_Serv: MOV R1,#31H;数据起始位 MOV R2,#6; MOV R4,#0FEH; Single_Spark:;单个数码管亮,循环起来MOV A,R4; MOV P0,A; RL A; MOV R4,A; MOV A,@R1; MOV DPTR,#Led_Data; MOVC A,@A+DPTR; MOV P2,A; INC R1; LCALL Delay; DJNZ R2,Single_Spark; //判断 1S 定时是否已到 Djnz 20H,Timer_Go_On; Clr TR0; Clr TR1; Mov 21H,TL0; Mov 22H,TH0; Mov 20H,#100; LCALL Frequence_Show; Mov TH0,#00H; Mov TL0,#00H; Timer_Go_On: Mov TH1,#0B1H;定时 10ms Mov TL1,#0DFH; SETB TR0; SETB TR1; EXIT: Reti; Frequence_Show: MOV R0,#31H MOV R1,#06H ;对上次的内容清零 Clear_Data: MOV @R0,#0 INC R0 DJNZ R1,Clear_Data; //计数器处理函数,封装. Data_Handle: MOV A,23H; MOV B,#0AH; DIV AB; MOV 24H,A ;存储第一位商 MOV A,B;MOV 30H,22H; ANL 30H,#0F0H; ADD A,30H; SWAP A; MOV B,#0AH; DIV AB; MOV 25H,A MOV A,B; SWAP A; ANL 22H,#0FH; ADD A,22H; MOV B,#0AH; DIV AB; MOV 26H,A MOV A,B; MOV 30H,21H; ANL 30H,#0F0H; ADD A,30H; SWAP A; MOV B,#0AH; DIV AB; MOV 27H,A; MOV A,B; SWAP A; ANL 21H,#0FH; ADD A,21H; MOV B,#0AH; DIV AB; MOV 28H,A; MOV 31H,B MOV A,24H; SWAP A; ADD A,25H; MOV B,#0AH; DIV AB; MOV 24H,A MOV A,B; SWAP A; ADD A,26H;;存储第二位商;存储第三位商;存储第四位商;存储第五位商 ;存储十进制数个位;存储第一位商MOV B,#0AH; DIV AB; MOV 25H,A; MOV A,B; SWAP A; ADD A,27H; MOV B,#0AH ; DIV AB ; MOV 26H,A; MOV A,B; SWAP A; ADD A,28H; MOV B,#0AH; DIV AB; MOV 27H,A; MOV 32H,B; MOV A,24H; SWAP A; ADD A,25H; MOV B,#0AH; DIV AB ; MOV 24H,A ; MOV A,B ; SWAP A; ADD A,26H; MOV B,#0AH; DIV AB ; MOV 25H,A; MOV A,B; SWAP A ; ADD A,27H; MOV B,#0AH; DIV AB; MOV 26H,A; MOV 33H,B; MOV A,24H; SWAP A; ADD A,25H;;存储第二位商;存储第三位商;存储第四位商 ;存储十进制数十位;存储第一位商;存储第二位商;存储第三位商 ;存储十进制数百位MOV B,#0AH; DIV AB; MOV 24H,A ; MOV A,B; SWAP A; ADD A,26H; MOV B,#0AH; DIV AB; MOV 25H,A MOV 34H,B MOV A,24H; SWAP A; ADD A,25H; MOV B,#0AH; DIV AB; MOV 35H,B; MOV 36H,A;;存储第一位商;存储第二位商 ;存储十进制数千位;存储十进制数万位 ;存储十进制数十万位MOV R0,#6; MOV R1,#31H; MOV R2,#0EFH MOV DPTR,#Led_Data;RET; Delay: MOV 40H,#0F0H; Delay_Loop: NOP; DJNZ 40H,Delay_Loop; RET; Led_Data: DB 3FH,06H,5BH,4FH,66H,6DH,0FDH,07H,0FFH,0EFH; END六、 实验问题总结及解决方法 1、 在调试数码管显示子程序时,数码管显示太暗。

51单片机课程设计报告

51单片机课程设计报告

51单片机课程设计报告一、课程目标知识目标:1. 理解51单片机的硬件结构、工作原理及其功能特点;2. 学会使用51单片机的指令系统进行程序设计;3. 掌握51单片机与外围电路的接口技术,能实现简单的硬件控制功能;4. 了解51单片机在嵌入式系统中的应用及发展趋势。

技能目标:1. 能够运用C语言编写51单片机的程序,实现基础控制功能;2. 能够运用仿真软件对51单片机程序进行调试,分析并解决简单问题;3. 能够设计简单的51单片机硬件系统,进行电路连接和功能测试;4. 培养学生的动手能力、创新能力和团队协作能力。

情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学习热情;2. 培养学生严谨、务实的科学态度,提高自主学习能力;3. 培养学生关注社会发展,了解科技在生活中的应用,增强社会责任感;4. 培养学生团队合作精神,尊重他人意见,善于沟通交流。

课程性质:本课程为实践性较强的电子技术课程,以51单片机为核心,结合硬件和软件,培养学生的实际操作能力和创新能力。

学生特点:学生具备一定的电子技术基础知识,对单片机有一定了解,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,提高学生的实际操作能力和解决问题的能力。

通过课程学习,使学生能够独立完成简单的51单片机控制系统设计。

二、教学内容根据课程目标,教学内容分为以下几个部分:1. 51单片机硬件结构及原理- 熟悉51单片机的内部结构、引脚功能;- 掌握51单片机的工作原理及性能特点。

2. 51单片机指令系统与编程- 学习51单片机的指令集,理解各指令的功能和使用方法;- 掌握C语言在51单片机编程中的应用。

3. 51单片机外围接口技术- 学习51单片机与常见外围电路(如LED、LCD、键盘等)的接口技术;- 掌握外围设备的控制原理及编程方法。

4. 仿真软件的使用- 学习使用Keil、Proteus等仿真软件进行51单片机程序设计和调试;- 掌握仿真软件的操作方法,提高程序调试效率。

北京工商大学单片机课设实验报告

北京工商大学单片机课设实验报告

单片机原理课程设计报告题目:带电子表的直流电动机控制器班级:学号:姓名:成绩:指导教师:北京工商大学计算机与信息工程学院a.利用8051单片机设计出具有时、分、秒显示的电子表。

b.可以通过键盘设定电机的启动时间和停止时间。

c.可以在设定时间起动直流电动机,并在规定时间停止。

d.测电机转速。

【实验方案】a.键盘扫描:此部分是利用实验仪器提供的键盘扫描电路,把按键输入的键码作为一组数值存入程序已设定的数组中,当键盘上的显示时钟走到某一时刻,来开启所要求实现的功能。

实验仪上提供了一个6×4的小键盘,向列扫描码地址(0X002H)逐列输出低电平,然后从行码地址(0X001H)读回。

如果有键按下,则相应行的值应为低,如果无键按下,行码为高。

这样就可以通过输出的列码和读取的行码来判断按下的是什么键。

在判断有键按下后,要有一定的延时,防止键盘抖动。

在键盘扫描实验过程中,需将KEY/LED_CS 接到相应的地址译码上,以便用相应的地址来访问。

本部分中我们将KEY/LED CS信号接片选端CS0上。

b.电子表:此部分是利用CPU的定时器和实验仪上提供的数码显示电路,设计了一个由左向右显示分别为:时、分、秒显示的电子表。

定时器每100us中断一次,在中断服务程序中,对中断次数进行计数,100us计数10000次就是1秒,然后再对秒计数得到分和小时的值,并送入显示缓冲区。

由于此部分需要用定时器计数,随后的测量电动机转速部分也需要用定时器来计数,为避免发生冲突,所以电子表部分我们选用定时器0来计数。

c.直流电动机的开启和停止及转速测量此部分是利用实验仪上的D/A转换电路,输入由片选端CS1进行选通,输出-8V至+8V电压,控制直流电机。

在电压允许范围内,直流电机的转速随着电压的升高而加快,若加上的电压为负电压,则电机会反向旋转。

在电机转盘上安装一个小磁芯,用霍尔元件感应电机转速,用8255的PB.0读回脉冲计数,计算电机转速。

单片机课程设计实验报告

单片机课程设计实验报告

课程设计报告学号: 1328403028姓名:张帅华班级: 13电子信息工程指导老师:邓晶苏州大学电子信息学院2016年4月摘要随着时代的进步和发展,单片机技术已经成为一种比较成熟的技术,普及到我们生活、工作、科研等各个领域。

本次课程设计包含四个基于STC89C52单片机的设计,分别是:基于单总线数字式温度传感器DS18b20的数字温度计的设计;基于2K位串行CMOS 的EEPROM AT24C02的数字密码锁的设计;基于SPI 接口实时时钟芯片DS1302的电子日历的设计以及基于无线收发芯片nrf24L01的简单无线通讯系统的设计。

关键词:单片机 DS18B20 AT24C02 DS1302 NRF24L01目录摘要 (1)目录 (2)第1章基于DS18B20的数字温度计设计 (3)1.1 设计要求 (3)1.2 系统组成 (3)1.3 系统设计 (3)1.3.1 硬件设计 (3)1.3.2软件设计 (4)1.4 设计结果 (6)第2章基于AT24C02的电子密码锁设计 (7)2.1 设计要求 (7)2.2 系统组成 (7)2.3 系统设计 (8)2.3.1 硬件设计 (8)2.3.2 软件设计 (9)2.4 设计结果 (9)第3章基于DS1302的电子日历的设计 (11)3.1 系统功能 (11)3.2 系统组成 (11)3.3 系统设计 (11)3.3.1 硬件设计 (11)3.3.2 软件设计 (13)3.4 设计结果 (14)第4章基于NRF24L01的无线通信系统的设计 (15)4.1 系统功能 (15)4.2 系统组成 (15)4.3 系统设计 (15)4.3.1 硬件设计 (15)4.3.2 软件设计 (16)4.4 设计结果 (16)总结 (17)第1章基于DS18b20的数字温度计设计1.1 设计要求(1)采用DS18b20与单片机STC89C52相结合设计数字温度计,实现液晶屏实时显示当前温度;(2)读取并显示DS18B20的序列码。

单片机课程设计报告

单片机课程设计报告

单片机课程设计实验报告设计题目:基于单片机的多功能综合应用系统的设计专业:电子信息工程班级:姓名:指导老师:目录第一章设计说明1.1 设计目的 (3)1.2 设计内容及要求 (3)第二章硬件电路仿真实现2.1 硬件结构分析 (5)2.2基本功能仿真电图 (6)2.3扩展功能仿真电路图 (10)2.4 实物电路图 (15)第三章软件设计实现3.1软件程序内容 (16)3.2模块分析 (16)3.3 程序流程图 (17)第四章系统测试4.1 软件调试 (19)4.2硬件调试 (19)第五章心得体会 (20)第六章参考文献 (21)附录 (21)第一章设计说明1.1 设计目的单片机在许多领域使用十分广泛,如智能仪器仪表、实时工控、通讯设备、导航系统、家用电器等。

各科任老师们经常说“学好单片机,工作就不成问题了。

”可见学好单片意义之重大。

单片机作为一门基础学科,既是对前期学习C语言的综合运用,也是理论与实践相结合的一大体现。

本次课程设计通过基础部分,拓展功能以及整体电路的实现能很好地锻炼我们的动手及编程能力。

1.2 设计内容及要求内容:1.设计并实现具有复位功能的单片机小系统。

2.利用单片机进行灯光的场景开关控制、循环点亮控制、花样变化控制及速度变化控制(如:左右循环、扩散收缩式移动、流星雨、舞台灯光综合效果、名曲名句跟随显示等。

至少应做两项:前两项选一并有速度变化控制功能,后三项选一或自创特色花样)。

3. 炫彩音乐显示(依据3秒以上某名曲名句,模拟高、中、低音三分频,彩色LED随音频变化而起伏显示的效果,进一步地,LED 亮度跟随音乐响度闪烁)。

4.利用单片机进行灯光的色彩连续变化效果控制。

5.利用单片机进行灯光的三色联动定时控制(以交通灯为例)。

(说明:3、4中二选一,1、2、5必选)6. 配合2至5项中功能,实现液晶屏输出功能或状态信息。

7. 以调节5或4项中的时间为例实现基于4X4键盘的输入功能。

单片机课程实验报告

单片机课程实验报告

《单片机原理及应用》课程设计报告课题:单片机多功能系统设计班级电子1071班学号 1071205236学生姓名张亮亮专业电子信息工程系别电子与电气工程学院指导教师朱霞,付丽辉淮阴工学院电子信息工程系20010年9月目录一. 设计目的及意义。

(2) 二.设计过程。

(2) 三.硬件电路总体设计。

(3) 3.1 系统硬件总框图。

(3)3.2 系统设计原理3、2、1 系统处理器。

(3)3、2、2 LED流水灯。

(4)3、2、3 扬声器模块。

(5)3、2、4数码管。

(6) 四.硬件Proteus仿真图。

(7) 五.软件流程框图。

(8) 六.程序清单及注释。

(9) 七.软件调试。

(13) 八.心得体会。

(14) 九.参考文献。

(15)一、设计目的及的意义《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。

在课程设计过程中,在教师指导和同学帮助下,应用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。

通过课程设计,能加强我们多项能力的培养:(1)独立工作能力和创造力;(2)综合运用专业及基础知识,解决实际工程技术问题的能力;(3)查阅图书资料、产品手册和各种工具书的能力;(4)工程绘图的能力;(5)编写技术报告和编写技术资料的能力。

二、设计过程(1)认真研究设计任务书,明确设计要求、条件、内容和步骤;复习课程有关内容,熟悉有关单元电路的设计方法和步骤;搜集、分析、消化相关资料、软件等;掌握微型计算机应用系统软件设计方法;准备好设计需要的图书、资料和工具;拟定设计计划等;(2)系统总体及功能设计,制定总体方案及元器件的选择;(3)硬件设计,完成硬件结构图设计、系统电路图设计和绘制及电路模块的连接;(4)软件设计,完成软件流程图的设计、程序设计与调试;(5)系统程序调试;(6)设计工作总结;(7)写出设计报告。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中国民航大学单片机课程设计报告数字温度计姓名:白学号:111141101专业班级:自动化A指导老师:常美华/淑舫所在学院:航空自动化学院2013年12月18日1 概述1.1 课程设计的意义本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。

特别是对单片机的系统设计有很大帮助。

1.2 设计的任务和要求1、基本围-55℃-125℃2、精度0.1℃3、LED数码直读显示4、LCD数码直读显示(扩展)2系统总体方案及硬件设计2.1数字温度计设计方案论证2.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。

而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。

2.1.2 方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

2.2系统总体设计温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位LED数码管及液晶以串口传送数据实现温度显示。

LED/LCD显示AT89S51DS18B20温度传感器图2.2—1总体设计方框图2.2—2系统仿真图2.3系统模块系统由单片机最小系统、显示电路、温度传感器等组成。

2.3.1 主控制器单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

晶振采用12MHZ。

图2.3.1晶振电路2.3.2 显示电路显示电路采用4位共阴极LED数码管及LCD1602,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。

P0口的低四位作为数码管的位选端(两片锁存器)。

采用动态扫描的方式显示图2.3.2 数码管液晶显示电路2.3.3温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:1、独特的单线接口仅需要一个端口引脚进行通信;2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;4、可通过数据线供电,电压围为3.0~5.5V;5、零待机功耗;6、温度以9或12位数字;7、用户可定义报警设置;8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;DS18B02可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

图2.3.3 温度传感器与单片机的连接3系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。

3.1主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之测量一次被测温度,其程序流程见图3.1所示。

图3.1 主程序流程图3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如图 3.2示温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms ,在本程序设计中采用1s 显示程序延时法等待转换的完成。

温度转换命令子程序流程图如上图,图3.3所示图3.3 温度转换流程图图3.2 读温度流程图3.4 计算温度子程序计算温度子程序将RAM 中读取值进行BCD 码的转换运算,并进行温度值正负的判定,其程序流程图如图3.4所示。

3.5 显示数据刷新子程序显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。

程序流程图如图3.5。

图3.4 计算温度流程图 图3.5 显示数据刷新流程图4 实验仿真进入protuse 后,连接好电路,并将程序下载进去。

将DS18B20的改为0.1,数码管及LCD 液晶显示温度与传感器的温度相同。

标志位为1?最高位显示“—”最高为显示分理出的数据结束NYY分离显示温度图4—1 数码温度显示仿真图4—2 液晶温度显示仿真5 总结与体会通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。

在调试过程中我曾将温度传感器的电源、地接反啦,导致温度传感器急剧发热,后经观察和查询资料才得以改正。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

查考文献【1】朝清单片机的C语言应用程序设计(第三版) 航空航天大学【2】建岭弓雷51系列单片机开发宝典电子工业【3】平杜涛罗和平单片机应用开发与实践机械工业附源程序代码数码管程序//DS18B20的读写程序,数据脚P3.1 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阴显示测温值////P0口为位码、段码输入,P2.6为位选,P2.7为段选///***************************************************/#include<reg51.h>#include<absacc.H>#include <intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P3^1;//定义DS18B20数据线sbit wela=P2^6;sbit dula=P2^7;bit list_flag=0;//初始化正确与否标志位uchar flag;//正负号标志位uchar aa,bb,cc;uchar temp_value;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x63,0x39}; uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void delay(uint ms) //延时程序{while(ms--);}uchar Init(void )//DS18B20初始化{uchar status;ds=1;delay(8);ds=0;delay(90);//延时ds=1;delay(8);//延时status=ds; //如果为0,则初始化成功,如果为1,则初始化失败delay(100);//延时return(status);}uchar tempread(void)//从DS18B20读取一个字节数据{uchar i=0;uchar dat=0;for(i=8;i>0;i--){ds=0;//给脉冲信号dat>>=1;ds=1;_nop_();_nop_();if(ds) dat|=0x80;delay(4);ds=1;}return(dat);}void tempwritebyte(uchar dat)// 向DS18B20写一个字节数据{uchar j;for(j=1;j<=8;j++){ds=0;ds=dat&0x01;delay(5);ds=1;dat>>=1;}}uchar get_temp(void)//DS18B20开始获取温度并转换{uchar a,b,t;if(Init()==1){list_flag=1;}else{list_flag=0;Init();tempwritebyte(0xcc);tempwritebyte(0x44);Init();tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();//读低8位b=tempread();//读高8位temp_value=(a&0x0f);//小数部分if((b&0x80)==0x80){b=~b;a=~a+1;t=((b<<4)|(a>>4));flag=0;}else{t=((b<<4)|(a>>4));flag=1;}}return (t);}void dis_temp(){aa=get_temp()/10;bb=get_temp()%10;cc=temp_value*625/1000%10;if(flag==0){wela=1;P0=0xfe;wela=0;dula=1;P0=0x40;//送-号dula=0;delay(10);delay(10);}else if(flag==1){wela=1;P0=0xfe;wela=0;dula=1;P0=0x00;dula=0;delay(10);delay(10);wela=1;P0=0xf7;wela=0;dula=1;P0=table[cc];dula=0;delay(300);delay(300);}wela=1;P0=0xfd;wela=0;dula=1;P0=table[aa];dula=0;delay(300);delay(300);wela=1;P0=0xfb;wela=0;dula=1;P0=table1[bb];dula=0;delay(300);delay(300);wela=1;P0=0xf7;wela=0;dula=1;P0=table[cc];dula=0;delay(300);delay(300);}void main(void){while(1){get_temp();dis_temp();}}液晶显示程序#include<reg51.h>#include<absacc.H>#include <intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit ds=P3^1;//定义DS18B20数据线sbit wela=P2^6;sbit dula=P2^7;sbit EN=P2^5;bit list_flag=0;//初始化正确与否标志位uchar flag;//正负号标志位uchar aa,bb,cc;uchar temp_value;unsigned char code str1[]={"temperature: "};unsigned char code str2[]={" "};/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){unsigned int i,j;for(i=0;i<ms;i++)for(j=0;j<100;j++);}void wr_(unsigned char )//写指令//{ delay1ms(1);wela=0x00;dula=0x00;RS=0;EN=0;P0=;delay1ms(1);EN=1;delay1ms(1);EN=0;}void wr_dat(unsigned char dat)//写数据//{ delay1ms(1);;RS=1;EN=0;P0=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}void lcd_init()//初始化设置//wr_(0x38);delay1ms(5);wr_(0x08);delay1ms(5);wr_(0x01);delay1ms(5);wr_(0x06);delay1ms(5);wr_(0x0c);delay1ms(5);}void display(unsigned char *p)//显示// {while(*p!='\0'){wr_dat(*p);p++;delay1ms(1);}}init_play()//初始化显示{ lcd_init();wr_(0x80);display(str1);wr_(0xc0);display(str2);}void delay(uint ms) //延时程序{while(ms--);}uchar Init(void )//DS18B20初始化{uchar status;ds=1;delay(8);ds=0;delay(90);//延时ds=1;delay(8);//延时status=ds; //如果为0,则初始化成功,如果为1,则初始化失败delay(100);//延时return(status);}uchar tempread(void)//从DS18B20读取一个字节数据{uchar i=0;uchar dat=0;for(i=8;i>0;i--){ds=0;//给脉冲信号dat>>=1;ds=1;_nop_();_nop_();if(ds) dat|=0x80;delay(4);ds=1;}return(dat);}void tempwritebyte(uchar dat)// 向DS18B20写一个字节数据{uchar j;for(j=1;j<=8;j++){ds=0;ds=dat&0x01;delay(5);ds=1;dat>>=1;}}uchar get_temp(void)//DS18B20开始获取温度并转换{uchar a,b,t;if(Init()==1){list_flag=1;}else{list_flag=0;Init();tempwritebyte(0xcc);tempwritebyte(0x44);Init();tempwritebyte(0xcc);tempwritebyte(0xbe);a=tempread();//读低8位b=tempread();//读高8位temp_value=(a&0x0f);//小数部分if((b&0x80)==0x80){b=~b;a=~a+1;t=((b<<4)|(a>>4));flag=0;}else{t=((b<<4)|(a>>4));flag=1;}}return (t);}void dis_temp(){aa=get_temp()/10+0X30;bb=get_temp()%10+0X30;cc=temp_value*625/1000%10+0X30;if(flag==0){ wela=0;dula=0;wr_(0xc0);wr_dat(0x2d);//显示符号位}else if(flag==1){ wela=0x00;dula=0x00;wr_(0xc0);wr_dat(0x00);//显示符号位}wela=0x00;dula=0x00;wr_(0xc1);wr_dat(aa);//显示十位delay1ms(50);dula=0x00;wela=0x00;wr_(0xc2);wr_dat(bb);//显示个位wela=0x00;dula=0x00;wr_(0xc3);wr_dat(0x2e);//显示小数点wela=0x00;dula=0x00;wr_(0xc4);wr_dat(cc);//显示小数位}void main(void){init_play();//初始化显示while(1){get_temp();dis_temp();}}。

相关文档
最新文档