单片机原理与应用课程设计-基于atmega16实现的电压和温度的采集及液晶显示系统内容摘要:

har p) {uchar a=0。 uchar b=0。 for(。 ap。 a++) {for(。 b8000。 b++) {。 } } } //call this routine to initialise all peripherals void init_devices(void)//初始化单片机 { //stop errant interrupts until set up CLI()。 //disable all interrupts port_init()。 init_lcd()。 MCUCR = 0x00。 GICR = 0x00。 TIMSK = 0x00。 //timer interrupt sources SEI()。 //reenable interrupts //all peripherals are now initialised } uchar reset(void)//***************初始化 DS18B20 { uchar online。 DDRC|=BIT(PC0)。 武汉理工大学《单片机原理与应用》课程设计 17 PORTCamp。 =~BIT(PC0)。 delayus(500)。 PORTC|=BIT(PC0)。 delayus(100)。 DDRCamp。 =~BIT(PC0)。 online=PORTCamp。 0X01。 //delayus(100)。 return(online)。 } uchar read_byte(void)//*********DS18B20 读一个字节 { uchar i,mid。 uchar value=0。 for(i=8。 i0。 i) { value=1。 DDRC|=BIT(PC0)。 PORTCamp。 =~BIT(PC0)。 delayus(1)。 DDRCamp。 =~BIT(PC0)。 mid=PINCamp。 0X01。 if(mid) {value|=0x80。 } delayus(60)。 } return(value)。 } 武汉理工大学《单片机原理与应用》课程设计 18 void write_byte(char val)//*******DS18B20 写一个字节 { uchar i,mid。 for(i=8。 i0。 i) { DDRC|=BIT(PC0)。 // PORTCamp。 =~BIT(PC0)。 delayus(2)。 mid=valamp。 0x01。 if(mid) PORTC|=BIT(PC0)。 else PORTCamp。 =~BIT(PC0)。 delayus(60)。 val=val1。 delay(60)。 PORTC|=BIT(PC0)。 } } int read_temp(void)//读取温度 { uchar high=0,low=0。 int x。 if(!reset()) { write_byte(0xcc)。 //写 ROM 指令 write_byte(0x44)。 武汉理工大学《单片机原理与应用》课程设计 19 delayms(1000)。 reset()。 write_byte(0xcc)。 write_byte(0xbe)。 low=read_byte()。 high=read_byte()。 x=(highamp。 0x0f)。 x=8。 x|=low。 return x。 } } void dis_num(uchar page,uchar row,long int i)/***显示 09 数字 { switch(i) { case 0 : number_disp(page,row,zero)。 break。 case 1: number_disp(page,row,one)。 break。 case 2: number_disp(page,row,two)。 break。 case 3: number_disp(page,row,three)。 break。 case 4: number_disp(page,row,four)。 break。 武汉理工大学《单片机原理与应用》课程设计 20 case 5: number_disp(page,row,five)。 break。 case 6: number_disp(page,row,six)。 break。 case 7: number_disp(page,row,seven)。 break。 case 8: number_disp(page,row,eight)。 break。 case 9: number_disp(page,row,nine)。 break。 default :。 } } void dis_temp(uchar x,uchar y,int z)//显示温度 { uchar lie。 int zz。 lie=y。 zz=z。 if(z0){number_disp(x,lie,fuhao)。 zz=zz。 lie++。 } if(z/100){dis_num(x,lie,zz/100)。 lie++。 } if(z/10){dis_num(x,lie,(zz%100)/10)。 lie++。 } if(z/1){dis_num(x,lie,zz%10)。 lie++。 } if(z==0){dis_num(x,lie,0)。 lie++。 } } void adc_init(void)//初始化 ADC 武汉理工大学《单片机原理与应用》课程设计 21 { ADCSR = 0x00。 //disable adc ADMUX = 0x04。 //select adc input 0 ACSR = 0x80。 ADCSR = 0xE1。 } void Conversion(void) { input=(ADCH8)+ADCL。 voltage=input*()*100。 } void dis_volt(uchar x,uchar y,int z)//显示电压值 { uchar lie。 int zz。 lie=y。 zz=z。 if(!(z/100)){dis_num(x,lie,0)。 lie++。 } if(z/100){dis_num(x,lie,zz/100)。 lie++。 } number_disp(x,lie,xiaoshudian)。 lie++。 dis_num(x,lie,(zz%100)/10)。 lie++。 dis_num(x,lie,zz%10)。 lie++。 if(z==0){dis_num(x,lie,0)。 lie++。 } number_disp(x,lie,fute)。 } void main(void)//主函数 武汉理工大学《单片机原理与应用》课程设计 22 {int temp=0。 init_devices()。 //初始化单片机 adc_init()。 //初始化 ADC word_disp(0,0,dian)。 word_disp(0,1,ya)。 word_disp(0,2,shi)。 word_disp(2,0,wen)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。