单片机时钟温度实训报告.docx

上传人:b****6 文档编号:3328938 上传时间:2022-11-21 格式:DOCX 页数:17 大小:176.66KB
下载 相关 举报
单片机时钟温度实训报告.docx_第1页
第1页 / 共17页
单片机时钟温度实训报告.docx_第2页
第2页 / 共17页
单片机时钟温度实训报告.docx_第3页
第3页 / 共17页
单片机时钟温度实训报告.docx_第4页
第4页 / 共17页
单片机时钟温度实训报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机时钟温度实训报告.docx

《单片机时钟温度实训报告.docx》由会员分享,可在线阅读,更多相关《单片机时钟温度实训报告.docx(17页珍藏版)》请在冰豆网上搜索。

单片机时钟温度实训报告.docx

单片机时钟温度实训报告

单片机实训报告

 

系别:

电气信息工程学院

姓名:

胡猛

专业:

电气自动化1133

 

绪论

计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。

单片机在这种情况下诞生了。

截止今日,单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

单片计算机即单片微型计算机。

(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。

它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。

而51系列单片机是各单片机中最为典型和最有代表性的一种。

这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。

二、实训任务

1.在Proteus环境下建立原理图。

2.在Keil环境下编写程序实现电子钟和温度显示。

3.系统功能要求:

(1)使用四位LED数码管显示器实现小时、分钟显示,小时和分钟之间用小数点隔开,秒的显示利用最后一位数字的小数点代表秒。

小时调整使用按键K1实现,分钟调整使用按键K2实现。

当K3按下时显示DS18B20所测温度。

其他附加功能不限。

(2)扩展功能:

在完成功能

(1)的基础上可利用蜂鸣器实现整点报时,超温报警等功能。

4.焊接电路板,完成硬件电路的焊接烧写程序,完成系统功能要求。

硬件元件清单:

显示原理

硬件介绍

  PDIP封装的AT89C52引脚图

AT89C52为8位通用微处理器,采用工业标

准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。

功能包括对会聚主IC内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义,在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。

1、兼容MCS51指令系统

2、8kB可反复擦写(大于1000次)FlashROM;

3、32个双向I/O口;

4、256x8bit内部RAM;

5、3个16位可编程定时/计数器中断;

6、时钟频率0-24MHz;

7、2个串行中断,可编程UART串行通道;

8、2个外部中断源,共8个中断源;

9、2个读写中断口线,3级加密位;

10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;

温度显示

DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢

  

封装式,型号多种多样,有LTM8877,LTM8874等等。

主要根据应用场合的不同而改变其外观。

封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。

耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

1:

技术性能描述

①、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

②、测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)0.5℃。

③、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

④、工作电源:

3~5V/DC(可以数据线寄生电源)

⑤、在使用中不需要任何外围元件

⑥、测量结果以9~12位数字量方式串行传送

⑦、不锈钢保护管直径Φ6

⑧、适用于DN15~25,DN40~DN250各种介质工业管道和狭小空间设备测温

⑨、标准安装螺纹M10X1,M12X1.5,G1/2”任选

数码管

原理图

实物图

数码管是一种半导体发光器件,其基本单元是发光二极管,是单片机系统中最常用的一种显示输出,主要用于单片机控制中的数据输出和状态信息显示。

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

仿真图:

三、软件设计

1.主程序流程图

图1主程序流程图

图2.1s中断服务子程序流程图

2.电子时钟:

利用定时器T0实现1s定时,T0设置为方式1,时间50ms,利用软件计数20次,实现1s定时。

中断服务子程序流程图如图2

参考以上流程图编写程序。

使用Proteus和Keil仿真。

使用定时器中断T0实现。

图3.显示子程序流程图图4.按键扫描子程序流程图

3.显示子程序流程图:

参考以上流程图3,编写显示时间的子程序或函数。

小时和分钟之间利用显示器的小数点隔开,秒的显示用显示器最后一位的小数点来表示,1秒闪一次。

使用Proteus和Keil仿真调试。

4.按键扫描子程序功能:

扫描按键K1、K2和K3,当K1按下时,小时加1,当K2按下时分钟加1,使用K3实现,时间/温度切换显示。

按以下流程图4编写程序。

4.焊接电路板,完成硬件电路的焊接烧写程序,完成系统功能要求。

硬件元件清单:

名称

引脚

数量

名称

引脚

数量

瓷片电容

2

2

蜂鸣器

2

1

电解电容

2

1

电阻

2

25

4位共阳LED数码管

12

1

温度传感器

3

1

按键

4

4

AT89C51

40

1

晶体振荡器

2

1

松香

1盒

导线

1段

40针管座

2

焊锡

1段

 

程序:

#include

#include<18b20.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitk1=P1^0;

sbitk2=P1^1;

sbitk3=P1^2;

sbitbeep=P3^6;

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

ucharcodewei1[]={0x01,0x02,0x04,0x08,0x10,0x20};

ucharshi=0,fen=0,miao=0,count=0;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidbuzz()

{uinti;

if((fen==59)&&(miao>51))

{beep=~beep;

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

}

}

voiddisplaytime()

{

P2=wei1[0];

P0=table[shi/10];

delay(5);

P2=wei1[1];

P0=table[shi%10];

delay(5);

P2=wei1[2];

P0=table[fen/10];

delay(5);

P2=wei1[3];

P0=table[fen%10];

delay(5);

P2=wei1[4];

P0=table[miao/10];

delay(5);

P2=wei1[5];

P0=table[miao%10];

delay(5);

}

voidkeyscan()

{

if(k1==0)//调分钟

{delay(5);

if(k1==0)

{

fen++;

while(!

k1);

if(fen==60)

fen=0;

}

}

if(k2==0)//调小时

{

delay(5);

if(k2==0)

{shi++;

while(!

k2);

if(shi==12)

shi=0;

}

}

}

 

voidmain()

{

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

EA=1;

ET0=1;

TR0=1;

ET1=1;

TR1=1;

while

(1)

{

keyscan();

}

}

voidt0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==10)

{count=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

}

if(fen==60)

{

fen=0;

shi++;

}

if(shi==12)

{

shi=0;

fen=0;

miao=0;

}

}

}

voidt1()interrupt3

{

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

if(k3==1)

{

delay(5);

if(k3==1)

{

displaytime();

buzz();

}

}

else

{ds1820rst();//初始化显示

read_temp();//读取温度

ds1820disp();//显示

}

}

#defineuintunsignedint

#defineucharunsignedchar

sbitDQ=P3^0;//ds18b20与单片机连接口

unsignedcharcodestr[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共yang数码管字码表

unsignedcharcodestr1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//个位带小数点字码表

unsignedcharcodewei[]={0x01,0x02,0x04,0x08,0x10,0x20};

unsignedchardatadisdata[4];

unsignedinttvalue;//温度值

unsignedchartflag;//温度正负标志

/******************************ds1820程序***************************************/

voiddelay_18B20(unsignedinti)//延时1微秒

{

while(i--);

}

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

unsignedchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{uchari=0;

for(i=8;i>0;i--)

{DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

return(tvalue);

}

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

voidds1820disp()//温度值显示

{ucharflagdat;

uchari;

disdata[0]=tvalue/1000;//位数

disdata[1]=tvalue%1000/100;//十位数

disdata[2]=tvalue%100/10;//ge

disdata[3]=tvalue%10;//小数位

if(tflag==0)

flagdat=0x20;//正温度不显示符号

else

flagdat=0x2d;//负温度显示负号:

-

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

{

P2=wei[0];

P0=str[disdata[0]];

delay_18B20(60);

P2=wei[1];

P0=str[disdata[1]];

delay_18B20(60);

P2=wei[2];

P0=str1[disdata[2]];

delay_18B20(60);

P2=wei[3];

P0=str[disdata[3]];

delay_18B20(60);

P2=wei[4];

P0=0x9c;

delay_18B20(60);

P2=wei[5];

P0=0xc6;

delay_18B20(60);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1