Atmega 128控制DS18B20在1602上显示.docx
- 文档编号:17624124
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:13
- 大小:31.21KB
Atmega 128控制DS18B20在1602上显示.docx
《Atmega 128控制DS18B20在1602上显示.docx》由会员分享,可在线阅读,更多相关《Atmega 128控制DS18B20在1602上显示.docx(13页珍藏版)》请在冰点文库上搜索。
Atmega128控制DS18B20在1602上显示
Atmega128控制DS18B20在1602上显示
申明:
本程序为课程设计测试过程序,直供学习交流。
有共同爱好或相同专业着加本人QQ,以便相互交流学习。
QQ:
2528620472
//基于DS18B20的水温控制系统
//其中PA5为蜂鸣器端口,
PA6,7为输出端口,分别控制继电器、蜂鸣器。
DS18B20data为PE3
单片机接口
//按键为单片机G口的0,1两个口。
设计标准温度,当实际温度大于标准温度,继电器断电,中断加热,同时蜂鸣器报警。
//2015_4_28鹄鹰
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharconsttable1[]="0123456789.";
ucharconsttable2[]="temp:
+'C";
ucharconsttable3[]="DuWeidong";
uintge,shi,dot1,dot2;
uintwendu;
uintge_in=1;
uintshi_in=3;
voiddelay(uintms)
{
uinti,j;
for(i=0;i { for(j=0;j<1141;j++); } } voidDelay_1us(uintx) { uinti; x=x*5/4; for(i=0;i } voidDS18B20_rst() { DDRE|=BIT(3); PORTE&=~BIT(3); Delay_1us(500); PORTE|=BIT(3); Delay_1us(60); DDRE&=~BIT(3); while(PINE&BIT(3)); while(! (PINE&BIT(3))); } voidDS18B20_Write(ucharData) { uchari; DDRE|=BIT(3); for(i=0;i<8;i++) { PORTE&=~BIT(3); Delay_1us(10); if(Data&0x01)PORTE|=BIT(3); elsePORTE&=~BIT(3); Delay_1us(40); PORTE|=BIT(3); Delay_1us (1); Data>>=1; } } ucharDS18B20_Read() { uchari,Temp; for(i=0;i<8;i++) { Temp>>=1; DDRE|=BIT(3); PORTE&=~BIT(3); PORTE|=BIT(3); DDRE&=~BIT(3); if(PINE&BIT(3))Temp|=0x80; Delay_1us(45); } returnTemp; } unsignedintRead_Temperature() { uintTemp1,Temp2; DS18B20_rst(); DS18B20_Write(0xCC); DS18B20_Write(0x44); DS18B20_rst(); DS18B20_Write(0xCC); DS18B20_Write(0xbe); Temp1=DS18B20_Read(); Temp2=DS18B20_Read(); DS18B20_rst(); return(((Temp2<<8)|Temp1)*6.25); } //*********************************LCD1602****************************** //*********************************LCD1602****************************** voidwrite_order(ucharorder) { PORTA&=~BIT(0); PORTA&=~BIT (1); PORTA&=~BIT (2); PORTC=order;//写指令,将具体的指令写入 PORTA|=BIT (2); delay (1); PORTA&=~BIT (2); } voidwrite_data(uchardata) { PORTA|=BIT(0); PORTA&=~BIT (1); PORTA&=~BIT (2); PORTC=data;//写数据,将具体的数据写入 PORTA|=BIT (2); delay (1); PORTA&=~BIT (2); } voidshow_LCD() { uchari,j,K; DDRC=0XFF; DDRA=0X07; write_order(0X38); delay(5); write_order(0X01); delay(5); write_order(0X0C); delay(5); write_order(0x06); delay(5); write_order(0X80+0X48); delay(5); write_data(table1[10]); write_order(0X80+0X40); for(i=0;i<6;i++) { write_data(table2[i]); Delay_1us(100); } write_order(0X80+0X4C); for(i=6;i<8;i++) { write_data(table2[i]); Delay_1us(100); } write_order(0X80+0X00); for(j=0;j<10;j++) { write_data(table3[j]); Delay_1us(100); } } voidshuju(uintnum)//动态数据显示 { uchari,k; ge=num%1000/100; shi=num/1000; dot1=num%100/10; dot2=num%10; //******************************************** write_order(0X80+0X46); write_data(table1[shi]); Delay_1us(100); //******************************************** write_order(0X80+0X47); write_data(table1[ge]); Delay_1us(100); //******************************************** write_order(0X80+0X49); write_data(table1[dot1]); Delay_1us(100); //******************************************** write_order(0X80+0X4A); write_data(table1[dot2]); Delay_1us(100); //******************************************** write_order(0X80+0X0D); write_data(table1[shi_in]); Delay_1us(100); //******************************************** write_order(0X80+0X0E); write_data(table1[ge_in]); Delay_1us(100); } voidjingao() { if(shi>=shi_in&&ge>=ge_in) { DDRA|=BIT(5); PORTA|=BIT(5); DDRA|=BIT(6); PORTA|=BIT(6); } else { PORTA&=~BIT(5); PORTA&=~BIT(6); } } //**********************************4X4矩阵键盘***************************** ucharkeypress() { ucharj; DDRG|=0X0F; PORTG|=0X0F; DDRG&=0XF0; j=PING; j=PING&0X0F; if(j==0XFF) { return0; } else { return1; } } ucharkeyscan() { ucharkey,key_l; delay(10); if(keypress()) { key=PING; key&=0X0F; switch(key) { case0X0E: key_l=10;break; case0X0D: key_l=11;break; case0X0B: key_l=12;break; case0X07: key_l=13;break; default: key_l=17; } } else { key_l=17; } returnkey_l; } voidshuru_ge() { uinti,j; i=keypress(); j=keyscan(); if(i) { if(j==10) { if(ge_in>=9) ge_in=0; else ge_in=ge_in+1; delay(300); } } else { ge_in=ge_in; } } voidshuru_shi() { uinti,j; i=keypress(); j=keyscan(); if(i) { if(j==11) { if(shi_in>=9) shi_in=0; else shi_in=shi_in+1; delay(300); } } else { shi_in=shi_in; } } voidmain() { show_LCD(); while (1) { wendu=Read_Temperature(); shuru_ge(); shuru_shi(); shuju(wendu); Delay_1us(100); jingao(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Atmega 128控制DS18B20在1602上显示 128 控制 DS18B20 1602 显示