单片机课程设计,数字温度计。

作者&投稿:产佩 (若有异议请与网页底部的电邮联系)
单片机课程设计 数字温度计~

#include
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^5;//ds18b20与单片机连接口
sbit RS= P3^5;
sbit RW = P3^6;
sbit EN = P3^7;
uchar code str1[]={"temp"};
uchar code str2[]={".C "};
uchar data disdata[5];
uint tvalue;//温度值
uchar tflag;//温度正负标志
/*************************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_com(unsigned char com)//写指令//
{
delay1ms(1);
RS=0;
RW=0;
EN=0;
P1=com;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void wr_dat(unsigned char dat)//写数据//
{
delay1ms(1);;
RS=1;
RW=0;
EN=0;
P1=dat;
delay1ms(1);
EN=1;
delay1ms(1);
EN=0;
}
void lcd_init()//初始化设置//
{
delay1ms(15);
wr_com(0x38);delay1ms(5);
wr_com(0x08);delay1ms(5);
wr_com(0x01);delay1ms(5);
wr_com(0x06);delay1ms(5);
wr_com(0x0c);delay1ms(5);
}

void display(unsigned char *p)//显示//
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay1ms(1);
}
}
init_play()//初始化显示
{
lcd_init();
wr_com(0x80);
display(str1);
wr_com(0xc6);
display(str2);
}
/******************************ds1820程序***************************************/
void delay_18B20(unsigned int i)//延时1微秒
{
while(i--);
}
void ds1820rst()/*ds1820复位*/
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(4); //延时
DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us
DQ = 1; //拉高
delay_18B20(40);
}

uchar ds1820rd()/*读数据*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //给脉冲信号
dat>>=1;
DQ = 1; //给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata)/*写数据*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp()//*读取温度值并转换*/
{
uchar a,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);
}
/*******************************************************************/
void ds1820disp()//温度值显示
{
uchar flagdat;
disdata[0]=tvalue/1000+0x30;//百位数
disdata[1]=tvalue%1000/100+0x30;//十位数
disdata[2]=tvalue%100/10+0x30;//个位数
disdata[3]=tvalue%10+0x30;//小数位

if(tflag==0)
flagdat=0x20;//正温度不显示符号
else
flagdat=0x2d;//负温度显示负号:-
if(disdata[0]==0x30)
{
disdata[0]=0x20;//如果百位为0,不显示
if(disdata[1]==0x30)
{
disdata[1]=0x20;//如果百位为0,十位为0也不显示
}
}
wr_com(0xc0);
wr_dat(flagdat);//显示符号位
wr_com(0xc1);
wr_dat(disdata[0]);//显示百位
wr_com(0xc2);
wr_dat(disdata[1]);//显示十位
wr_com(0xc3);
wr_dat(disdata[2]);//显示个位
wr_com(0xc4);
wr_dat(0x2e);//显示小数点
wr_com(0xc5);
wr_dat(disdata[3]);//显示小数位
}
/********************主程序***********************************/
void main()
{
init_play();//初始化显示
while(1)
{
read_temp();//读取温度
ds1820disp();//显示
}
}
原理图很简单的

如果能多给些分我把我的课程设计给你

1. 实验任务 

用可调电阻调节电压值作为模拟温度的输入量,当温度低于30℃时,发出长嘀报警声和光报警,当温度高于60℃时,发出短嘀报警声和光报警。测量的温度范围在0-99℃。

 

2. 电路原理图

(图)见插图

3. 系统板上硬件连线 

a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。 

b) 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。 

c) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。 

d) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。 

e) 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。 

f) 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。 

g) 把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。 

h) 把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。 

i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。 

j) 把“单片机系统”区域中的P3.6、P3.7用导线分别连接到“八路发光二极管指示模块”区域中的L1、L2上。 

k) 把“单片机系统”区域中的P3.5用导线连接到“音频放大模块”区域中的SPK IN端口上。 

l) 把“音频放大模块“区域中的SPK OUT插入音频喇叭。 

四.C语言源程序

#include <AT89X52.H>

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char dispbuf[8]={10,10,10,10,10,10,0,0};

unsigned char dispcount;

unsigned char getdata;

unsigned int temp;

unsigned char i;

sbit ST=P3^0;

sbit OE=P3^1;

sbit EOC=P3^2;

sbit CLK=P3^3;

sbit LED1=P3^6;

sbit LED2=P3^7;

sbit SPK=P3^5;

bit lowflag;

bit highflag;

unsigned int cnta;

unsigned int cntb;

bit alarmflag;

void main(void)

{

ST=0;

OE=0;

TMOD=0x12;

TH0=0x216;

TL0=0x216;

TH1=(65536-500)/256;

TL1=(65536-500)%256;

TR1=1;

TR0=1;

ET0=1;

ET1=1;

EA=1;

ST=1;

ST=0;

while(1)

{

if((lowflag==1) &&(highflag==0))

{

LED1=0;

LED2=1;

}

else if((highflag==1) && (lowflag==0))

{

LED1=1;

LED2=0;

}

else

{

LED1=1;

LED2=1;

}

}

}

void t0(void) interrupt 1 using 0

{

CLK=~CLK;

}

void t1(void) interrupt 3 using 0

{

TH1=(65536-500)/256;

TL1=(65536-500)%256;

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

temp=getdata*25;

temp=temp/64;

i=6;

dispbuf[0]=10;

dispbuf[1]=10;

dispbuf[2]=10;

dispbuf[3]=10;

dispbuf[4]=10;

dispbuf[5]=10;

dispbuf[6]=0;

dispbuf[7]=0;

while(temp/10)

{

dispbuf[i]=temp%10;

temp=temp/10;

i++;

}

dispbuf[i]=temp;

if(getdata<77)

{

lowflag=1;

highflag=0;

}

else if(getdata>153)

{

lowflag=0;

highflag=1;

}

else

{

lowflag=0;

highflag=0;

}

ST=1;

ST=0;

}

P1=dispcode[dispbuf[dispcount]];

P2=dispbitcode[dispcount];

dispcount++;

if(dispcount==8)

{

dispcount=0;

}

if((lowflag==1) && (highflag==0))

{

cnta++;

if(cnta==800)

{

cnta=0;

alarmflag=~alarmflag;

}

if(alarmflag==1)

{

SPK=~SPK;

}

}

else if((lowflag==0) && (highflag==1))

{

cntb++;

if(cntb==400)

{

cntb=0;

alarmflag=~alarmflag;

}

if(alarmflag==1)

{

SPK=~SPK;

}

}

else

{

alarmflag=0;

cnta=0;

cntb=0;

}

}



我有现成的程序和proteus仿真图!
和你的要求差不多,需要扣我

可以把你那个转发给我不啊


网上有很多这种资料的。你百度一下,温度传感器原理图
温度传感器程序 用18B20做温度传感器
会有很多相关资料,网站我就不发了防有病毒

这样的提问很少有人有时间去实际回答。
18B20是很成熟的东西。。建议你去图书馆或书店走下。。
回更节约时间 更好的得到答案


数字系统设计课程设计内容简介
《数字系统设计课程设计》是一本以数字系统设计课程为基础,深入讲解基本概念、原理和实际设计方法的教材。课程设计部分精心提炼了九个实践题目,旨在帮助学生在教学过程中逐步掌握数字电路系统的设计技巧,从而深化对数字系统设计原理的理解,并培养初步的数字电路设计能力。设计题目涵盖了广泛的内容,如74181电路...

课程设计数字秒表设计 求高手解答。
通过对设计要求的分析,应用相关的数字电子电路方面的知识画出原理图,检查无误后,将原理图在EWB中仿真,验证通过无误后,可以考虑使用何种方案来实现设计电路。我们可以通过对照原理图在万能板上焊接来实现所设计的电路;也可以在PROTEL中画出原理图并布好线通过做PCB板来实现所设计的电路;还可以通过在面包板上插线来实...

求机械原理课程设计一份,包括图纸,说明书,跪谢
下冲头5先下沉3mm,然后上升8mm后停歇(保压),继而上升16mm后停歇,等粉筛将片坯推离冲头后下移21mm;粉筛3在模具1的上方往复振动筛料,然后向左退回,待坯料成形并被推出型腔后,粉筛复在台面上右移约45~50mm推卸成形片坯。4、要求完成的设计工作量 1) 根据功能要求,确定工作原理和绘制系统...

求单片机课程设计 用汇编语言设计计数器(要求从0~9999,...
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机是指一个集成在一块芯片上的完...

十万火急,跪求,微机课程设计-LED七段数码管数字钟
微机接口课程设计实验报告 一、实验目的:1. 掌握综合使用基本输入设备,通用接口芯片,专用接口芯片的方法;2. 熟悉并行接口芯片8255的使用与硬件接口方法, 熟悉8255的各种工作方式,掌握8255的编程方法;3. 掌握实时处理程序的编制和调试方法;二、设计要求:用实验仪器上的并行接口控制键盘和LED显示,设计一个...

新西兰数字多媒体设计专业的基本介绍
数字多媒体设计专业 这些地区目前的课程设计具有挑战,像解决通信问题,工作,娱乐和生活。学生将通过一个方法,在摄影棚发现问题,着手实验,开创新技术,动脑研究等,都是创造性的解决方案。 所有媒体的学生都有机会在媒体实验室,使用先进的设施,拥有自己的技术支持人员小组,三重投影屏幕,立体功能,...

数字电路课程设计题
小型数字系统课程设计题 1、设计并实现一个串行四位运算系统 本课题要求设计并实现一个四位的串行运算系统,该运算系统可完成多种不同形式的运算。例如:①“与”运算、“或”运算、“同或”运算、“加法”运算。②“异或”运算、“与非”运算、“或”运算、“减法”运算。③“加法”运算、“减法”...

数字电子课程设计
课程设计任务书设计要求:设计一个能显示分、时并有闹钟的数字电子钟逻辑电路,要求如下:1.由石英多谐振荡器和分频器产生1\/60Hz标准分脉冲。2.计时电路为“分电路”和“时电路”,“... 课程设计任务书设计要求:设计一个能显示分、时并有闹钟的数字电子钟逻辑电路,要求如下:1. 由石英多谐振荡器和分频器产生1...

数字电子技术课程设计---数字显示电子钟
电子设计 一、 引言 大屏幕数字钟套件采用6位数字(二十四小时制)显示,格式为“时时:分分:秒秒”,电路板尺寸为330MM*70MM,是以前大屏幕数字钟的改进版,解决了以前大屏幕数字钟显示数字“6”和“9”不美观的现象;解决了发光二极管引脚焊盘间距过大容易插坏LED的现象;解决了用户如果自己安装外壳...

单片机篮球比赛计时器课程设计 要求 24秒到计时,计两队得分
2、设置启暂停\/继续键,控制两个计时器的计数,暂停\/继续计数功能。 3、设置复位键:按复位键可随时返回初始状态,即进攻方计时器返回到24s。 4、计时器递减计数到“00”时,计时器跳回“24”停止工作,并给出声音和发光提示,即蜂鸣器发出声响和发光二极管发光 前言 电子课程设计是电子技术学习中非常重...

台前县19864814522: 8051单片机数字温度计单片机的设计设计制作一台热敏电阻温度计,要求如下.a.测量温度为10~150℃.b.温度误差不大于0.5%.c.温度用4位数码管显示.d.以热... -
局芸利焕:[答案] -55~125度,你自己修改: ; END

台前县19864814522: 基于单片机的数字温度计设计 -
局芸利焕: 按你的要求设计了程序并且通过ProteUS仿真 无偿提供原理图,ProteUS仿真工程(可运行),供参考运行效果,及原理图的设计. 推荐:01 基于单片机的数字报警温度计( http://ishare.iask.sina.com.cn/f/11655563.html ); 源程序为汇编 ; ...

台前县19864814522: 单片机课程设计 - ----数字温度计(要有原程序) -
局芸利焕: 系统程序主要包括C程序主函数、DS18B20复位函数、DS18B20写字节函数、DS18B20读字节函数、温度计算转换函数、显示函数等等. 以下是DS18B20温度计C语言程序清单: /*********************************************************************/ ...

台前县19864814522: 基于单片机的数字温度计设计用C语言写程序 -
局芸利焕: //------------------------------------------------------------------//DS18B20温度传感器输出显示,运行本例时,外界温度将显示在1602LCD上//------------------------------------------------------------------#include <reg52.h>#include <intrins.h>#define uchar unsigned char#...

台前县19864814522: 用8051单片机设计一数字式温度计 的电路图 有程序的最好 谢了 -
局芸利焕: 这个电路很简单,我说一下就可以了.数字式温度传感器用最常用的DS18B20,它只有3个管脚,一个接电源,一个接地,另一个接8051单片机就可以了.温度值用数码管显示.这样整个电路就接好了.如果楼主觉得我回答的可以别忘了给我加...

台前县19864814522: 单片机数字温度计课程设计
局芸利焕: 范围不小啊,精度有什么要求.一般的方案 -20至+100 以外估计误差有5度了,有精度要求就用铂电阻加AD.最省事的就去找个18b20的汇编程序做电路试试吧2,3,软件上处理就好了.“不要C语言编的”,你出些钱找人写吧,满足你的要求要免费做个项目了.........

台前县19864814522: 8051单片机数字温度计单片机的设计 -
局芸利焕: -55~125度,你自己修改:;***************WAVE-E6000/T********************** ;*MCU: AT892051 * ;*MCU-crystal: 12M * ;*Version: 01 * ;*Last Updata: 2007-5-27 * ;*Author: zhaojun * ;*Description: * ;DS18B20的读写程序,数据脚P3.4 * ;温度传...

台前县19864814522: 单片机课程设计 数字温度计 -
局芸利焕: 用ds18b20吧,他的精度和范围绝对能满足你的要求,而且输出的是数字信号,ad都省了,我原来做过,现在还有点资料,要的话我给你发邮箱.

台前县19864814522: 基于单片机的数字温度计设计 -
局芸利焕: 目录摘要 2Abstract 3引言 51.1 选题背景 51.2 设计过程及工艺要求 5第二章 方案的比较和论证 62.1 温度传感器的选择 62.2湿度传感器的选择 72.3信号采集通道的选择 7第三章 系统总体设计 93.1 信号采集 103.1.1 温度传感器 103.1.2 湿度传感器...

台前县19864814522: 数字温度计的设计.单片机 -
局芸利焕: .C语言源程序 #include #include unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; unsigned char dispbuf[8]={10,10,10,10,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网