温度检测模块_第1页
温度检测模块_第2页
温度检测模块_第3页
温度检测模块_第4页
温度检测模块_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、 石家庄经济学院信息工程学院 电子信息工程专业 单片机课程设计报告题 目 温度检测模块设计 姓 名 0000000 学 号 00000000000000000 班 级 指导教师 000000000000 2013年 7 月 4 日要求:1指导教师按照课程设计大纲要求完成学生课程设计指导工作。2课程设计任务书由指导教师照大纲要求填写,内容要全面。3课程设计报告由参加本学生填写。课程设计结束时交指导教师。4指导教师要根据每一位学生课程设计任务完成情况,认真审核设计报告,并在课程设计结束时,给出客观、准确的评语和成绩。5课程设计任务书和报告要语言流畅,图表正确规范。6本表要用钢笔、圆柱笔填写或打印,

2、字迹工整。 班级 4101090102 姓名 0000000 学号 0000000000000000000 课程设计题目 温度检测模块设计 课程设计起止日期 2013年6月17日 至 2013年7月5日 实习地点 实验室106 课程设计内容与要求(包括:设计任务及要求、设计原理、所需仪器设备、验收标准)及格:矩阵式键盘设置4个按键,初始时,4位数码管无显示。当1号键按下时,第一位数码管显示1,并闪烁两次;当2号键按下时,第二位数码管显示2,并闪烁两次;3号键、4号键同样功能。中:在完成及格任务的基础上,能对来自热敏电阻传感器上的信号进行A/D转换,并在数码管上实时显示采集的电压值。设置开始、结

3、束两个按键控制采集过程。良:将显示的电压值转换成显示温度值,并能够通过按键设定校正值; 优:将所有的按键功能通过红外遥控器实现。(开始、结束和校正值设定) 指导教师: 董建彬 2013年 6 月 17 日课程设计任务书一、设计原理与技术方法:(包括:电路工作原理分析与原理图、元器件选择、电路调试方法与结果说明;软件设计说明书与流程图、软件源程序代码、软件调试方法与运行结果说明。)1. 电路工作原理分析:89C52芯片P0口,即P0.0-P0.7连接到键盘的D0-D7,P0口既是8数据口,又是16位地址口的低8位。同时P0口连接八段数码管作为段选信号。89C52芯片P2.7与PCF8951的SD

4、A相连做为位锁存,P2.6与PCF8951的SCL相连作为段选。89C52芯片P3.2与红外相连作为外部中断。1.1 89C52芯片说明:(1)主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线(2)外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端(3)控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,

5、接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。(4)可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。PO口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7STC89C52主要功能如表一所示。表1 STC89C52主要功能主要功能

6、特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能1.2 PCF8951芯片说明:PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件

7、。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。 特性 (1)单独供电 (2)PCF8591的操作电压范围2.5V-6V (3)低待机电流 (4)通过I2C总线串行输入/输出 (5)PCF8591通过3个硬件地址引脚寻址 (6)PCF8591的采样率由I2C总线速率决定 (7)4个模拟输入可编程为单端型或差分输入 (8)自动增量频道选择 (9)PCF8591的模拟电压范围从VSS到VDD (10)PCF8591内置跟踪保持电路 (11)8-bit逐次逼近A/D转换器 (12)通过1路模拟输出实现DAC增益 红外模块说明:通用红外遥控系统由发

8、射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图二 红外遥控系统图接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 接收器对外只有3个引脚:Out、GND、Vcc与单片机接口非常方便,如图2 图三 接收器引脚图(1)脉冲信号输出接,直接接单片机的IO 口。(2) GND接系统的地线(0V);(3)V

9、cc接系统的电源正极(+5V);2.程序设计思路及程序说明2.1及格档要求矩阵式键盘设置4个按键,初始时,4位数码管无显示。当1号键按下时,第一位数码管显示1,并闪烁两次;当2号键按下时,第二位数码管显示并闪烁两次;3号键、4号键同样功能。设计思路对键盘扫描确定键值,可实现按下键数码管显示相应的键值,并通过for循环控制闪烁的次数。其中按键抖动问题可以通过延时程序解决。流程图 图四 及格档流程图程序代码#include <reg52.h> /包含头文件#define uchar unsigned char#define uint unsigned int/子函数声明uint sca

10、nkey();void delay(uint x);void display(key);void display1(key);/全局变量声明uchar code wei=0xfe,0xfd,0xfb,0xf7;uchar code duan=0xf9,0xa4,0xb0,0x99;uint hang;uint lie;/延时子函数void delay(uint x) uint t; while(x-) for(t=0;t<120;t+);/键盘扫描子函数uint scankey() P1=0xfe; /只扫面一行 switch(P1) case 0xee: lie=1;break; ca

11、se 0xde: lie=2;break; case 0xbe: lie=3;break; case 0x7e: lie=4;break; default: break; while(P1&0xf0)!=0xf0); /无键按下时return (lie);/显示子函数void display(key) uint i,j; for(j=0;j<2;j+) /for循环控制闪烁次数 for(i=0;i<100;i+)/通过循环延时 P0=duankey-1; /发送段码 P2=weikey-1;/发送位码 delay(4); for(i=0;i<100;i+) P2=0x

12、ff; /关闭所有数码管并延时 delay(4); /显示子函数void display1(key) if(key!=0) P2=weikey-1;/发送位码delay(1); P0=duankey-1; /发送段码 delay(2); else P2=0xff;/关数码管/主函数void main() uint key=0; while(1) P1=0xfe; if(P1!=0xfe) /判断是否有键按下 delay (100); /延时去抖 if(P1!=0xfe) /确实有键按下 key=scankey(); /调扫描程序 display(key); /调显示程序 else displa

13、y1(key); /无键按下时调显示1程序 2.2中档要求 矩阵式键盘设置4个按键,初始时,4位数码管无显示。当1号键按下时,第一位数码管显示1,并闪烁两次;当2号键按下时,第二位数码管显示并闪烁两次;3号键、4号键同样功能。并能对来自热敏电阻传感器上的信号进行A/D转换,并在数码管上实时显示采集的电压值。设置开始、结束两个按键控制采集过程。设计思路对键盘扫描确定键值,可实现按下键数码管显示相应的键值,并通过for循环控制闪烁的次数。其中按键抖动问题可以通过延时程序解决。PCF8591将模拟量转换为数字量,即可将输入模拟电压05V转换为8位的数字量,共,所以每份为=0.02V,将模拟量转化成数

14、字量并听过计算分别送入四个数码管,即可实现数码管显示采集的电压值。流程图 图五 中档流程图程序代码/*- 内容:温度测量模块-*/ #include <reg52.h> #include <intrins.h>#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址#define KeyPort P1#define _Nop() _nop_() /定义空指令sbit SDA=P27;sbit SCL=P26;/*- 全局变量声明-*/ unsigned char code dofly_DuanMa=0xc0,0xf9,0xa

15、4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/ 显示段码值09unsigned char code dofly_WeiMa4=0xfe,0xfd,0xfb,0xf7;/分别对应相应的数码管点亮,即位码unsigned char TempData4=0xff,0xff,0xff,0xff; /存储显示值的全局变量unsigned char j,hang,lie;bit ack;bit ReadADFlag;/*- 子函数声明-*/void DelayUs2x(unsigned char t);void Display(unsigned char First

16、Bit,unsigned char Num);void Init_Timer0(void);void Timer0_isr(void);void Start_I2c();void Stop_I2c();void NoAck_I2c(void);void SendByte(unsigned char c);unsigned char RcvByte();unsigned char ReadADC(unsigned char Chl);/*- 延时子程序-*/void DelayUs2x(unsigned char t) while(-t);void DelayMs(unsigned char t

17、) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 键盘扫描子程序-*/ unsigned char keyscan() /键盘扫描函数,使用行列逐级扫描法 KeyPort=0x0f; if(KeyPort!=0x0f) DelayMs(10); if(KeyPort!=0x0f) KeyPort=0x0f; switch(KeyPort) case 0x0e: hang=1;break; case 0x0d: hang=2;break; case 0x0b: hang=3;break; case 0x07: hang=4;brea

18、k; default: break; DelayMs(5); KeyPort=0xf0; switch(KeyPort) case 0xe0: lie=1;break; case 0xd0: lie=2;break; case 0xb0: lie=3;break; case 0x70: lie=4;break; default: break; while(KeyPort&0xf0)!=0xf0);return (hang-1)*4+lie-1); return (17);void Display(unsigned char FirstBit,unsigned char Num) sta

19、tic unsigned char i=0; P0=0xff; /清空数据,防止有交替重影 P2=dofly_WeiMai+FirstBit; /取位码 P0=TempDatai; /取显示数据,段码 i+; if(i=Num) i=0;/*- 定时器初始化子程序-*/ void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中

20、断子程序-*/void Timer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(0,4); / 调用数码管扫描 num+; if(num=50) /大致100ms num=0; ReadADFlag=1; /读标志位置1/*- 启动总线-*/void Start_I2c() SDA=1; /发送起始条件的数据信号 _Nop(); SCL=1; _Nop(); /起始条件建立时间大于4.7us,延时 _Nop(); _No

21、p(); _Nop(); _Nop(); SDA=0; /发送起始信号 _Nop(); /起始条件锁定时间大于4 _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; /钳住I2C总线,准备发送或接收数据 _Nop(); _Nop();/*- 结束总线-*/void Stop_I2c() SDA=0; /发送结束条件的数据信号 _Nop(); /发送结束条件的时钟信号 SCL=1; /结束条件建立时间大于4 _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; /发送I2C总线结束信号 _Nop(); _Nop(); _Nop()

22、; _Nop();/*- 写入一个字节到指定地址 -*/void SendByte(unsigned char c) unsigned char BitCnt; for(BitCnt=0;BitCnt<8;BitCnt+) /要传送的数据长度为8位 if(c<<BitCnt)&0x80)SDA=1; /判断发送位 else SDA=0; _Nop(); SCL=1; /置时钟线为高,通知被控器开始接收数据位 _Nop(); _Nop(); /保证时钟高电平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); SDA=

23、1; /8位发送完后释放数据线,准备接收应答位 _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA=1)ack=0; else ack=1; /判断是否接收到应答信号 SCL=0; _Nop(); _Nop();/*- 从指定地址读取一个字节数据 -*/unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc=0; SDA=1; /置数据线为输入方式 for(BitCnt=0;BitCnt<8;BitCnt+) _Nop(); SCL=0; /置时钟

24、线为低,准备接收数据位 _Nop(); _Nop(); /时钟低电平周期大于4.7us _Nop(); _Nop(); _Nop(); SCL=1; /置时钟线为高使数据线上数据有效 _Nop(); _Nop(); retc=retc<<1; if(SDA=1)retc=retc+1; /读数据位,接收的数据位放入retc中 _Nop(); _Nop(); SCL=0; _Nop(); _Nop(); return(retc);/*- 发送非应答-*/void NoAck_I2c(void) SDA=1; _Nop(); _Nop(); _Nop(); SCL=1; _Nop();

25、 _Nop(); /时钟低电平周期大于4 _Nop(); _Nop(); _Nop(); SCL=0; /清时钟线,钳住I2C总线以便继续接收 _Nop(); _Nop(); /*- 主程序-*/main() unsigned char num=0,num1=0,num2=17,k,i; int num3=0,num4=0; Init_Timer0(); DelayMs(20);while (1) /主循环 num2=keyscan(); saomiao: if(num2=0) for(j=0;j<2;j+) /闪烁两次 TempData0=0xff; /关闭数码管 TempData1=

26、0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=dofly_DuanMa1; 将段码1送入第一个数码管 TempData1=0xff; TempData2=0xff; TempData3=0xff; DelayMs(500); if(num2=1) for(j=0;j<2;j+) /闪烁两次 TempData0=0xff; /关闭数码管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); Tem

27、pData0=0xff; TempData1=dofly_DuanMa2; /将段码2送入第二个数码管 TempData2=0xff; TempData3=0xff; DelayMs(500); if(num2=2) for(j=0;j<2;j+) /闪烁两次 TempData0=0xff; /关闭数码管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=0xff; TempData1=0xff; TempData2=dofly_DuanMa3; /将段码3送入第三个数码

28、管 TempData3=0xff; DelayMs(500); if(num2=3) for(j=0;j<2;j+) /闪烁两次 TempData0=0xff; /关闭数码管 TempData1=0xff; TempData2=0xff; TempData3=0xff;DelayMs(500);DelayMs(500); TempData0=0xff; TempData1=0xff; TempData2=0xff; TempData3=dofly_DuanMa4; /将段码4送入第四个数码管 DelayMs(500); if(num2=4) k=1; while(k) num2=keys

29、can(); /调键扫子程序 if(ReadADFlag) ReadADFlag=0; /读标志位为零 EA=0;num=ReadADC(1);EA=1;/A/D采样前关中断,采样结束后开中断 num1=num*5*100/255%10; /计算第一个数码管的段码 num=num*5*10/255; /模拟量转化成数字量 TempData0=0xff; /数码管关 TempData1=dofly_DuanMa(num-(num/100)*100)/10&0x7f;/计算第三个数码管段码,显示小数点 TempData2=dofly_DuanManum%10;/计算第二个数码管段码 Tem

30、pData3=dofly_DuanManum1; if(num2=0|num2=1|num2=2|num2=3|num2=5|num2=6) goto saomiao;/跳出循环 if(num2=5) /实现电压保持 TempData0=0xff; TempData1=dofly_DuanMa(num-(num/100)*100)/10&0x7f; TempData2=dofly_DuanManum%10; TempData3=dofly_DuanManum1; if(num2=6) TempData0=0xff; /关闭所有数码管 TempData1=0xff; TempData2=

31、0xff; TempData3=0xff; /*- 读AD转值程序-*/unsigned char ReadADC(unsigned char Chl) unsigned char Val; Start_I2c(); /启动总线 SendByte(AddWr); /发送器件地址 if(ack=0)return(0); SendByte(Chl); /发送器件子地址 if(ack=0)return(0); Start_I2c(); SendByte(AddRd); if(ack=0)return(0); Val=RcvByte(); NoAck_I2c(); /发送非应位 Stop_I2c();

32、 /结束总线 return(Val); 2.3良档要求矩阵式键盘设置4个按键,初始时,4位数码管无显示。当1号键按下时,第一位数码管显示1,并闪烁两次;当2号键按下时,第二位数码管显示2,并闪烁两次;3号键、4号键同样功能。能对来自热敏电阻传感器上的信号进行A/D转换,并在数码管上实时显示采集的电压值。设置开始、结束两个按键控制采集过程。将显示的电压值转换成显示温度值,并能够通过按键设定校正值。设计思路 对键盘扫描确定键值,可实现按下键数码管显示相应的键值,并通过for循环控制闪烁的次数。其中按键抖动问题可以通过延时程序解决。PCF8591将模拟量转换为数字量,即可将输入模拟电压05V转换为8

33、位的数字量,共,所以每份为=0.02V将模拟量转化成数字量并听过计算分别送入四个数码管,即可实现数码管显示采集的电压值。通过温度电阻的关系,电阻电压的关系制作温度电压表,用查表的的方法实现电压温度的转化显示温度。并设定加减键对温度进行矫正。.流程图图六 中档流程图程序代码/*- 内容:温度测量模块-*/ #include <reg52.h> #include <intrins.h>#define KeyPort P1#define AddWr 0x90 /写数据地址 #define AddRd 0x91 /读数据地址#define _Nop() _nop_() /定义空

34、指令sbit SDA=P27;/定义锁存使能端口 位锁存sbit SCL=P26;/定义锁存使能端口 段锁存bit ack;bit ReadADFlag;/*- 全局变量声明-*/ unsigned char j,hang,lie;unsigned char code dofly_DuanMa=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/ 显示段码值09unsigned char code dofly_WeiMa4=0xfe,0xfd,0xfb,0xf7;/分别对应相应的数码管点亮,即位码unsigned char TempD

35、ata4=0xff,0xff,0xff,0xff; /存储显示值的全局变量unsigned int code wendu=6067,6043,6019,5995,5971,5947,5923,5899,5875,5851,5827,5803,5778,5755,5731,5706,5682,5658,5634,5609,5585,5561,5536,5512,5487,5463,5438,5414,5389,5365,5341,5316,5292,5267,5242,5218,5193,5169,5144,5119,5095,5070,5045,5020,4996,4971,4946,4921

36、,4896,4872,4847,4822,4797,4772,4747,4722,4697,4672,4647,4622,4597,4571,4546,4521,4495,4470,4445,4419,4393,4368,4342,4316,4290,4264,4238,4212,4186,4159,4133,4106,4079,4052,4025,3997,4081,4054,4028,4012,3975,3949,3922,3896,3869,3843,3817,3791,3764,3738,3711,3684,3658,3631,3605,3578,3551,3525,3498,3471

37、,3444,3417,3390,3363,3336,3309,3282,3255,3227,3200,3173,3145,3117,3089,3061,3032,3004,2976,2947,2918,2888,2859,2829,2799,2769,2738,2707,2676,2644,2612,2579,2546,2513,2479,2444,2410,2374,2339,2302,2266,2229,2192,2154,2118,2080,2043,2007,1971,1936,1903,1871,1842,1817,1795,1779,1768,1766,1773,1792,1825

38、;/*- 子函数声明-*/void DelayUs2x(unsigned char t);void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);void Timer0_isr(void);void Start_I2c();void Stop_I2c();void NoAck_I2c(void);void SendByte(unsigned char c);unsigned char RcvByte();unsigned char ReadADC(unsigned char Chl);/*- 延

39、时子程序-*/void DelayUs2x(unsigned char t) while(-t);void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 键盘扫描子程序-*/ unsigned char keyscan() /键盘扫描函数,使用行列逐级扫描法 KeyPort=0x0f; if(KeyPort!=0x0f) DelayMs(10); if(KeyPort!=0x0f) KeyPort=0x0f; switch(KeyPort) case 0x0e: hang=1;bre

温馨提示

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

评论

0/150

提交评论