参考文献 参考文献
[1]陈明荧. 8051单片机课程设计实训教程[M].北京:清华大学出版社 [2]苏平.单片机的原理与接口技术[M].北京:电子工业出版社,2006:1-113. [3]王忠民.微型计算机原理[M].西安:西安科技大学出版社,2003:15-55. [4]何立民.单片机高级教程[M].北京:北京航空航天大学出版社,2003年 [5]纪宗南.单片机外围器件使用手册[M].北京:北京航空航天大学出版社,622-655. [6]周雪.模拟电子技术[M]西安: 西安电子科技大学出版社,2005:81-95. [7]左金生.电子与模拟电子技术[M].北京:电子工业出版社,2004:105-131.
[8]尹勇.单片机开发环境μVision2的开发指南[M]. 北京:北京航空航天大学出版社,2004:173-199.
[9]马忠梅,籍顺心等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2001年
[10]新编单片机原理与应用(第二版).西安电子科技大学出版社,2007.2 [11]张萌.单片机应用系统开发综合实例[M]. 北京:清华大学出版社,2007.7 [12]楼然苗.单片机课程设计指导[M]. 北京:北京航空航天大学出版社,2007.7 [13]朱思荣.51单片机实现公历与农历、星期的转换[Z].当当电子网 [14]李广弟. 单片机原理及应用[M] 北京航空航天大学出版社,2004年 [15]王越明.电子万年历的设计[J].黑龙江科技信息,2004年
[16] VergheseGC, LangH, CaseyLF. Analysisofinstabilityinelectricalmachines .IEEETransonIA, 1986, 22 :853-864 . [17] RichardBlanchard,
JamesHarden.
Mosfetscontrolmorepowerinthesame-sizedpackage .ElectronicDesign, 1982, 12 :107~114 [18] TiinaHavana. 2003April. CommunicationintheSoftwareVulnerabilityReportingProcess. M.A. thesis, UniversityofJyvaskyla.
[19] DanielE. Geer, Jr. (Editor), MaryAnnDavidson, MarcDonner, LyndaMcGhie, andAdamShostack.
[20] MenozziG.Eurimusapproved19projectsfortotalamountofEuro89million.MSTnews.2000.5
27
致谢 致谢
经过半个多月的时间,课程设计按照预期完成了,由于本人的知识水平有限,论文和设计中有遗漏和缺陷的地方恳请指正。
感谢我的导师,彭老师给了我莫大的帮助,在他悉心的指导和严格的要求下,作品和论文顺利完成了。论文从选题和最终完成,凝结着导师的辛勤的汗水,他不辞劳苦的教导、严谨的作风使我终生受益。在此课程设计完成之际,谨向导师和所有帮助过我的老师致以崇高的敬意和衷心的感谢。
还有感谢家人、朋友还有宿舍里所有的室友,是他们给我创造了良好的学习氛围,在学习和生活中给了我支持和帮助。在以后的学习生活中我会时时敦促自己更加努力,不辜负师长、亲人、朋友对我的期望。
在论文完成之际,我的心情万分激动。从论文的选题、资料的收集到论文的撰写编排整个过程中,我得到了许多的热情帮助。其中无不凝聚着导师的心血和汗水,在此本人深表感谢! 感谢我的同学和朋友,在我的论文撰写期间给予我工作和生活上的大力支持和帮助。
28
附录
#include #include
#defineLCM_RSP1_0 //定义引脚 #defineLCM_RWP1_1 #defineLCM_EP1_2 #defineLCM_DataP2
#defineBusy0x80 //用于检测LCM状态字中的Busy标识 #defineucharunsignedchar ucharid,timecount,dipsmodid;
bitlmcinit_or_not; //是否需要清屏标志位“1”为需要“0”为不需要 bitflag,sflag; //flag是时钟冒号闪烁标志,sflag是温度负号显示标志 voidDisp_line1(void); //显示屏幕第一行 voidDisp_line2(void); //显示屏幕第二行 voidid_case1_key();
voidDisp_mod0(void);//显示模式0 voidDisp_mod1(void);//显示模式
voidDisp_mod2(void);
//*********** DS1302时间显示定义部分 sbitT_CLK=P3^4; sbitT_IO =P3^5; sbitT_RST=P3^6; sbitACC0=ACC^0; sbitACC7=ACC^7;
voidSet(uchar,uchar); //根据选择调整相应项目 voidRTInputByte(uchar); /* 输入1Byte */
ucharRTOutputByte(void); /* 输出1Byte */ ucharclock_h,clock_m;
voidW1302(uchar, uchar); // 向DS1302写入一个字节 ucharR1302(uchar); // 从DS1302读出一个字节 voidSet1302(unsignedchar * ); // 设置时间
bitsec,min,hour,year,mon,day,weekk; //闪烁标志位
//初始化后设置为:04年12月2日星期40点0分0秒
unsignedcharinittime[7]={0x00,0x00,0x00,0x10,0x05,0x04,0x12};
29
// 秒分钟小时日月年星期
//***** 18B20温度显示定义部 sbitDQ=P3^7; //18B20接P07口 typedefunsignedcharbyte; typedefunsignedintword;
Read_Temperature(char,char); voidmychar(void); byteow_reset(void); byteread_byte(void); voidwrite_byte(charval);
voidadjust_res(charres); //res分别等于0x1f, 0x3f, 0x5f温度读数分辨率分别对应 // 0.5, 0.25, 0.125 //*******温度控制部分*********
bittl_flash_flag; //下限闪烁标志 bitth_flash_flag; //上限闪烁标志 bittl_flag; //下限越限标志 bitth_flag; //上限越限标志 bittl_sign,th_sign; //温度零下标志0:零上,1:零下 chartempid;
voidDisp_Temp(void); //显示上下限温度 voidSet_TH_Temp(void); //设置温度上限 voidSet_TL_Temp(void); //设置温度下限 signedchartl=20,th=30;
voidCompare_Temp(signedcharl,signedcharh); //比较温度 voidTl_Al(void); //下限越限报警 voidTh_Al(void); //上限越限报警 //*******1602LCD驱动程序
********************************************************** voidWriteDataLCM(unsignedcharWDLCM);
voidWriteCommandLCM(unsignedcharWCLCM,BuysC); unsignedcharReadStatusLCM(void); voidLCMInit(void);
voidDisplayOneChar(unsignedcharX, unsignedcharY, unsignedcharDData);
voidDisplayListChar(unsignedcharX, unsignedcharY, unsignedcharcode *DData); voidDelay5Ms(void); voidDelay400Ms(void);
unsignedcharcodeweek[]={\
30
voidmain(void)
{
Delay400Ms(); //启动等待,等LCM讲入工作状态 LCMInit(); //LCM初始化
Delay5Ms(); //延时片刻(可不要) mychar(); TMOD=0x01;
TH0=(65535-50000)/256; TL0=(65535-50000)%6; EA=1; TR0=1;
ET0=1;
W1302(0x90,0xa5);//打开充电二级管一个二级管串联一个2K电阻 W1302(0x8e,0x80);//写保护,禁止写操作
adjust_res(0x1f); //调整18B20的分辨率0x1f:0.5; 0x3f:0.25; 0x5f:0.125 while(1)
{ if (P3_3==0)
{dipsmodid++; lmcinit_or_not=1;
if(dipsmodid>3) dipsmodid=0; while(P3_3==0); }
switch(dipsmodid) { case0:
Disp_mod0();
if( ((R1302(0x83)/16)==clock_m/10) &&
(R1302(0x83))==clock_m&&((R1302(0x85)/16)==clock_h/10&& (R1302(0x85))==clock_h) ) { P1_3=0; while(P3_2==0); } break; case1:
Disp_mod1();
31