当前位置:文档之家› 基于51单片机的电子日历+温度显示设计

基于51单片机的电子日历+温度显示设计

基于51单片机的电子日历+温度显示设计
基于51单片机的电子日历+温度显示设计

2 电子日历设计与实现

2.1 任务分析

一、功能

本设计要求具有显示生肖、年、月、日、星期、时、分、秒等功能;阳历与阴历能够自动关联;具有温度计功能;具备年、月、日、星期、时、分、秒校准功能;设计最终达到效果如图2-1。

图2-1 设计效果图

二、系统原理

按照系统设计功能的要求,系统由单片机、时钟模块DS1302、显示模块12864、键盘以及温度采集模块DS18B20共5部分电路组成,电路构成框图如图2-2所示。

图2-2 系统设计原理框图

三、系统硬件要求

本设计电路采用AT89S51单片机为控制核心,AT89S51具有在线编程功能,低功耗,能在3V超低压工作。时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。DS1302内部有一个用于临时性存放数据的31*8RAM寄存器。器件在加电情况下,可自动生成年、月、日、周、时、分、秒时间数据,该器件具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能。

温度的采集采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,温度传感器DS18B20还具有测量精度高、

测量范围广等优点。显示部分用12864LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图形,显示多样,清晰可见,能够达到较好的显示效果。

2.2电路设计

一、单片机主控制模块的设计

AT89S51单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3,MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。

单片机的最小系统如图3-1所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端,单片机电路如图2-3 所示。

图2-3 单片机电路

二、时钟电路模块的设计

DSl302数据操作原理: DSl302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个将被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。

DS1302的引脚连接如图2-4所示。其中VCC1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由VCC1或VCC2两者中的较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电。当VCC2

小于VCC1时,DS1302由VCC1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送,与AT89C51的P3.0相连。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在VCC≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),与AT89C51的P3.1相连。SCLK始终是输入端。

图2-4 DS1302的引脚连接图

如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O

引脚变为高阻态。上电运行时,在Vcc≥2.5 V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RCT置为高电平。

三、温度采集模块设计

如图2-5所示。采用数字式温度传感器DS18B20,它是数字式温度传感器,具有测量精度高,电路连接简单特点,此类传感器仅需要一条数据线进行数据传输,使用P0.7与DS18B20的I/O口连接加一个上拉电阻,Vcc接电源,Vss接地。

+CC

图2-5 DS18B20温度采集

四、显示模块的设计

液晶显示模块12864是一种图形点阵液晶显示器,它主要是由128×64个液晶显示点组成的一个128列×64行的阵列,可以显示8×4个(16×16点阵)汉字。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RA M 称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息当然由自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。LCD12864的主要技术参数和性能见表2.1。

表2.1 12864主要技术参数和性能

参数 性能

电 源 电源功耗电流 显示内容 接口总线 工作温度 储存温度

VDD:+5V ;模块内自带-10V 负压,用于LCD 的驱动电压 电源功耗电流(Idd)≤2.8mA 128(列)×64(行)点

与CPU 接口采用8位数据总线并行输入输出和8条控制线; -20℃~+60℃

-30℃~+70℃,当温度低于–15℃时,不能做动画显示。

液晶显示模块12864的DB0-DB7是用来传输数据的,与AT89S51的P0.0-P0.7相连。片选线2cs 和1cs 与AT89C51的P1.1、P1.0相连。GND 是接地线,VCC 与AT89C51的电源连接起来。由于设计结果仿真实现,因此12864 的对比度调节控制和背光照明电源等引脚为系统默认,在设计中可以不予处理。12864的电路连接方式见图2-6所示。

图2-6LCD12864连接图

2.3系统的软件设计

一、软件设计平台与设计过程

目前单片机程序的设计大多采用Keil 设计平台,图2-7是该软件的操作界面,

本设计程序采用Keilc51v802版本,利用C语言编写,由于电子日历的数据处理和函数较多,因此程序模块设计。在设计过程中,首先编写主程序以外的子程序模块,如12864显示器驱动、DS1302驱动等,然后编写主函数。为了程序结构简单化,各个子程序都经过条件编译形成头文件被主程序包含。被主程序包含的文件含有汉字与字符库、线条图形库等。

图2-7 Keil软件的使用界面

二、程序流程框图

在编程部分,首先要初始化DS1302模块,即从DS1302中读出日期和时间,还要从温度传感器DS18B20中读取温度。分离日期、时间、温度后送到显示模块。最后由农历更新子程序来实现与阳历自动关联。程序流程框图见图2-7。

图2-7 主程序流程图

主程序包含主函数和12864.h、model.h、ds1302.h、one-wire.h、lunar.h、inp ut_080627.h头文件,并且含有系统的硬件的预处理指令。主函数的作用是获取时间数据、显示温度、显示时间信息、对时间调整函数调整等,主函数的部分程序如下:

#include

#include "12864.h"

#include "model.h"

#include "ds1302.h"

#include "one-wire.h"

#include "lunar.h"

#include "input_080627.h"

#define uchar unsigned char

#define uint unsigned int

#define NoUpLine 1

#define UpLine 0

#define NoUnderLine 1

#define UnderLine 0

#define FALSE 0

#define TRUE 1

void main(void)

{

SFR_Init();

CAL_Init();

GUI_Init();

TR0 = 1;

TR1 = 1;

while(1)

{

GetTime(&sys); //获得时间

LCD_ShowTemp(); //显示温度

LCD_ShowWNL(); //显示万年历

Time_Set(); //时间设置

}

}

三、阳历程序的设计

时钟芯片DSl302本身能够产生时间信息,阳历程序只需从DSl302各寄存器中读出年、月、日、星期、小时、分、秒等数据,然后再处理即可。在首次对DSl302进行操作之前,必须对它进行初始化,

图2-8 阳历程序流程图

然后从DSl302中读出数据,再经过处理后,送给显示缓冲单元。图2-8所示为阳历程序流程图,程序如下:

#include

//#include "ds1302.h"

#define uchar unsigned char

#define uint unsigned int

#define SECOND 0x80 //秒

#define MINUTE 0x82 //分鍾

#define HOUR 0x84 //小時

#define DAY 0x86 //天

#define MONTH 0x88 //月

#define WEEK 0x8a //星期

#define YEAR 0x8c //年

sbit DS1302_RST=P3^0;

sbit DS1302_SCLK=P3^1;

sbit DS1302_IO=P3^2;

typedef struct systime

{

uchar cYear;

uchar cMon;

uchar cDay;

uchar cHour;

uchar cMin;

uchar cSec;

uchar cWeek;

}SYSTIME;

void DS1302_Write(uchar D)

{

uchar i;

for(i=0;i<8;i++)

{

DS1302_IO=D&0x01;

DS1302_SCLK=1;

DS1302_SCLK=0;

D=D>>1;

}

uchar DS1302_Read()

{

uchar TempDat=0,i;

for(i=0;i<8;i++)

{

TempDat>>=1;

if(DS1302_IO) TempDat=TempDat|0x80;

DS1302_SCLK=1;

DS1302_SCLK=0;

}

return TempDat;

}

void WDS1302(uchar ucAddr, uchar ucDat)

{

DS1302_RST = 0;

DS1302_SCLK = 0;

DS1302_RST = 1;

DS1302_Write(ucAddr); // 地址,命令

DS1302_Write(ucDat); // 写1Byte数据DS1302_SCLK = 1;

DS1302_RST = 0;

}

uchar RDS1302(uchar ucAddr)

{

uchar ucDat;

DS1302_RST = 0;

DS1302_SCLK = 0;

DS1302_RST = 1;

DS1302_Write(ucAddr); // 地址,命令

ucDat=DS1302_Read();

DS1302_SCLK = 1;

DS1302_RST = 0;

return ucDat;

}

void SetTime(SYSTIME sys)

WDS1302(YEAR,sys.cYear);

WDS1302(MONTH,sys.cMon&0x1f);

WDS1302(DAY,sys.cDay&0x3f);

WDS1302(HOUR,sys.cHour&0xbf);

WDS1302(MINUTE,sys.cMin&0x7f);

WDS1302(SECOND,sys.cSec&0x7f);

WDS1302(WEEK,sys.cWeek&0x07);

}

void GetTime(SYSTIME *sys)

{

uchar uiTempDat;

uiTempDat=RDS1302(YEAR|0x01);

(*sys).cYear=(uiTempDat>>4)*10+(uiTempDat&0x0f);

// uiTempDat=RDS1302(0x88|0x01);

// (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(0x88|0x01);

(*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(DAY|0x01);

(*sys).cDay=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(HOUR|0x01);

(*sys).cHour=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(MINUTE|0x01);

sys->cMin=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(SECOND|0x01);

sys->cSec=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);

uiTempDat=RDS1302(MONTH|0x01);

(*sys).cMon=uiTempDat&0x17;

uiTempDat=RDS1302(WEEK|0x01);

sys->cWeek=uiTempDat&0x07;

}

四、阴历程序设计

由于DS1302没有阳历计时功能,因此阴历的计时与实现是要通过阳历日期来推导。根据阳历来推算阴历日期,推算方法是,根据阳历当前日期在一年中的天数来计算阴历日期。阳历一个月不是30天就是3l天(2月除外,闰年2月为29天,平年2月为28天)。阴历一年有12个月或13个月(含闰月),一个月为30天

或29天。如果把一个只有29天的月称为小月,用1为标志,把30天的月称为大月,用0为标志,那么12位二进制就能表示一年12个月的大小。如果有闰月,则把闰月的月份作为一个字节的高4位,低4位表示闰月大小,大月低四位为0,小月为1。这样一个字节就包含了所有闰月的信息。阴历春节和阳历元旦相差的天数也用一个字节表示。总共用1字节就可以存储一年中任何一天阳历和阴历的对应关系的有关数据。

按此方法,先要根据当前阳历的日期,算出阳历为该年中的第几天。计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减。则相减的结果就是阴历在该年的总第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当的阴历年为阳历年的前一年。这种情况下,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据。其结果表示当的阴历日期离春节的天数。计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。计算出天数后,如果大于#FFH,则把#FFH存放在R2中,余值存放在R3中。也就是说在用寄存器R2和R3表示的天数信息中。R2充当主寄存器,数据先存满

R2,再存R3。整个转换程序中,这里面的数据不能被覆盖。

图2-9 推算阴历日期的程序流程图

计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和几旦的日差0时,假设元旦为0天,春节为M天,则日差为M。而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这种方法相比,其数值少了1。所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志)。如果结果小于1,则阴历应该是阳历的前一年;如果结果大于1,说明阳历和阴历为同一年。图2-9为由总天数推算出阴历日期的程序流程图。

五、时间调整程序设计

调整时间用3个调整按钮,1个作为控制用,另外2个作为加和减用,分别定义为设置按钮、加按钮和减按钮。在调整时间过程中,要调整的位与别的位应该有区别,所以增加了闪烁功能。时间调整程序程序流程图如图2-10所示。程序见附录。

图2-10时间调整程序程序流程图

2.4 系统仿真

本设计仿真采用Proteus电路仿真平台,该软件由Labcenter公司开发,是目前

世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。

图2-11 电路仿真图

Proteus7.4版本的电路仿真界面下搭建本设计电路,为了精简电路设计,电路器件之间的连接采用网路标号,电路见图2-11所示。然后加载程序的HEX文件,然后点击仿真运行按钮进入电路仿真状态。仿真效果见图2-12所示,系统通过在Proteus软件仿真,模拟出了实际电路的运行效果,验证了程序的正确性,达到了本设计的目的。

图2-12 电路仿真效果

总结

本系统电路较为简单,但软件工作量较大。在系统软件设计过程中,利用C 语言编程,模块化程序设计,由于程序率为复杂,数据处理指令较多,逻辑性强,对与软件设计工作提出了较高要求。

参考文献

[1] 刘勇. 数字电路[M]. 电子工业出版社, 2006.156-169.

[2] 陈正振. 电子电路设计与制作[J]. 广西交通职业技术学院信息工程系, 2007.

[3] 杨子文. 单片机原理及应用[M]. 西安电子科技大学出版社, 2006.

[4] 张毅刚. MCS-51单片机原理及应用[M]. 北京:教育出版社, 2007.227-237.

[5] 周润景,张丽娜. 基于PROTEUS的电路及单片机系统设计与仿真[M]. 北京:

北京航空航天大学出版社, 2006.96-125.

[6] 杨将新,李华军,刘东骏.单片机程序设计及应用从基础到实践[M]. 电子工业

出版社, 2006.4(3):93一95.

[7] 林志琦,郎建军. 基于PROTEUS的单片机可视化软硬件仿真[M]. 北京:北京

航空航天大学出版社, 2006.9(5):45-51.

[8] 白驹珩,雷晓平. 单片计算机及运用[M]. 电子科技大学出版社,2008.

[9] ATMEL.How to Calculate The Capacitor of The Reset Input of a C51

Microcontroller.2003(9).

[10] ATMEL.8-bit Microcontroller with 4K Bytes In-System Programmable Flash

AT89S51.2002(12).

附录

程序清单

#include

#include "12864.h"

#include "model.h"

#include "ds1302.h"

#include "one-wire.h"

#include "lunar.h"

#include "input_080627.h"

#define uchar unsigned char

#define uint unsigned int

#define NoUpLine

#define UpLine

#define NoUnderLine 1

#define UnderLine

#define FALSE

#define TRUE

uchar bdata gTmp;

sbit t0 = gTmp^0;

sbit t1 = gTmp^1;

sbit t2 = gTmp^2;

sbit t3 = gTmp^3;

sbit t4 = gTmp^4;

sbit t5 = gTmp^5;

sbit t6 = gTmp^6;

sbit t7 = gTmp^7;

uchar dispBuf[7];

uchar T0_Count=0,Tmp_Count=0;

bit T0_Flag,Tmp_Flag,Flash_Flag;

SYSTIME sys; //系统日期

SPDA TE SpDat; //农历日期

//设置时间的标志

bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;

bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;

uchar State_Set=0; //设置状态(用来区分此时是在设置时,分,秒,日,月,年)

bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE; //用来标志三个按键是否按下。uchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,

0,31,29,31,30,31,30,31,31,30,31,30,31};

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

cDat: 要显示的数

X: 行数0~7

Y: 列数0~127

show_flag: 是否反白显示,0反白,1不反白

upline: 上划线,0表示带上划线

underline: 下划线, 0表示带下划线

返回: 无

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

void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under) {

uchar s[2];

s[0]=cDat/10+'0';

s[1]=cDat%10+'0';

en_disp(X,Y,2,Asc,s,show_flag,up,under);

}

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

// 函数名: Show_YMD()

// 入口参数: void

// 出口参数:void

// 功能: 显示公历与农历的年、月、日、星期

// 说明: 普通模式每天刷新一次

// 设置模式每次循环刷新一次

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

void Show_YMD() //显示年月日星期

{

uchar uiTempDat;

uiTempDat=RDS1302(0x88|0x01);

sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);

LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine); //月

hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);

Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);

Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag); //年

hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);

if(sys.cWeek==7)

hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine); //星期日

else

hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine); //星期

LCD_ShowTime(20,0,9,1,UpLine,UnderLine);

LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);

hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine); //年

SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay); //得到农历日期

//显示农历日期

if(SpDat.cMon==1) //农历月hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine); //"正"

else if(SpDat.cMon==11)

hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine); //"冬"

else if(SpDat.cMon==12)

hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine); //"腊"

else

hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"

if(SpDat.cDay/10==1 && SpDat.cDay%10>0) //显示"十" 例如"十四"而不是"一四"

hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);

else if(SpDat.cDay/10==2 && SpDat.cDay%10>0) //显示"廿" 例如"廿三"而不是"二四"

hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);

else

hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine); //正常显示数字

if(!(SpDat.cDay%10)) // //"十"

hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);

else

//正常数字

hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);

//显示生肖

hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine); //生肖

//显示天干地支

hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干

hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine); //地支

}/**************************************************************

// 函数名: LCD_ShowTemp()

// 入口参数: void

// 出口参数:void

// 功能: 采集温度并显示

// 说明: 30秒更新一次

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

void LCD_ShowTemp()

{uchar datTm[2];

float temp;

uchar buftmp;

if(!Tmp_Flag) return;

Tmp_Flag=FALSE;

DS18B20_Init();

DS18B20_RomCmd(0xcc); //Skip Rom command;

Delay_Xms(20);

DS18B20_MemCmd(0x44); //Convert T command;

DS18B20_Init();

DS18B20_RomCmd(0xcc);

DS18B20_MemCmd(0xbe);

DS18B20_ReadDat(2,datTm);

gTmp = datTm[0];

temp = (uchar)t0 * 0.0625 + (uchar)t1 * 0.125 + (uchar)(t2) * 0.25 + (uchar)(t3) * 0.5;

buftmp = (uchar)(temp*10);

dispBuf[2] = '.';

dispBuf[3] = buftmp + '0';

buftmp = (uchar)t4 + (uchar)t5*2 + (uchar)t6*4 + (uchar)t7*8;

gTmp = datTm[1];

gTmp &= 0x07;

buftmp += (gTmp * 16);

dispBuf[0] = (buftmp/10) + '0';

dispBuf[1] = (buftmp%10) + '0';

dispBuf[4] = 0xdf; //摄氏度;

dispBuf[2] = 'C';

en_disp(0,65,2,Asc,dispBuf,1,UpLine,UnderLine);

}

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

// 函数名: LCD_ShowWNL()

// 入口参数: void

// 出口参数:void

// 功能: 显示万年历

// 说明:

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

void LCD_ShowWNL()

{

LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine); //秒每次循环钟刷新一次

if(!sys.cSec || State_Set) //分在普通模式时每分钟刷新一次

LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); // 在设置模式时每次循环刷新一次

if(!sys.cSec && !sys.cMin || State_Set) //时在普通模式时每小时刷新一次

LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine); // 在设置模式时每次循环刷新一次

if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ) //公历农历的年、月、日、星期{

//普通模式每天刷新一次

Show_YMD(); //设置模式每次循环刷新一次

if(State_Set==7) State_Set=0;

}

}

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

// 函数名: CAL_Init()

// 入口参数: void

// 出口参数:void

// 功能: 日期初始化

// 说明: 星期通过计算得到

***********************************************************/ void CAL_Init()

{

sys.cYear=0x09;

sys.cMon=0x05;

sys.cDay=0x05;

sys.cHour=0x10;

sys.cMin=0x27;

sys.cSec=0x00;

sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);

}

/*********************************************************** // 函数名: SFR_Init()

// 入口参数: void

// 出口参数:void

// 功能: 寄存器初始化

// 说明: 定时器0控制温度采集,定时器1控制按键扫描

***********************************************************/ void SFR_Init()

{

T0_Flag=FALSE;

Tmp_Flag=TRUE;

Flash_Flag=FALSE;

TMOD=0x11;

ET0=1;

ET1=1;

TH0= (-50000)/256;

TL0= (-50000)%256;

TH1= (-10000)/256;

TL1= (-10000)%256;

EA=1;

}

/*********************************************************** // 函数名: GUI_Init()

// 入口参数: void

// 出口参数:void

// 功能: 图形界面初始化

// 说明: 一些永远不耍更新的图形(如线条,"年"、"月"、"日"等) 只是在初始化时写入,中间过程不再更新。

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

接口实验报告-基于51单片机的脉搏温度测试系统-

摘要 接口实验报告 题目:脉搏波体温自动采集系统院(系):电子工程与自动化学院 专业:仪器仪表工程 学生姓名: 学号: 指导老师:李智 职称:教授 20 年8月28日 I

摘要 本文介绍了一种基于51单片机的心率体温采集系统。首先介绍了51系列单片机的内部相关配置、工作原理以及编程方法,其次介绍了温度传感器PT100的相关测温方法以及通过红外光电传感器TCRT5000对射的方法来抓取人体脉搏信号。此次设计的电路部分主要包括:传感测量电路、放大电路、滤波整形电路、AD转换电路、控制电路、电源供电电路等。上位机为通过VC编程界面。通过上位机按键控制,将PT100及TCRT5000输入的微弱信号进行放大整形,最后AD采集转换传送给单片机,在上位机界面上显示相关体温及心率信息。 本次硬件设计基于比较稳定可行、低成本的设计思想,软件设计采用模块化的设计方法,并且详细分析了红外传感器TCRT5000应用于心率测量上以及PT100应用于温度测量上的原理及优点,阐述了其他各配合电路的组成与工作特点,并且通过仿真进行电路的可行性验证,最后完成实物电路的设计,使得本次课题的预期结果得以实现。 关键词:51单片机;传感器;仿真;AD转换

Abstract Abstract This paper introduced a heart rate and body temperature acquisition system that based on 51 single chip microcomputer. First the internal configurations of 51 single chip microcomputer are introduced. And the paper also tell how 51 single chip microcomputer works and how can we program on it. Then the method of using temperature sensor PT100 to get body temperature is introduced, and we use infrared photoelectric sensor TCRT5000 to get the pulse signal of human body.The design of the circuit mainly comprises sensing circuit, amplifying circuit, filtering and shaping circuit, AD converting circuit, counting and displaying circuit, controlling circuit, power supplying circuit and so on. When the keyboard is pressed, the system starts to get signal. The small signal from PT100 and TCRT5000 will be amplified and shaped. Then ad converter will change the analog signal into digital signal and send to 51 single chip microcomputer. At last LCD1602 will display the information of body temperature and heart rate. Keywords: Piezoelectric sensors;control circuit;counters;Multisim2001 simulation software control circuit. III

基于AT89C51单片机的温度传感器

基于AT89C51单片机的温度传感器 目录 摘要.............................................................. I ABSTRACT........................................................... I I 第一章绪论 (1) 1.1 课题背景 (1) 1.2本课题研究意义 (2) 1.3本课题的任务 (2) 1.4系统整体目标 (2) 第二章方案论证比较与选择 (3) 2.1引言 (3) 2.2方案设计 (3) 2.2.1 设计方案一 (3) 2.2.2 设计方案二 (3) 2.2.3 设计方案三 (3) 2.3方案的比较与选择 (4) 2.4方案的阐述与论证 (4) 第三章硬件设计 (6) 3.1 温度传感器 (6) 3.1.1 温度传感器选用细则 (6) 3.1.2 温度传感器DS18B20 (7) 3.2.单片机系统设计 (13)

3.3显示电路设计.................................错误!未定义书签。 3.4键盘电路设计................................错误!未定义书签。 3.5报警电路设计.................................错误!未定义书签。 3.6通信模块设计.................................错误!未定义书签。 3.6.1 RS-232接口简介..............................错误!未定义书签。 3.6.2 MAX232芯片简介.............................错误!未定义书签。 3.6.3 PC机与单片机的串行通信接口电路.............错误!未定义书签。 第四章软件设计..................................错误!未定义书签。 4.1 软件开发工具的选择..........................错误!未定义书签。 4.2系统软件设计的一般原则.......................错误!未定义书签。 4..3系统软件设计的一般步骤......................错误!未定义书签。 4.4软件实现....................................错误!未定义书签。 4.4.1系统主程序流程图.........................错误!未定义书签。 4.4.2 传感器程序设计...........................错误!未定义书签。 4.4.3 显示程序设计.............................错误!未定义书签。 4.4.4 键盘程序设计.............................错误!未定义书签。 4.4.5 报警程序设计.............................错误!未定义书签。 4.4.6 通信模块程序设计.........................错误!未定义书签。 第五章调试与小结..................................错误!未定义书签。致谢...............................................错误!未定义书签。参考文献...........................................错误!未定义书签。附录...............................................错误!未定义书签。系统电路图.......................................错误!未定义书签。系统程序.........................................错误!未定义书签。

基于51单片机的电子台历设计

摘要 本设计是一个基于单片机AT89S51的简易电子台历,附有复位电路,时钟电路,键盘电路。复位电路是单片机的初始化操作,除了正常的初始化外,当程序运行出错后或者操作失误使系统进入死锁状态时,为摆脱困境,也需要能够通过独立式键盘电路进行启动,调整,再运行,时钟电路采用12MHZ的晶振,作为系统的时钟源,具有较高的准确性。 在上电或者复位时数码管显示年,月,日,时,分,秒。A键用于模式调整,形成一个循环,按一次键,即对秒调整。再按一次对分调整,如此循环。B键用于按下A键之后进行加1的操作,按一次加1,C键用于减1的操作,按一次减1。能够完成从00时00分00秒到23时59分59秒的循环计时,过23时59分59秒,日期增加1,当日期达到1个月后,月进位1,满12个月后,年进位1,年的首2位保持不变,始终为20。单片机并行口的电子台历的设计在AT89S51的P0口和P2口外接由14个LED数码管(LED7~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.7~P2.0作LED的段码年月日的位控输出线(P2.7~P2.0对应于LED7~LED0),P1.7~P1.0对应时间的数码管,P3口外接三个按键A、B、C(对应于P3.0~P3.2)。数码管为4位一体的共阳极的数码管,数码管采用动态扫描法,从右往左依次点亮,显示数字。 关键字:单片机、电子台历、数码管 ABSTRACT The design is a single electrical calendar basing SCMC of AT89S51. There are restoration circuit, clock circuit and keyboard circuit. Restoration circuit is used as an original operation, besides normal start-up, when the program runs mistakenly and system loses its order ,in order to get rid of the trouble, it also need to restart ,adjust and run through keyboard. Clock circuit uses 12MHZ Crystal as the source of the calendar ,with a high accuracy. When the system starts, the display shows year, month ,day, week and time the A keyboard is used to start and adjust, the B keyboard is used to add 1,when press it ,the date will add 1, the C keyboard is used to minus 1, when press it , the date will minus 1.It can make a cycle from 00:00 to 23:59:59.The display includes 14 LEDS, the SCMC joins the display in the P1, P0 ports and P2 ports, the SCMC joins the keyboards in the P3 scan, lighting the LEDS from right to left , showing the numbers. Keywords: SCMC, Calendar LED

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.doczj.com/doc/3017726284.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

51单片机测温程序

#include #include #define uint unsigned int #define uchar unsigned char uinti,numone,numtwo,temp; ucharqian,bai,shi,ge,xiaoshu; sbitdq=P2^2; sbitdula=P2^6; sbitwela=P2^7; uchar code list[]={ 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71,0x80 }; unsigned char code listone[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; void delay(uint z) { uintx,y; for(x=100;x>0;x--) for(y=z;y>0;y--); } voiddelayone(unsigned char i)

{ while(--i); } /****************************************** 此延时函数针对的是12Mhz的晶振 delay(0):延时518us 误差:518-2*256=6 delay(1):延时7us (原帖写"5us"是错的)delay(10):延时25us 误差:25-20=5 delay(20):延时45us 误差:45-40=5 delay(100):延时205us 误差:205-200=5 delay(200):延时405us 误差:405-400=5*/ voidshuma(uchar temp) { shi=temp/100; ge=temp%100/10; xiaoshu=temp%10; dula=1; P0=list[shi]; dula=0; P0=0xff; wela=1; P0=0xfe;

(完整word版)基于51单片机的温度控制系统设计

基于51单片机的水温自动控制系统 0 引言 在现代的各种工业生产中 ,很多地方都需要用到温度控制系统。而智能化的控制系统成为一种发展的趋势。本文所阐述的就是一种基于89C51单片机的温度控制系统。本温控系统可应用于温度范围30℃到96℃。 1 设计任务、要求和技术指标 1.1任务 设计并制作一水温自动控制系统,可以在一定范围(30℃到96℃)内自动调节温度,使水温保持在一定的范围(30℃到96℃)内。 1.2要求 (1)利用模拟温度传感器检测温度,要求检测电路尽可能简单。 (2)当液位低于某一值时,停止加热。 (3)用AD转换器把采集到的模拟温度值送入单片机。 (4)无竞争-冒险,无抖动。 1.3技术指标 (1)温度显示误差不超过1℃。 (2)温度显示范围为0℃—99℃。 (3)程序部分用PID算法实现温度自动控制。 (4)检测信号为电压信号。 2 方案分析与论证 2.1主控系统分析与论证 根据设计要求和所学的专业知识,采用AT89C51为本系统的核心控制器件。AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器。其引脚图如图1所示。 2.2显示系统分析与论证 显示模块主要用于显示时间,由于显示范围为0~99℃,因此可采用两个共阴的数码管作为显示元件。在显示驱动电路中拟订了两种设计方案: 方案一:采用静态显示的方案 采用三片移位寄存器74LS164作为显示电路,其优点在于占用主控系统的I/O口少,编程简单且静态显示的内容无闪烁,但电路消耗的电流较大。 方案二:采用动态显示的方案 由单片机的I/O口直接带数码管实现动态显示,占用资源少,动态控制节省了驱动芯片的成本,节省了电 ,但编程比较复杂,亮度不如静态的好。 由于对电路的功耗要求不大,因此就在尽量节省I/O口线的前提下选用方案一的静态显示。

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

基于AT89C5单片机的数字温度计设计

基于AT89C5单片机的数字温度计设计

CHANGZHOU INSTITUTE OF TECHNOLOGY 科研实践 题目:基于单片机的数字温度计的设计

目录 目录 (2) 1.绪论 (3) 1.1课题研究背景及意义 (3) 1.2课题研究的内容 (3) 2.数字温度计的系统概论 (5) 2.1系统的功能 (5) 2.2温度计的分析 (5) 3.设计方案和要求 (6) 3.1设计任务和要求 (6) 3.2元器件的选取 (6) 3.3系统最终设计方案 (7) 4.硬件设计 (8) 4.1总体设计结构图 (8) 4.2硬件电路概述 (8) 4.2.1最小系统 (8) 4.2.2输入电路设计 (11) 4.2.3输出电路设计 (12) 5.硬件仿真 (15)

6.实物制作 (18) 6.1电路板焊接 (18) 6.2电路板调试 (19) 7.小结 (20) 附录 (21) 1.参考文献 (21) 2.原理图 (22) 3.元器件清单 (23) 4.软件程序 (24) 5.实物图 (30) 1.绪论 1.1课题研究背景及意义 单片机技术作为计算机技术的一个分支,广泛地应用于工业控制,智能仪器仪表,机电一体化产品,家用电器等各个领域。“单片机原理与应用”在工科院校各专业中已作为一门重要的技术基础课而普遍开设。学生在课程设计,毕业设计,科研项目中会广泛应用到单片机知识,而且,进入社会后也会广泛接触到单片机的工程项目。鉴于此,提高“单片机原理及应用”课的教学效果,让学生参与课程设计

实习甚为重要。单片机应用技术涉及的内容十分广泛,如何使学生在有限的时间内掌握单片机应用的基本原理及方法,是一个很有价值的教学项目。为此,我们进行了“单片机的学习与应用”方面的课程设计,锻炼学生的动脑动手以及协作能力。 单片机课程设计是针对模拟电子技术,数字逻辑电路,电路,单片机的原理及应用课程的要求,对我们进行综合性实践训练的实践学习环节,它包括选择课设任务、软件设计,硬件设计,调试和编写课设报告等实践内容。通过此次课程设计实现以下三个目标:第一,让学生初步掌握单片机课程的试验、设计方法,即学生根据设计要求和性能约束,查阅文献资料,收集、分析类似的相关题目,并通过元器件的组装调试等实践环节,使最终硬件电路达到题目要求的性能指标;第二,课程设计为后续的毕业设计打好基础,毕业设计是系统的工程设计实践,而课程设计的着眼点是让学生开始从理论学习的轨道上逐渐引向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。第三,培养学生勤于思考乐于动手的习惯,同时通过设计并制作单片机类产品,使学生能够自己不断地学习接受新知识(如在本课设题目中存在智能测温器件DS18B20,就是课堂环节中不曾提及的“新器件”),通过多人的合作解决现实中存在的问题,从而不断地增强学生在该方面的自信心及兴趣,也提高了学生的动手能力,对学生以后步入社会参加工作打下一定良好的实践基础。 1.2课题研究的内容 本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数 字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机喜爱的硬 件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也进 行一一介绍,该系统可以方便的是实现温度采集和显示,并可以根据需要任意 设定上下限报警温度,它使用起来方便,具有精度高、量程宽、灵敏度高、体 积小、功耗低等优点,适合我们日常生活和工农业生产中的温度测量,也可以 当做温度处理模块嵌入其他系统中,作为其他主系统的辅助扩展。DS18B20和AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合 与恶劣环境下进行现场温度测量,有广泛的应用前景。 本设计首先是确定目标,气候是各个功能模块的设计,再在Proteus软件上 进行仿真,修改,仿真。 本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范 围内时,可以报警。

基于AT89C51单片机的测温系统

引言 本文主要介绍了一个基于AT89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器DS18B20的数据采集过程,并介绍了利用C语言编程对DS18B20的访问,该系统可以方便的实现实现温度采集和显示,使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量。数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C52单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示。 .

一、设计要求 通过基于MCS-51系列单片机AT89C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用,C语言的设计;并且把我们这一年所学的数字和模拟电子技术、检测技术、单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。 以MCS-51系列单片机为核心器件,组成一个数字温度计,采用数字温度传感器DS18B20为检测器件,进行单点温度检测,检测精度为0.5摄氏度。温度显示采用3位LED数码管显示,两位整数,一位小数。具有键盘输入上下限功能,超过上下限温度时,进行声音报警。 二、基本原理 原理简述:数字温度传感器DS1820把温度信息转换为数字格式;通过“1-线协议”,单片机获取指定传感器的数字温度信息,并显示到显示设备上。通过键盘,单片机可根据程序指令实现更灵活的功能,如单点检测、轮转检测、越数字温度传感器的温度检测及显示的系统原理图如图DS1820限检测等。基于 图 2.1 基于DS1820的温度检测系统框图 三:主要器件介绍(时序图及各命令序列,温度如何计算等) 系统总体设计框图 由于DS18B20数字温度传感器具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠,所以在该设计中采用DS18B20数字温度传感器测量温度。 测温电路设计总体设计框图如图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,显示采用4位LED数码管,报警采用蜂鸣器、LED灯实现,键盘用来设定报警上下限温度。 .. . 测温电路设计总体设计框图图3.11.控制模块 AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公

基于51单片机的温度控制系统的设计

基于单片机的温度控制系统设计 1.设计要求 要求设计一个温度测量系统,在超过限制值的时候能进行声光报警。具体设计要求如下: ①数码管或液晶显示屏显示室内当前的温度; ②在不超过最高温度的情况下,能够通过按键设置想要的温度并显示;设有四个按键,分别是设置键、加1键、减1键和启动/复位键; ③DS18B20温度采集; ④超过设置值的±5℃时发出超限报警,采用声光报警,上限报警用红灯指示,下限报警用黄灯指示,正常用绿灯指示。 2.方案论证 根据设计要求,本次设计是基于单片机的课程设计,由于实现功能比较简单,我们学习中接触到的51系列单片机完全可以实现上述功能,因此可以选用AT89C51单片机。温度采集直接可以用设计要求中所要求的DS18B20。报警和指示模块中,可以选用3种不同颜色的LED灯作为指示灯,报警鸣笛采用蜂鸣器。显示模块有两种方案可供选择。 方案一:使用LED数码管显示采集温度和设定温度; 方案二:使用LCD液晶显示屏来显示采集温度和设定温度。 LED数码管结构简单,使用方便,但在使用时,若用动态显示则需要不断更改位选和段选信号,且显示时数码管不断闪动,使人眼容易疲劳;若采用静态显示则又需要更多硬件支持。LCD显示屏可识别性较好,背光亮度可调,而且比LED 数码管显示更多字符,但是编程要求比LED数码管要高。综合考虑之后,我选用了LCD显示屏作为温度显示器件,由于显示字符多,在进行上下限警戒值设定时同样可以采集并显示当前温度,可以直观的看到实际温度与警戒温度的对比。LCD 显示模块可以选用RT1602C。

3.硬件设计 根据设计要求,硬件系统主要包含6个部分,即单片机时钟电路、复位电路、键盘接口模块、温度采集模块、LCD 显示模块、报警与指示模块。其相互联系如下图1所示: 图1 硬件电路设计框图 单片机时钟电路 形成单片机时钟信号的方式有内部时钟方式和外部时钟方式。本次设计采用内部时钟方式,如图2所示。 单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为此放大器的输入端和输出端,其频率范围为~12MHz ,经由片外晶体振荡器或陶瓷振荡器与两个匹配电容一 起形成了一个自激振荡电路,为单片机提供时钟源。 复位电路 复位是单片机的初始化操作,其作用是使CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作,以防止电源系统不稳定造成CPU 工作不正常。在系统中,有时会出现工作不正常的情况,为了从异常状态中恢复,同时也为了系统调试方便,需要设计一个复位电路。 单片机的复位电路有上电复位和按键复位两种形式,因为本次设计要求需要有启动/复位键,因此本次设计采用按键复位,如图3。复位电路主要完成系统 图2 单片机内部时钟方式电路 图3 单片机按键复位电路

本科毕业设计--基于51单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

基于51单片机及DS18B20温度传感器的数字温度计设计

基于51单片机及DS18B20温度传感器的数字温度计设计

摘要 本设计采用的主控芯片是ATMEL公司的AT89S52单片机,数字温度传感器是DALLAS 公司的DS18B20。本设计用数字传感器DS18B20测量温度,测量精度高,传感器体积小,使用方便。所以本次设计的数字温度计在工业、农业、日常生活中都有广泛的应用。 单片机技术已经广泛应用社会生活的各个领域,已经成为一种非常实用的技术。51单片机是最常用的一种单片机,而且在高校中都以51单片机教材为蓝本,这使得51单片机成为初学单片机技术人员的首选。本次设计采用的AT89S52是一种flash型单片机,可以直接在线编程,向单片机中写程序变得更加容易。本次设计的数字温度计采用的是DS18B20数字温度传感器,DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。 本设计根据设计要求,首先设计了硬件电路,然后绘制软件流程图及编写程序。本设计属于一种多功能温度计,温度测量范围是-55℃到125℃。温度值的分辨率可以被用户设定为9-12位,可以设置上下限报警温度,当温度不在设定的范围内时,就会启动报警程序报警。本设计的显示模块是用四位一体的数码管动态扫描显示实现的。在显示实时测量温度的模式下还可以通过查询按键查看设定的上下限报警温度。 关键词:单片机、数字温度计、DS18B20、AT89S52

目录 1 概述 ................................................................................................................................................................. - 1 - 1.1系统概述 ................................................................................................................................................. - 1 - 2 系统总体方案及硬件设计 ............................................................................................................................... - 2 - 2.1 系统总体方案 ........................................................................................................................................ - 2 - 2.1.1系统总体设计框图 ...................................................................................................................... - 2 - 2.1.2各模块简介 .................................................................................................................................. - 2 - 2.2 系统硬件设计 ........................................................................................................................................ - 5 - 2.2.1 单片机电路设计 ......................................................................................................................... - 5 - 2.2.2 DS18B20温度传感器电路设计.................................................................................................. - 6 - 2.2.3 显示电路设计 ............................................................................................................................. - 6 - 2.2.4 按键电路设计 ............................................................................................................................. - 7 - 2.2.5 报警电路设计 ............................................................................................................................. - 8 - 3 软件设计 ........................................................................................................................................................... - 9 - 3.1 DS18B20程序设计................................................................................................................................. - 9 - 3.1.1 DS18B20传感器操作流程.......................................................................................................... - 9 - 3.1.2 DS18B20传感器的指令表.......................................................................................................... - 9 - 3.1.3 DS18B20传感器的初始化时序................................................................................................ - 10 - 3.1.4 DS18B20传感器的读写时序.................................................................................................... - 10 - 3.1.5 DS18B20获取温度程序流程图................................................................................................ - 11 - 3.2 显示程序设计 ...................................................................................................................................... - 13 - 3.3 按键程序设计 ...................................................................................................................................... - 13 -4实物制作及调试 .............................................................................................................................................. - 14 -5电子综合设计体会 .......................................................................................................................................... - 15 -参考文献 ............................................................................................................................................................. - 16 -附1 源程序代码 .............................................................................................................................................. - 17 -附2 系统原理图 .............................................................................................................................................. - 32 -

相关主题
文本预览
相关文档 最新文档