1、2硬件电路设计(1)工作原理:(a)通过四个温度采集器采集数字温度输入到单片机的p2.0p2.3口。(b)初始化LCD1602使1602能够接受数据,并分配其显示位置,此处采用两行两列式显示。(c)单片机读取信号。(d)单片机向LCD1602写信号,并延时。(e)判断是否有数据高于90度或低于20度,如果有 点亮相应的led,并启动蜂鸣器。(2)硬件系统组成(a)80C52(b)晶振电路(c)复位电路(d)LED灯电路(e)LCD1602(f)温度检测ds18b203. 软件设计(1)时间的设定:从此采用中断T0方式延时,而且是基本单位,无论蜂鸣器还是led,或是显示温度都用到此延时程序。延时
2、程序如下:void tmpDelay(int num) while(num-) ; void Time0(void) interrupt 1 using 0 sound=sound; TH0=(65536-5000)/256; TL0=(65536-5000)%256; (2)信号的读入与写出:读字节程序如下unsigned char ReadOneChar1()/ unsigned char i=0; unsigned char dat1 = 0; for (i=8;i0;i-) DQ1 = 0; / 给脉冲信号 dat1=1; DQ1 = 1; if(DQ1) dat1|=0x80; tm
3、pDelay(4); return(dat1);一共读四个字节,接下来是写字节程序如下void WriteOneChar1(unsigned char dat1)/ i i-) DQ1 = dat1&0x01; tmpDelay(5);注意度字节的返回值。读取温度unsigned int Readtemp1()/ unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B201(); WriteOneChar1(0xCC); WriteOneChar1(0x44); WriteOneChar1(0
4、xBE); a=ReadOneChar1(); b=ReadOneChar1(); / t=b; t900)|(t1;x-) for(y=z;yy-);void write_com(uchar com) /写命令函数 lcdrs=0; P0=com; delay(5); lcden=1; lcden=0;void write_date(uchar date) /写数据函数 lcdrs=1; P0=date;void init_lcd() /初始化函数 lcden=0; /默认开始状态为关使能端,见时序图 lcdrw=0; /选择状态为 写 write_com(0x0f); write_com(
5、0x38); /显示模式设置,默认为0x38,不用变。 write_com(0x01); /显示清屏,将上次的内容清除 write_com(0x0c); /显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪 write_com(0x06); /设置光标状态默认0x06,为读一个字符光标加1. write_com(0x80); /设置初始化数据指针 for(i=0;i16;i+) /显示 The temperature write_date(t0i); delay(0); write_com(0x80+0x40); /显示 is C write_date(t1
6、i);(4)程序流程图如下图所示:四、调试方法及步骤1.用软件调试工具先调试设计好的程序,方法是打开调试工具后新建项目,设计开发环境,选择单片机种类,建立.c,然后加载到环境中,编写程序,生成HEX,把他放虚拟单片机中,调试。2出现错误,就要修改错误,编译全部通过后再接外围硬件电路,接上仿真头,硬件电路供电后再开启仿真头,然后正确设置好仿真器,最后全速运行,查看硬件电路显示结果是否与原设计思想一致。3.显示结果正确后结束仿真,先停止运行程序,再关掉仿真头开关,最后断电,撬开仿真器。五、结果与讨论. 查看结果是否与自己想的一样,如果不一样,可以向同学和老师讨教,如果一样就记录下。六、实训心得通过
7、本次试验学会了如何使用虚拟工具来进行单片机的编辑,通过写c语言又温习了以前的所学,回味看单片机和c语言的魅力。通过调试程序锻炼了个人的耐心恒,恒心,毅力,和理论联系实际的能力通过学习使得懂得了开发工具的使用,多了一门吃饭的的本领,多了一门学习其他学科的实践基础。经过这次实训课程设计,我学到了很多书本上没有的,比较实际、实用的东西,学会了怎样将理论知识运用到实际设计当中,对实验设备和设计软件的使用和分析问题解决问题的能力也有了很大的提高。同时也明白了电路焊接和作品调试时,需要更多的耐心。通过这次实训课程设计,不仅可以在专业上可以学到更多的知识,同时也对平时的学习和工作中产生了影响,那就是认认真真
8、的去完成每一件事。附录(程序清单)#include / 包含52单片机寄存器定义的头文件/*程序功能:LCD1602 显示温度*/#define uchar unsigned char #define uint unsigned intsbit lcdrs=P26; /数据命令选择控制sbit lcdrw=P25; /读/写选择控制sbit lcden=P27; /使能信号sbit LED1=P10;sbit LED2=P11;sbit LED3=P12;sbit LED4=P13;sbit sound=P14;uchar code t0=T1: T2: ;uchar code t1=T3:
9、T4:uchar code digital=0123456789sbit DQ1=P20; /定义温度DS18B20接口,详情见原理图sbit DQ2=P21;sbit DQ3=P22;sbit DQ4=P23;uchar i;/*函数功能:DS18B20相关函数*/void tmpDelay(int num)/延时函数 /定时器T0的高8位重新赋初值void Init_DS18B201()/初始化ds1820 unsigned char x=0; DQ1 = 1; /DS复位 tmpDelay(8); /稍做延时 DQ1 = 0; /单片机将DS拉低 tmpDelay(80); /精确延时
10、大于 480us /拉高总线 tmpDelay(14); x=DQ1; /稍做延时后 如果x=0则初始化成功 x=1则初始化失败 tmpDelay(20);void Init_DS18B202()/初始化ds1820 DQ2 = 1; DQ2 = 0; x=DQ2;void Init_DS18B203()/初始化ds1820 DQ3 = 1; DQ3 = 0; x=DQ3;void Init_DS18B204()/初始化ds1820 DQ4 = 1; DQ4 = 0; x=DQ4;unsigned char ReadOneChar1()/读一个字节unsigned char ReadOneCh
11、ar2()/读一个字节 unsigned char dat2 = 0; DQ2 = 0; dat2 DQ2 = 1; if(DQ2) dat2|=0x80; return(dat2);unsigned char ReadOneChar3()/读一个字节 unsigned char dat3 = 0; DQ3 = 0; dat3 DQ3 = 1; if(DQ3) dat3|=0x80; return(dat3);unsigned char ReadOneChar4()/读一个字节 unsigned char dat4 = 0; DQ4 = 0; dat4 DQ4 = 1; if(DQ4) dat
12、4|=0x80; return(dat4);void WriteOneChar1(unsigned char dat1)/写一个字节void WriteOneChar2(unsigned char dat2)/写一个字节 DQ2 = dat2&void WriteOneChar3(unsigned char dat3)/写一个字节 DQ3 = dat3&void WriteOneChar4(unsigned char dat4)/写一个字节 DQ4 = dat4&unsigned int Readtemp1()/读取温度 / 跳过读序号列号的操作 / 启动温度转换 /跳过读序号列号的操作 /读
13、取温度寄存器 /连续读两个字节数据 /读低8位 /读高8位 /两字节合成一个整型变量。 /得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度 /放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。unsigned int Readtemp2()/读取温度 Init_DS18B202(); WriteOneChar2(0xCC); WriteOneChar2(0x44); WriteOneChar2(0xBE); a=ReadOneChar2(); b=ReadOneChar2(); if(t900|t20
14、0) LED2=0; LED2=1;unsigned int Readtemp3()/读取温度 Init_DS18B203(); WriteOneChar3(0xCC); WriteOneChar3(0x44); WriteOneChar3(0xBE); a=ReadOneChar3(); b=ReadOneChar3(); LED3=0; LED3=1;unsigned int Readtemp4()/读取温度 Init_DS18B204(); WriteOneChar4(0xCC); WriteOneChar4(0x44); WriteOneChar4(0xBE); a=ReadOneChar4(); b=ReadOneChar4(); LED4=0; LED4=1;LCD相关函数void
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2