单片机课程设计,数字温度计。
#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”停止工作,并给出声音和发光提示,即蜂鸣器发出声响和发光二极管发光 前言 电子课程设计是电子技术学习中非常重...
局芸利焕:[答案] -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,...