




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#基于驱动电路板的设计基于中文摘要ABSTRACT目录%#«刖言第一章概述 □□□□□□ □□□□□□□□□□□□□□□□□□□□□□□开关电源的研究现状………………开关电源的组成……………………开关电源的特点……………………□□□□□□ □□□□□□□□□□□□□□□□□□□□□□□□□根据开关口在电路中的连接方式分类 …………根据开关口的激励方式不同分类…………………根据使用的器件种类不同分类……………………根据稳压的控制方式不同分类…………………其他开关稳压电源…………………□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□理想的开关电路…………………整流及LC滤波器…………………输入电压U………………………i反馈控制电路……………………基本工作过程……………………第二章 电路的工作原理 LM2576□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□第三章基于的 测试板的焊接与调试□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□第四章开关电源设计 protel99se□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□PCB□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□制作PCB□□□□□□□□□□□□□□□□□□□□□□□□□□□□结论参考文献致谢附录外文资料翻译一、正文国内研究现状□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□,□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□; □□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□,□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□; □□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□,□□□□,□□□□□□□□□□□□□□□,□□□□,□□□□□□□□□□,□□□□□□□,□□□□□□□□,□□□□□□,□□□□□□,□□□□□□□,□□□□□□□□□□□□,□□□□□,□□□,□□□□□□□□□□□,□□□,□□□□□□□□□,□□□□□□□□□□□, □□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□:□□□□□□□□, 其输□□□□□□□□□,□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□?□□□□□□□□□□□□□□□□□□□,□□□□□□□□□,□□□□□□□□□□□□□□□,□□□□□□;□□□□□□□□□,□□□□□□□□□□□□□□□,□□□□□□□选题意义、目的□□□□□□□□□□□□□□□□□□□□□, □□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□, □□□□□□□□, □□□□□□□□□□□,□□□□□□□□□□□□□□□□□,□□□□□□□□,□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□,□□□□□□□□□□□□□□:.□□□□□□□□□□□, 体积更小, □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□;.□□□□□□□□□□□□□□□□□□□□□□ PCB电路;.□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□;.□□□□□□□□□□□□□□□□□□□□□□□致谢参考文献(至少篇)样式:[1]龚尚福,[1]龚尚福,朱宇等 .微机原理及应用[M].西安:西安电子科技大学出版社,2003.[2]龚尚福.网络管理新技术探讨 [J].西安:西安科技大学学报, 2004.[1]康华光□□□□□□□□□□□□□□□ [M]□□□□□□□[2]谢运祥等译□□□□□□ [M]□□□□□□□[3]□□□□□protel2004□□□□□□ [M]□□□□□□□[4]李祥臣□□□□□□□□□□ □□□□□□□ [M]□□□□□□□□社[5][Z]头文件及宏定义区#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint*头文件及宏定义区数据及变量定义区,每年三字节codeucharyear_code[597]={ ,每年三字节0x04,0xAe,0x53, //190100x0A,0x57,0x48, //190230x55,0x26,0xBd, //190360x0d,0x26,0x50, //190490x0d,0x95,0x44, //190512TOC\o"1-5"\h\z0x46,0xAA,0xB9, //1906 150x05,0x6A,0x4d, //1907 180x09,0xAd,0x42, //1908 210x24,0xAe,0xB6, //19090x04,0xAe,0x4A, //19100x6A,0x4d,0xBe, //19110x0A,0x4d,0x52, //19120x0d,0x25,0x46, //19130x5d,0x52,0xBA, //19140x0B,0x54,0x4e, //19150x0d,0x6A,0x43, //19160x29,0x6d,0x37, //19170x09,0x5B,0x4B, //19180x74,0x9B,0xC1, //19190x04,0x97,0x54, //19200x0A,0x4B,0x48, //19210x5B,0x25,0xBC, //19220x06,0xA5,0x50, //19230x06,0xd4,0x45, //19240x4A,0xdA,0xB8, //19250x02,0xB6,0x4d, //19260x09,0x57,0x42, //19270x24,0x97,0xB7, //19280x04,0x97,0x4A, //19290x66,0x4B,0x3e, //19300x0d,0x4A,0x51, //19310x0e,0xA5,0x46, //19320x56,0xd4,0xBA, //19330x05,0xAd,0x4e, //19340x02,0xB6,0x44, //19350x39,0x37,0x38, //19360x09,0x2e,0x4B, //19370x7C,0x96,0xBf, //19380x0C,0x95,0x53, //19390x0d,0x4A,0x48, //19400x6d,0xA5,0x3B, //1941
0x0B,0x55,0x4f,〃19420x05,0x6A,0x45,〃19430x4A,0xAd,0xB9,//19440x02,0x5d,0x4d,〃19450x09,0x2d,0x42,//19460x2C,0x95,0xB6,//19470x0A,0x95,0x4A,//19480x7B,0x4A,0xBd,//19490x06,0xCA,0x51,//19500x0B,0x55,0x46,//19510x55,0x5A,0xBB,//19520x04,0xdA,0x4e,//19530x0A,0x5B,0x43,//19540x35,0x2B,0xB8,//19550x05,0x2B,0x4C,//19560x8A,0x95,0x3f,//19570x0e,0x95,0x52,//19580x06,0xAA,0x48,//19590x7A,0xd5,0x3C,//19600x0A,0xB5,0x4f,//19610x04,0xB6,0x45,//19620x4A,0x57,0x39,//19630x0A,0x57,0x4d,//19640x05,0x26,0x42,//19650x3e,0x93,0x35,//19660x0d,0x95,0x49,//19670x75,0xAA,0xBe,//19680x05,0x6A,0x51,//19690x09,0x6d,0x46,//19700x54,0xAe,0xBB,//19710x04,0xAd,0x4f,//19720x0A,0x4d,0x43,//19730x4d,0x26,0xB7,//19740x0d,0x25,0x4B,//19750x8d,0x52,0xBf,//19760x0B,0x54,0x52,//19770x0B,0x6A,0x47,//19780x69,0x6d,0x3C,//19790x09,0x5B,0x50,//19800x04,0x9B,0x45,//19810x4A,0x4B,0xB9,//19820x0A,0x4B,0x4d,//19830xAB,0x25,0xC2,//19840x06,0xA5,0x54,//19850x06,0xd4,0x49,〃19860x6A,0xdA,0x3d,//19870x0A,0xB6,0x51,//19880x09,0x37,0x46,//19890x54,0x97,0xBB,//19900x04,0x97,0x4f,//19910x06,0x4B,0x44,//19920x36,0xA5,0x37,//19930x0e,0xA5,0x4A,//19940x86,0xB2,0xBf,//19950x05,0xAC,0x53,//19960x0A,0xB6,0x47,//19970x59,0x36,0xBC,//19980x09,0x2e,0x50,//19992940x0C,0x96,0x45,//20002970x4d,0x4A,0xB8,//20010x0d,0x4A,0x4C,//20020x0d,0xA5,0x41,//20030x25,0xAA,0xB6,//20040x05,0x6A,0x49,//20050x7A,0xAd,0xBd,//20060x02,0x5d,0x52,//20070x09,0x2d,0x47,//20080x5C,0x95,0xBA,//20090x0A,0x95,0x4e,//20100x0B,0x4A,0x43,//20110x4B,0x55,0x37,//20120x0A,0xd5,0x4A,//20130x95,0x5A,0xBf,//20140x04,0xBA,0x53,//20150x0A,0x5B,0x48,//20160x65,0x2B,0xBC,//20170x05,0x2B,0x50,//20180x0A,0x93,0x45,//20190x47,0x4A,0xB9,//20200x06,0xAA,0x4C,//20210x0A,0xd5,0x41,//20220x24,0xdA,0xB6,//20230x04,0xB6,0x4A,//20240x69,0x57,0x3d,//20250x0A,0x4e,0x51,//20260x0d,0x26,0x46,//20270x5e,0x93,0x3A,//20280x0d,0x53,0x4d,//2029
0x05,0xAA,0x43,//20300x36,0xB5,0x37,//20310x09,0x6d,0x4B,//20320xB4,0xAe,0xBf,//20330x04,0xAd,0x53,//20340x0A,0x4d,0x48,//20350x6d,0x25,0xBC,//20360x0d,0x25,0x4f,//20370x0d,0x52,0x44,//20380x5d,0xAA,0x38,//20390x0B,0x5A,0x4C,//20400x05,0x6d,0x41,//20410x24,0xAd,0xB6,//20420x04,0x9B,0x4A,//20430x7A,0x4B,0xBe,//20440x0A,0x4B,0x51,//20450x0A,0xA5,0x46,//20460x5B,0x52,0xBA,//20470x06,0xd2,0x4e,//20480x0A,0xdA,0x42,//20490x35,0x5B,0x37,//20500x09,0x37,0x4B,//20510x84,0x97,0xC1,//20520x04,0x97,0x53,//20530x06,0x4B,0x48,//20540x66,0xA5,0x3C,//20550x0e,0xA5,0x4f,//20560x06,0xB2,0x44,//20570x4A,0xB6,0x38,//20580x0A,0xAe,0x4C,//20590x09,0x2e,0x42,//20600x3C,0x97,0x35,//20610x0C,0x96,0x49,//20620x7d,0x4A,0xBd,//20630x0d,0x4A,0x51,//20640x0d,0xA5,0x45,//20650x55,0xAA,0xBA,//20660x05,0x6A,0x4e,//20670x0A,0x6d,0x43,//20680x45,0x2e,0xB7,//20690x05,0x2d,0x4B,//20700x8A,0x95,0xBf,//20710x0A,0x95,0x53,//20720x0B,0x4A,0x47,//20730x6B,0x55,0x3B,//20740x0A,0xd5,0x4f,//20750x05,0x5A,0x45,//20760x4A,0x5d,0x38,//20770x0A,0x5B,0x4C,//20780x05,0x2B,0x42,//20790x3A,0x93,0xB6,//20800x06,0x93,0x49,//20810x77,0x29,0xBd,//20820x06,0xAA,0x51,//20830x0A,0xd5,0x46,//20840x54,0xdA,0xBA,//20850x04,0xB6,0x4e,//20860x0A,0x57,0x43,//20870x45,0x27,0x38,//20880x0d,0x26,0x4A,//20890x8e,0x93,0x3e,//20900x0d,0x52,0x52,//20910x0d,0xAA,0x47,//20920x66,0xB5,0x3B,//20930x05,0x6d,0x4f,//20940x04,0xAe,0x45,//20950x4A,0x4e,0xB9,//20960x0A,0x4d,0x4C,//20970x0d,0x15,0x41,//20980x2d,0x92,0xB5,//2099};codeucharday_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};codeuintday_code2[3]={0x111,0x130,0x14e};//月份数据表dataucharyear_moon,month_moon,day_moon,week;unsignedchardatadisdata[5];unsignedinttvalue;//温度值unsignedchartflag;//温度正负标志unsignedcharcodedis_week口={"SUN,MON,TUE,WED,THU,FRI,SAT"};unsignedcharcodepara_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};//星期月参变数unsignedchardatadis_buf1[16]; //lcd上排显示缓冲区unsignedchardatadis_buf2[16]; //lcd下排显示缓冲区unsignedchardatayear,month,date,week;//年、月、日、星期unsignedchardataarmhour,armmin,armsec;//闹钟时、分、秒unsignedchardatahour,min,sec,sec100; 〃时、分、秒、百分之一秒unsignedchardataflag,vkey,skey;//设置状态计数标志、按键先前值、按键当前值据及变量定
1--启用,0—关闭bitalarm;〃标识是否启用闹钟,1--启用,0—关闭bitc_moon;sbitrs=P2A7;//LCDOO川口选择端 (H/L)sbitrw=P2A6;//LCDD/ODDO (H/L)sbitep=P2A5;//LCD使能控制sbitPRE=P2A4;//DOD (k3)sbitSET=P2A3;//DOD (k4)sbitSPK=P2A2;sbitDQ=P2A1;//DS18B20与单片机连接口/**************************子函数定义区/**************************子函数定义区voiddelay(unsignedcharms);intlcd_busy();voidlcd_wcmd(charcmd);voidlcd_wdat(chardat);voidlcd_pos(charpos);voidlcd_init();voidpro_timedate();voidpro_display();voiddelay(unsignedcharms);intlcd_busy();voidlcd_wcmd(charcmd);voidlcd_wdat(chardat);voidlcd_pos(charpos);voidlcd_init();voidpro_timedate();voidpro_display();voidpro_key();voidtime_alarm();unsignedcharscan_key();unsignedcharweek_proc();intleap_year();voidlcd_sef_chr();〃延时程序〃测试 LCD忙碌状态程序〃写入指令到 LCD程序〃写入数据到 LCD程序//LCD数据指针位置程序//LCD初始化设定程序〃时间日期处理程序〃显示处理程序〃按键处理程序〃定时报警功能 (闹钟)〃按键扫描程序〃星期自动计算与显示函数〃判断是否为闰年//LCD自定义字符程序voidupdate_disbuf(unsignedchart1,unsignedchardisdata口,unsignedchardis_h,unsignedchardis_m,unsignedchardis_s);〃更新显示缓冲区函数voiddelay_18B20(unsignedinti);voidds1820rst();〃延时 1微秒unsignedchards1820rd();//ds1820复位//DOOvoidds1820wr(unsignedcharwdata);intread_temp();voidds18b20disp();//〃口数据〃读取温度值并转换〃温度值显示子 函 数 定 义区{uchartemp;switch(month_p){case1:{temp=year_code[table_addr]&0x08;if(temp==0)return(0);elsereturn(1);}case2:{temp=year_code[table_addr]&0x04;if(temp==0)return(0);elsereturn(1);}case3:{temp=year_code[table_addr]&0x02;if(temp==0)return(0);elsereturn(1);}case4:{temp=year_code[table_addr]&0x01;if(temp==0)return(0);elsereturn(1);}case5:{temp=year_code[table_addr+1]&0x80;if(temp==0)return(0);elsereturn(1);}case6:{temp=year_code[table_addr+1]&0x40;if(temp==0)return(0);elsereturn(1);}case7:{temp=year_code[table_addr+1]&0x20;if(temp==0)return(0);elsereturn(1);}case8:{temp=year_code[table_addr+1]&0x10;if(temp==0)return(0);elsereturn(1);}case9:{temp=year_code[table_addr+1]&0x08;if(temp==0)return(0);elsereturn(1);}case10:{temp=year_code[table_addr+1]&0x04;if(temp==0)return(0);elsereturn(1);}case11:{temp=year_code[table_addr+1]&0x02;if(temp==0)return(0);elsereturn(1);}case12:{temp=year_code[table_addr+1]&0x01;if(temp==0)return(0);elsereturn(1);}case13:{temp=year_code[table_addr+2]&0x80;if(temp==0)return(0);elsereturn(1);}}////bitget_moon_day(ucharmonth_p,uinttable_addr)/*子函数 ,////bitget_moon_day(ucharmonth_p,uinttable_addr)/*子函数 ,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回产 生0*//*函数功能{据:输入 BCD阳历数据 ,输出 BCD阴历数据//c=0为21世纪,c=1(只允许1901-2099年)*/为19世纪输入输出数据均为BCD数uchartemP0,temp2,temp3,month_p;uinttemp4,table_addr;bitflag2,flag_y;temP0=year/16;//BCD->hex先把数据转换为十六进制temp2=year%16;year=temP0*10+temp2;temP0=month/16;temp2=month%16;month=temP0*10+temp2;temP0=day/16;temp2=day%16;day=temP0*10+temp2;〃定位数据表地址if(c==0){table_addr=(year+0x64-1)*0x3;}else{table_addr=(year-1)*0x3;}〃定位数据表地址完成〃取当年春节所在的公历月份temP0=year_code[table_addr+2]&0x60;temP0=_cror_(temP0,5);〃取当年春节所在的公历月份完成〃取当年春节所在的公历日temp2=year_code[table_addr+2]&0x1f;〃取当年春节所在的公历日完成//计算当年春年离当年元旦的天数 ,春节只会在公历 1月或2月if(temP0==0x1){temp3=temp2-1;}else{temp3=temp2+0x1f-1;}//计算当年春年离当年元旦的天数完成〃计算公历日离当年元旦的天数 ,为了减少运算 ,用了两个表//day_code1[9],day_code2[3]〃如果公历月在九月或前〃在九月后 ,0000〃如输入公历日为〃如输入公历日为if(month<10){,天数会少于0xff,OO0xff,用表 day_code2[3]8月10日,则公历日离元旦天数为11月10日,则公历日离元旦天数为temp4=day_code1[month-1]+day-1;}else{temp4=day_code2[month-10]+day-1;}if((month>0x2)&&(year%0x4==0)){〃公历0001day_code1[9],day_code1[8-1]+10-1day_code2[11-10]+10-12月并且该年的20为闰月 ,00加temp4+=1;}〃计算公历日离当年元旦的00完成〃判断公历日在春节前还是春节后if(temp4>=temp3){〃公历日在春节后或就是春节当日使用下面代码进行运算temp4-=temp3;month=0x1;month_p=0x1;//公历日在春节前或就是春节当日flag2=get_moon_day(month_p,table_addr);//0000flag_y=0;if(flag2==0)temP0=0x1d;//小月 290elsetemP0=0x1e;//大小 300temp2=year_code[table_addr]&0xf0;temp2=_cror_(temp2,4);〃从数据表中取该年的闰00份while(temp4>=temP0){temp4-=temP0;month_p+=1;if(month==temp2){flag_y=~flag_y;if(flag_y==0)month+=1;}elsemonth+=1;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temP0=0x1d;elsetemP0=0x1e;month_p指向首月1,0000 0,如为 0则该年无闰月}day=temp4+1;}else{〃公历日在春节前使用下面代码进行运算temp3-=temp4;if(year==0x0){year=0x63;c=1;}elseyear-=1;table_addr-=0x3;month=0xc;temp2=year_code[table_addr]&0xf0;temp2=_cror_(temp2,4);if(temp2==0)month_p=0xc;elsemonth_p=0xd;〃如果当年有闰月 ,一年有十三个月 ,月指向 13,无闰口指向 12flag_y=0;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temP0=0x1d;elsetemP0=0x1e;while(temp3>temP0){temp3-=temP0;month_p-=1;if(flag_y==0)month-=1;if(month==temp2)flag_y=~flag_y;flag2=get_moon_day(month_p,table_addr);if(flag2==0)temP0=0x1d;elsetemP0=0x1e;}day=temP0-temp3+1;}c_moon=c; 〃HEX->BCD,运算结束后 ,把数据转换为 BCD数据temP0=year/10;temP0=_crol_(temP0,4);temp2=year%10;year_moon=temP0|temp2;temP0=month/10;temP0=_crol_(temP0,4);temp2=month%10;month_moon=temP0|temp2;temP0=day/10;temP0=_crol_(temP0,4);temp2=day%10;day_moon=temP0|temp2;}/********************************农历的产生/******************************液晶驱动程序voiddelay(unsignedcharms)//延时程序{while(ms--){unsignedchari;for(i=0;i<250;i++){_nop_(); 〃执行一条 _nop_()指令为一个机器周期_nop_();_nop_();_nop_();}}}intlcd_busy()〃测试LCD忙碌状态{intresult;rs=0;rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P0&0x80);//LCD的D0--D7中,D7=1为忙碌,D7=0为空闲ep=0;returnresult;}voidlcd_wcmd(charcmd)〃写入指令到LCD{while(lcd_busy());//当lcd_busy为1时,检测LCD忙碌状态,lcd-busy为0时,开始口指令rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_wdat(chardat)〃写入数据到 LCD{while(lcd_busy());//当lcd_busy为1时,检测 LCD忙碌状态,lcd-busy为0时,开始写数据rs=1;rw=0;ep=0;P0=dat;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}voidlcd_pos(charpos)//LCD数据指针位置程序{lcd_wcmd(pos|0x80);〃数据指针 =80+地址码(00H~27H,40H~67H)}voidlcd_sef_chr()〃设定二个自定义字符 ,(注意:LCD1602中自定义字符的地址为 0x00—0x07』可定义 8个字符)〃这里我们设定把一个自定义字符放在 0x00位置(000),另一个放在0x01位子(001){ 〃第一个自定义字符lcd_wcmd(0x40);//"01000000"第1行地址//(D7D6为地址设定命令形式 D5D4D3为字符存放位置 (0--7),D2D1D0为字符行地口(0--7))lcd_wdat(0x1f); //"XXX11111" 第1行数据//D7D6D5为XXX,表示为任意数(一般用 000),D4D3D2D1D0为字符行数据lcd_wcmd(0x41);//"01000001" 第2行地址lcd_wdat(0x11); //"XXX10001" 第 2 行数据lcd_wcmd(0x42); //"01000010" 第 3 行地址lcd_wdat(0x15); //"XXX10101" 第 3 行数据lcd_wcmd(0x43); //"01000011" 第 4 行地址lcd_wdat(0x11); //"XXX10001" 第 4 行数据lcd_wcmd(0x44); //"01000100" 第 5 行地址lcd_wdat(0x1f); //"XXX11111" 第 5 行数据lcd_wcmd(0x45); //"01000101" 第 6 行地址lcd_wdat(0x0a); //"XXX01010" 第 6 行数据lcd_wcmd(0x46); //"01000110" 第 7 行地址lcd_wdat(0x1f); //"XXX11111" 第 7 行数据lcd_wcmd(0x47); //"01000111" 第 8 行地址lcd_wdat(0x00); //"XXX00000" 第 8 行数据〃第二个自定义字符lcd_wcmd(0x48);//"01001000"第1行地址lcd_wdat(0x01); //"XXX00001" 第 1 行数据lcd_wcmd(0x49); //"01001001" 第 2 行地址lcd_wdat(0x1b); //"XXX11011" 第 2 行数据lcd_wcmd(0x4a); //"01001010" 第 3 行地址lcd_wdat(0x1d); //"XXX11101" 第 3 行数据lcd_wcmd(0x4b); //"01001011" 第 4 行地址lcd_wdat(0x19); //"XXX11001" 第 4 行数据lcd_wcmd(0x4c); //"01001100" 第 5 行地址lcd_wdat(0x1d); //"XXX11101" 第 5 行数据lcd_wcmd(0x4d); //"01001101" 第 6 行地址lcd_wdat(0x1b); //"XXX11011" 第 6 行数据lcd_wcmd(0x4e); //"01001110" 第 7 行地址lcd_wdat(0x01); //"XXX00001" 第 7 行数据lcd_wcmd(0x4f); //"01001111" 第 8 行地址lcd_wdat(0x00); //"XXX00000" 第 8 行数据}voidlcd_init()//LCD初始化设定lcd_wcmd(0x38);〃设置LCD为16X2显示,5X7点阵,八位数据借口delay(1);lcd_wcmd(0x0c);//LCD开显示及光标设置(光标不闪烁,不显示 "-")delay(1);lcd_wcmd(0x06);//LCD显示光标移动设置(光标地址指针加1,整屏显示不移动 )delay(1);lcd_wcmd(0x01);〃清除 LCD的显示内容delay(1);intleap_year()〃闰年的计算{intleap;if((year%4==0&&year%100!=0)llyear%400==0)〃闰年的条件leap=1;elseleap=0;returnleap;}unsignedcharweek_proc()〃星期的自动运算和处理{unsignedcharnum_leap;unsignedcharc;num_leap=year/4-year/100+year/400;//自00年起到year所经历的闰年数if(leap_year()&&month<=2) 〃既是闰年且是 1月和2月c=5;elsec=6;week=(year+para_month[month]+date+num_leap+c)%7;//计算对应的星期returnweek;}voidpro_timedate()〃时间和日期处理程序{sec++;if(sec>59){sec=0;min++;if(min>59){min=0;hour++;if(hour>23){hour=0;date++;if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)if(date>31){date=1;month++;}if(month==4llmonth==6llmonth==9llmonth==11)if(date>30){date=1;month++;}if(month==2){if(leap_year()){if(date>29){date=1;month++;}}else{if(date>28){date=1;month++;}}}if(month>12){month=1;year++;}if(year>99)year=0;}}}week_proc();if(sec==armsec&&min==armmin&&hour==armhour){if(alarm)SPK=0;〃闹钟启用时,报警时间到,启动 Timer1}if(sec==(armsec+15)&&min==armmin&&hour==armhour){if(alarm)SPK=1;〃闹钟启用时,报警时间到 ,启动Timer1voidtimer0()interrupt1//Timer。中断处理程序 ,秒的产生{TH0=0xdc;TL0=0x06;sec100++;〃大月 31天〃小月 30天〃闰年的条件〃闰年 2月为 29天〃平年 2月为 28天//Timer。置10ms定时初值 dc00H(2A16=65536D,dc06H=56326D)〃定时时间 =(65536-56326)*(1/12.0)*12=10ms(f0=12.0Mhz)if(sec100>=100)//1秒时间 (100*10ms=1000ms=1s){sec100=0;pro_timedate();〃调用时间和日期处理程序}update_disbuf(0x00,disdata,hour,min,sec);//0x00表示显示00位置的自定义字符pro_display(); 〃调用显示处理函数unsignedcharscan_key()〃给变量 vkey置初值〃给变量 vkey置初值〃读取PRE键的状态〃将PREDOODOOskey的B1〃读取SET键的状态 ,并存于 skey的〃返回 skey的键值 (即PRE,SETOOD)voidint0()interrupt0〃外部中断 INT0中断处理程序{TR0=0;IE=0;lcd_wcmd(0x0e);alarm=1;〃禁止 Timer。〃禁止中断〃显示光标 ”,整个光标不闪烁〃按键扫描程序{skey=0x00;skeyl=PRE;skey=skey<<1;位skeyl=SET;B0位returnskey;}flag=0;vkey=0x03;while(flagA0x0a){skey=scan_key();if(skeyAvkey){delay(10);skey=scan_key();flag=0;vkey=0x03;while(flagA0x0a){skey=scan_key();if(skeyAvkey){delay(10);skey=scan_key();if(skeyAvkey)〃扫描按键状态〃若skey与vkey相同跳出 ,相异执行〃去按键抖动〃转回扫描按键状态〃若skey与vkey相同跳出 ,相异执行vkey=skey;if(skey==0x01)〃将skey的值付给vkey//PRE键按下pro_display();lcd_pos(0x47);〃调用显示处理程序〃使光标位于第一个调整项下{flag++;//调整标志位加 1switch(flag)〃将光标置于相应调整位置{lcd_pos(0x49);break;〃光标置小时报警设置位置lcd_pos(0x4c);break;〃光标置分钟报警设置位置lcd_pos(0x4f);break;
〃光标置秒时报警设置位置update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x05);break;〃光标置年调整位置lcd_pos(0x08);break;〃光标置月调整位置lcd_pos(0x0b);break;〃光标置日调整位置lcd_pos(0x49);break;〃光标置时调整位置lcd_pos(0x4c);break;〃光标置分调整位置lcd_pos(0x4f);break;〃光标置秒调整位置default:break;}}//SET键按下〃转设置按键处理程序//SET键按下〃转设置按键处理程序〃设置 LCD开显示及光标不闪烁〃清除 LCD的显示内容//CPU开中断,INT0,INT1』中断//Timer。启动{pro_key();}}}}lcd_wcmd(0x0c);不显示"-"lcd_wcmd(0x01);IE=0x8f;TR0=1;}voidpro_key()〃设置按键处理程序{switch(flag){case0:alarm=!alarm;〃启用或关闭闹钟( alarm=1:启用,alarm=0:关闭)update_disbuf(0x50,"alar:",armhour,armmin,armsec);〃更新显示数据pro_display();〃调用显示处理lcd_pos(0x47);break;〃光标回到原调整位置case1:armhour++;if(armhour>23)armhour=0;update_disbuf(0x50,"alar:",armhour,armmin,armsec);〃更新显示数据pro_display();〃调用显示处理lcd_pos(0x49);break;〃光标回到原调整位置case2:armmin++;if(armmin>59)armmin=0;update_disbuf(0x50,"alar:",armhour,armmin,armsec);pro_display();lcd_pos(0x4c);break;case3:armsec++;if(armsec>59)armsec=0;update_disbuf(0x50,"alar:",armhour,armmin,armsec);pro_display();lcd_pos(0x4f);break;case4:year++;if(year>99)year=0;week_proc(); 〃星期自动运算update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x05);break;case5:month++;if(month>12)month=1;week_proc(); 〃星期自动运算update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x08);break;case6:date++;if(month==1||month==3||month==5||month==7
||month==8||month==10||month==12)if(date>31)date=1; 〃大月 31天if(month==4||month==6||month==9||month==11)if(date>30)date=1; 〃小月30天if(month==2){if(leap_year()) 〃闰年的条件29天{if(date>29)date=1;} 〃闰年2月为29天else{if(date>28)date=1;}} 〃平年 2月为28天week_proc(); 〃星期自动运算update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x0b);break;case7:hour++;if(hour>23)hour=0;update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x49);break;case8:min++;if(min>59)min=0;update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x4c);break;case9:sec++;if(sec>59)sec=0;update_disbuf(0x50,"time:",hour,min,sec);pro_display();lcd_pos(0x4f);break;default:break;}}/********************万年口及/********************万年口及温度温馨提示的显示等voidupdate_disbuf(unsignedchart1,unsignedchardisdata口,unsignedchardis_h,unsignedchardis_m,unsignedchardis_s)〃更新显示缓冲区{inti=0;unsignedcharcodedis1[16]={"Cold!Wearmore!"};〃原来空格也算进去了,如此unsignedcharcodedis2[16]={"Agoogweather!!"};unsignedcharcodedis3[16]={"Hot!Iwantice!"};ds18b20disp();dis_buf2[0]=disdata[0];dis_buf2[1]=disdata[1];dis_buf2[2]=disdata[2];dis_buf2[3]=disdata[3];dis_buf2[4]=disdata[4];if(dis_buf2[3]==0x2e){dis_buf2[5]=0xdf;dis_buf2[6]='C';}else{dis_buf2[5]=0x20;dis_buf2[6]=0x20;}if(alarm)dis_buf2[7]=0x01; //alarm=1,显示闹钟启用标致(第二个自定义字符)elsedis_buf2[7]=0x20; //alarm=0,不显示闹钟启用标致dis_buf2[8]=dis_h/10+48;dis_buf2[9]=dis_h%10+48;dis_buf2[10]=0x3a; //':'dis_buf2[11]=dis_m/10+48;dis_buf2[12]=dis_m%10+48;dis_buf2[13]=0x3a; //':'dis_buf2[14]=dis_s/10+48;dis_buf2[15]=dis_s%10+48;if(dis_buf2[15]-48==7|dis_buf2[15]-48==8){if(dis_buf2[1]-48==0|dis_buf2[1]-48==1){for(i=0;i<16;i++)dis_buf1[i]=dis1[i];}elseif(dis_buf2[1]-48==2){for(i=0;i<16;i++)dis_buf1[i]=dis2[i];}
else{for(i=0;i<16;i++)dis_buf1[i]=dis3[i];}}elseif(dis_buf2[15]-48==3|dis_buf2[15]-48==4){Conversion(0,year,month,date);dis_buf1[0]='L';dis_buf1[1]='u';dis_buf1[2]='n';dis_buf1[3]='n';dis_buf1[4]='a';dis_buf1[5]='r';dis_buf1[6]=50;dis_buf1[7]=48;dis_buf1[8]=year_moon/16+48;dis_buf1[9]=year_moon%16+48;dis_buf1[10]=0x2d;dis_buf1[11]=month_moon/16+48;dis_buf1[12]=month_moon%16+48;dis_buf1[13]=0x2d;dis_buf1[14]=day_moon/16+48;dis_buf1[15]=day_moon%16+48;}else{TOC\o"1-5"\h\zdis_buf1[0]=t1; //dis_buf1[1]=0x20; 〃空格dis_buf1[2]=50; //'2'dis_buf1[3]=48; //'0'dis_buf1[4]=year/10+48;dis_buf1[5]=year%10+48;dis_buf1[6]=0x2d;dis_buf1[7]=month/10+48;dis_buf1[8]=month%10+48;dis_buf1[9]=0x2d; //'-'dis_buf1[10]=date/10+48;dis_buf1[11]=date%10+48;dis_buf1[12]=0x20;dis_buf1[13]=dis_week[4*week];dis_buf1[14]=dis_week[4*week+1];dis_buf1[15]=dis_week[4*week+2];}}voidpro_display()〃显示处理程序{unsignedchari;lcd_pos(0x00);for(i=0;i<=15;i++){lcd_wdat(dis_buf1[i]);}lcd_pos(0x40);for(i=0;i<=15;i++)
{l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 4 Lesson 21教学设计- 2024-2025学年冀教版八年级英语下册
- 22 文言文二则《书戴嵩画牛》(教学设计)2024-2025学年部编版语文六年级上册
- 2025年纤维增强项目合作计划书
- 新型储能产业化与规模化发展路径
- 2025年度城市广场绿化养护服务合同
- 2025年度测绘数据跨境传输保密协议
- 城市休闲公园项目建设内容与规划方案
- 二零二五年度北京生态环保拆迁补偿与生态补偿协议
- 2025年度物流仓储车库租赁合同
- 排球正面传球技术 教学设计-2023-2024学年高二下学期体育与健康人教版必修第一册
- 《金融工程》课程教案
- 信贷管理系统需求说明书
- 蒙台梭利教育理论
- 水轮机结构总体介绍
- “求是鹰眼”反无人机系统
- 《X公司应收账款管理研究14000字(论文)》
- YS/T 441.1-2014有色金属平衡管理规范第1部分:铜选矿冶炼
- GB/T 23791-2009企业质量信用等级划分通则
- GB/T 19470-2004土工合成材料塑料土工网
- GB/T 18913-2002船舶和航海技术航海气象图传真接收机
- 高中教师先进事迹材料范文六篇
评论
0/150
提交评论