单片机课程设计报告目录摘要第一部分:题目要求………………………………………(01)第二部分:方案论证与选择………………………………(02)第三部分:电路设计与参数选择…………………………(03)第四部分:系统软件设计…………………………………(04)第五部分:系统调试与仪器使用…………………………(15)第六部分:使用说明书……………………………………(16)总结……………………………………………………(16)摘要本作品是以AT89C51芯片为核心,DS18B20温度传感器、数码管显示、以及信号处理电路构成的多功能计数器。这种多功能计数器不仅具有了一般计数器的基本功能,并且具有温度测量、温度报警、电子琴和歌曲选择等一系列功能。第一部分题目要求一、基本要求我们要设计一种计数器,让他不仅有普通计数器的基本功能,并且通过创新,使其功能更加多样化,简单而实用。如时时温度测量、温度报警、音乐播放等功能。二、发挥与创新部分我们设计的计数器,摒弃了只有简单的计数功能,通过对AT89C51芯片的充分利用,给其增加了音乐播放和温度测量的功能,并且使其能在温度到达一定临界点的时候发出警报。而且能自由选择播放哪首音乐。第二部分方案论证与选择一、系统主要部分有:1:中央处理器电路:采用单片机芯片机外围电路构成最小系统。2:温度探测电路:DS18B20温度传感器3:人机接口电路:包括按键电路、数码管显示电路。4:信号处理电路:包括传感器、信号处理、等电路。5:执行部件电路:包括喇叭、状态指示灯。二、方案论证及选择1、电子琴部分由于市场上有许多的电子琴,从而想用单片机来实现电子琴的功能和音乐盒,通过7个按键代替市场上电子琴的按键,最后一个按键用来播放音乐。音乐是由不同的频率所产生的声音,通过控制时间来给喇叭送电平,从而使喇叭发出不同的响声,在通过查找歌曲的音符,做成一个音符表。通过按按键在由程序控制表的取的次序从而让喇叭发播放音乐。通过滑动变阻器控制喇叭声音大小。2、测温部分测温部分是基于DS18B20温度传感器的探测,然后实时传输给数码显示器。并且设有温度报警系统。当外界温度高于50°或者低于-20°时状态指示灯亮,蜂鸣器发出警报。3、计数部分RR0加一,RR1减一,RR2加十,RR减十.第三部分电路设计与参数选择一、单片机最小系统电路设计和元件的选择第四部分软件设计部分一、主程序#includereg51.h#includehardware.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintucharTempTH0,TempTL0,bian;//临时的Th0和Tl0,修改定时器中断时间用的变量ucharYinFu,JiePai,shu,shu1,TimeSec=10;staticuchartemp;ucharcodeTabMusic[7][340];bitFlag,ZF;//0:电子琴,1:音乐盒ucharcodeseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};voiddelay5(uchar);bitinit_ds18b20(void);ucharreadbyte(void);voidwritebyte(uchar);ucharretemp(void);voidwenxx(void);voidDelay05ms(ucharDelay05msData);voidDelay10ms(ucharDelay10msData);voidFunKeyScan(void);//电子琴程序voidFunPlay(void);//音乐盒播放程序voidDisplay(uchartemp);voidxianshi(void);voidmain(void){uchari;TempTH0=0x00;TempTL0=0x00;TH0=TempTH0;TL0=TempTL0;TMOD=0x01;TR0=0;ET0=1;EX0=1;//0EX1=1;//1IT0=1;PX1=1;EA=1;ABC=0x00;temp=retemp();Delay05ms(1);while(1){while(shu==2)xianshi();while(shu==1){TR0=0;if(i==0)temp=retemp();if(++i==200)i=0;Display(temp);wenxx();}while(shu==0){if(Flag==0)//电子琴{if(PKey!=0xff)//发现按键按下{FunKeyScan();//检测键盘并修改定时时间TR0=1;//发出声音}else//如果发现按键弹起,则关闭声音{TR0=0;shu1=bian+1;Display(shu1);}}else//音乐盒功能{i=0;while((TabMusic[bian][i]!=255)&&(shu==0))//检查是否到了歌曲结束{YinFu=TabMusic[bian][i++];//取得音符,JiePai=TabMusic[bian][i++];//取得节拍FunPlay();//根据音符控制定时器的频率Delay10ms(JiePai*30);//根据节拍控制频率的持续时间if(Flag==0)break;//如果发现不是音乐盒状态,退出}Flag=0;//自动播放结束,则自动转为电子琴状态}}}}voidDisplay(uchartemp){if(temp9){wen=seg[temp/10];//输出十位dian1=1;Delay05ms(2);//延时5msdian1=0;wen=0xff;}dian2=1;wen=seg[temp%10];//输出个位Delay05ms(2);//延时5msdian2=0;wen=0xff;}/*--------------精确延时5us子程序---------*/voiddelay5(ucharn){do{_nop_();_nop_();_nop_();n--;}while(n);}/*--------------初始化函数--------------------*/bitinit_ds18b20(void)//检测到DS18B20返回0没检测到DS18B20则返回1{DQ=1;DQ=0;delay5(100);//延时500USDQ=1;delay5(12);//延时60USif(DQ==0)//检测到DS18B20则为0{while(DQ==0);//等待DS18B20释放总线return0;//检测到DS18B20则为0}else{return1;//没检测到DS18B20则返回1}}/*--------------读取一字节函数----------------*/ucharreadbyte(void){uchari=0;uchardate=0;for(i=8;i0;i--){DQ=0;delay5(1);DQ=1;//15微秒内拉释放总线date=1;if(DQ)date|=0x80;delay5(11);}return(date);}/*--------------写一字节函数------------------*/voidwritebyte(uchardat){uchari=0;for(i=8;i0;i--){DQ=0;DQ=dat&0x01;//写1在15微秒内拉低delay5(12);//写0拉低60微秒DQ=1;dat=1;delay5(5);}}/*--------------读取温度函数------------------*/ucharretemp(void){uchara,b;uchart;while(init_ds18b20());writebyte(0xCC);Delay05ms(2);writebyte(0x44);Delay05ms(16);while(init_ds18b20());writebyte(0xCC);Delay05ms(2);writebyte(0xBE);a=readbyte();b=readbyte();a=4;b=4;t=b|a;if((b&0x80)){ZF=0;//表示负温度t=~t+1;//温度在寄存器中为12位,分辨率为0.0625}elseZF=1;return(t);}voidwenxx(void){if(!ZF){wendu=1;if(temp=20)wendu1=1;elsewendu1=0;}if(ZF){wendu=0;if(temp=50)wendu1=1;elsewendu1=0;}}voidFunKeyScan(void){switch(PKey){case0xfe:TempTH0=0xfc;TempTL0=0x8f;bian=0;break;case0xfd:TempTH0=0xfc;TempTL0=0xef;bian=1;break;case0xfb:TempTH0=0xfd;TempTL0=0x45;bian=2;break;case0xf7:TempTH0=0xfd;TempTL0=0x6c;bian=3;break;case0xef:TempTH0=0xfd;TempTL0=0xb4;bian=4;break;case0xdf:TempTH0=0xfd;TempTL0=0xf4;bian=5;break;case0xbf:TempTH0=0xfe;TempTL0=0x2d;bian=6;break;default:TR0=0;break;}}voidFunPlay(void){switch(YinFu){case11:TempTH0=0xf9;TempTL0=0x1e;TR0=1;break;case12:TempTH0=0xf9;TempTL0=0xde;TR0=1;break;case13:TempTH0=0xfa;TempTL0=0x8a;TR0=1;break;case14:TempTH0=0xfa;TempTL0=0xd8;TR0=1;break;//11---17表示低音音符case15:TempTH0=0xfb;TempTL0=0x68;TR0=1;break;case16:TempTH0=0xfb;TempTL0=0xe8;TR0=1;break;case17:TempTH0=0xfc;TempTL0=0x5a;TR0=1;break;case21:TempTH0=0xfc;TempTL0=0x8f;TR0=1;break;case22:TempTH0=0xfc;TempTL0=0xef;TR0=1;break;case23:TempTH0=0xfd;TempTL0=0x45;TR0=1;break;case24:TempTH0=0xfd;TempTL0=0x6c;TR0=1;break;//21---27中音符case25:TempTH0=0xfd;TempTL0=0xb4;TR0=1;break;case26:TempTH0=0xfd;TempTL0=0xf4;TR0=1;break;case27:TempTH0=0xfe;TempTL0=0x2d;TR0=1;break;case31:TempTH0=0xfe;TempTL0=0x47;TR0=1;break;case32:TempTH0=0xfe;TempTL0=0x77;TR0=1;break;case33:TempTH0=0xfe;TempTL0=0xa2;TR0=1;break;case34:TempTH0=0xfe;TempTL0=0xb6;TR0=1;break;case35:TempTH0=0xfe;TempTL0=0xda;TR0=1;break;//31---37表示高音音符case36:TempTH0=0xfe;TempTL0=0xfa;TR0=1;break;