参考文献
[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998
[2] 李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994 [3] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989
[4] 石东海等.单片机数据通信技术从入门到精通.西安:西安电子科技大学出版社, 2002.148~150. [5] 王忠飞,胥芳.MCS一51单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出版社,2007.P268-273
[6]蔡朝洋,单片机控制实习与专题制作[M].北京:北京航空航天大学出版社,2006
[7]张毅刚,彭喜源,谭晓昀等.MSC-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社,1999
[8]周坚.单片机C语言轻松入门[M].北京:北京航空航天大学出版社,2006 [9]李全利,迟荣强.单片机原理及接口技术[M].北京:高等教育出版社,2004 [10]梅丽凤,王艳秋.单片机原理及接口技术(修订本)[M].北京:清华大学出版社;北京交通大学出版社,2006
[11]阎石.数字电子技术基础 [M].北京:高等教育出版社,1998
[12] 廖常初.现场总线概述[J].电工技术,1999.
[13]王宜怀,刘晓升.嵌入式应用技术基础教程.北京:清华大学出版社,2005.7. [14]邵贝贝等.单片机认识与实践.北京:航空航天大学出版社,2006.8. [15]MC75 AT Command Set V03.Siemens Company,2006. [16]Clark
M,
Service
Business
Strategies
and
ArchItectures[M].Birmingham,UK: Wrox Press,2002.
[17]Dave Crane,Eric Pascarello,Darren James.Ajax IN ACTION[M].Manning Publications CO,2006
26
总结
经过四年的学习,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是比较高兴的。过程当中用到的单片机作为控制内核,四段数码管作为显示部分,及其他电路,共同组成了我的成果数字温度计。首先设计的是它的硬件电路,最重要的部分是89S51控制内核,所有的数据处理都是采用的单片机,其次是DS18B20温度采集电路,其他还有晶振电路,复位电路,报警点及上下限温度调整电路。其次我们设计了它的灵魂软件电路,通过用C语言编程实现对器件的控制。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,不仅使我真正的学会了数字温度计的设计,而且我相信通过这次的学习我能够达到举一反三的效果,同时这次的不足之处是在有些细节方面刚开始做的很不详细,我想原因在于自己平时对自己的学习要求的不够严格,才造成遇到一些问题显得惊慌失措,在日后我会克服这些缺点的。
27
谢辞
经过几个月的忙碌和工作,本次毕业设计已经接近尾声,作为一个专科生的毕业设计,由于经验的匮乏,难免有许多考虑不周的地方,如果没有导师的督促指导。以及一起工作的同学们的支持,想要完成这个设计是难以想象的。 在这里要感谢唐俊英老师,他循导善诱的教导和不拘一格的思路给予我无尽的启迪;他严谨细致,一丝不苟的作风一直是我们工作.学习中的榜样;并将积极影响我今后的学习和工作。然后要感谢大学3年来的所有老师,为我们打下了电子专业知识的基础;同时还要感谢07电气所有的同学们,正是因为有你们的支持和鼓励。我才能在温暖的环境中茁壮成长并顺利完成毕业设计。
。
28
附录
附录一 程序源代码: #include
#define uchar unsigned char //宏定义 #define SET P1_0 //定义调整键 #define DEC P1_1 //定义减少键 #define ADD P1_2 //定义增加键 #define BEEP P3_4 //定义蜂鸣器 bit shanshuo_st; //闪烁间隔标志 bit beep_st; //蜂鸣器间隔标志 sbit DIAN = P2^5; //小数点 uchar x=0; //计数器
signed char m; //温度值全局变量 uchar n; //温度值全局变量 uchar set_st=0; //状态标志
signed char shangxian=30; //上限报警温度,默认值为38 signed char xiaxian=20; //下限报警温度,默认值为38 uchar code
LEDData[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0}; /*****延时子程序*****/ void Delay(uint num) {
while( --num ); }
/*****初始化定时器0*****/ void InitTimer(void) {
TMOD=0x1; TH0=0x4c;
TL0=0x00; //50ms(晶振11.0592M) }
/*****定时器0中断服务程序*****/ void timer0(void) interrupt 1 {
TH0=0x4c; TL0=0x00; x++; }
29
/*****读取温度*****/ void check_wendu(void) {
uint a,b,c;
c=ReadTemperature()-5; //获取温度值并减去DS18B20的温漂误差 a=c/100; //计算得到十位数字 b=c/10-a*10; //计算得到个位数字 m=c/10; //计算得到整数位
n=c-a*100-b*10; //计算得到小数位 if(m<0){m=0;n=0;} //设置温度显示上限
if(m>99){m=99;n=9;} //设置温度显示上限 }
/*****显示开机初始化等待画面*****/ Disp_init() {
P2 = 0xf7; //显示- P0 = 0xbf; Delay(200); P0 = 0xef; Delay(200); P0 = 0xfb; Delay(200); P0 = 0xfe; Delay(200);
P0 = 0xff; //关闭显示 }
/*****显示温度子程序*****/
Disp_Temperature() //显示温度 {
P2 =0x3c; //显示C P0 = 0xbf; Delay(300);
P2 =LEDData[n]; //显示个位 P0 = 0xef; Delay(300);
P2 =LEDData[m]; //显示十位 DIAN =0; //显示小数点 P0 = 0xfb; Delay(300);
P2 =LEDData[m/10]; //显示百位
30