資源簡介
51單片機做的溫度計和電壓采樣,溫度計采用DS18B20,AD采樣用的是ADC0809,然后在12864上顯示溫度值和電壓值

代碼片段和文件信息
#include?
#include?
typedef?unsigned?char?uint8;
typedef?unsigned?int?uint16;
#define?adc0809_data??P1
sbit?STR?=P3^4;?//單片機P3.4接模塊STR引腳?啟動轉換信號
sbit?EOC?=P3^5;?//單片機P3.5接模塊EOC,?轉換結束信號,高電平有效
sbit?OE??=P3^6;?//單片機P3.6接模塊OE輸出允許信號,高電平有效
sbit?CLK?=P3^3;?//單片機P3.7接CLK?,ADC0809時鐘輸入50-800KHZ的頻率
???????????????//一般選用500K
void?Delay5Ms(void);
void?Delay400Ms(void);
unsigned?char?AD_DATA[1];?//保存IN0通道轉換后的數據
unsigned?int??addata2;
sbit??DQ=P3^7;???????????????????
sbit??LCDRS=P0^7;
sbit??LCDWE=P0^6;
sbit??LCDEN=P0^5;
sbit??LCDPSB=P0^4;????
uint8?temp=80temp_Booktemp_Look;
uint8???teying[14]={“溫度顯示:“};
uint8???ying[15]??={“電壓顯示:“};
void?Delay5Ms(void)
{
unsigned?int?TempCyc?=?5552;
while(TempCyc--);
}
/***********AD轉換函數**********/?
void?AD(void?)?
{?
???STR=0;?
?
???STR=1;?//啟動AD轉換
?
???STR=0;??
???while(0==EOC);//等待轉換結束?
???OE=1;??
???AD_DATA[0]=adc0809_data;?//讀取AD數據,數據范圍為0-255
???OE=0;??
}?
/***********T0中斷服務程序************/?
void?t0(void)?interrupt?1?using?0?
{??
???CLK=~CLK;?
}??
void?delayms(unsigned?int?ms)
{
unsigned?char?i=100j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
void?delay_ms(uint16?mao)
{
?uint16?ab;
?for(a=0;a ?for(b=0;b<120;b++);
}
void?write_com(uint8?com)
{
?LCDRS=0;
?LCDWE=0;
?LCDEN=0;
?P2=com;
?delay_ms(5);
?LCDEN=1;
?delay_ms(5);
?LCDEN=0;
}
void?write_data(uint8?date)
{
?LCDRS=1;
?LCDWE=0;
?LCDEN=0;
?P2=date;
?delay_ms(5);
?LCDEN=1;
?delay_ms(5);
?LCDEN=0;
}
void?LCD_INIT(void)//????????
{
?LCDPSB=1;
?delay_ms(5);
?write_com(0x30);
?delay_ms(5);
?write_com(0x30);
?delay_ms(5);
?write_com(0x0c);
?delay_ms(5);
?write_com(0x01);
?delay_ms(20);
}
void?display(void)//?????
{
?uint8?i;
?write_com(0x88);
?for(i=0;i<14;i++)
?{
??write_data(teying[i]);
?}
}
void?display_Book()//??LCD12864???????????????????ISCii?
{
?teying[10]=temp/10+0x30;
?teying[11]=temp%10+0x30;
?teying[12]=0x20;
?teying[13]=0x02;
}
void?display2(void)
{
?uint8?i;
?write_com(0x80);
?for(i=0;i<13;i++)
?{
??write_data(ying[i]);
?}
}
void?display_Book2()
{
?ying[10]=AD_DATA[0]/100+0x30;
?ying[11]=AD_DATA[0]/10%10+0x30;
?ying[12]=AD_DATA[0]%10+0x30;
}
void?delay_us(uint8?m)//??
{
?while(--m);
}
bit?Inte_DS18B20(void)//??
{
?bit?DS18B20_EXIP;
?DQ=1;
?DQ=0;
?delay_us(250);
?DQ=1;
?delay_us(30);
?DS18B20_EXIP=DQ;
?delay_us(200);
?if(DS18B20_EXIP)
?return?1;
?else
?return?0;
}
void?write_DS18B20(uint8?num)
{
?uint8?i;
?for(i=0;i<8;i++)
?{
??DQ=1;
??DQ=0;
??_nop_();
???DQ=num&0x01;
???delay_us(20);
???num=num>>1;
???DQ=1;
???delay_us(1);
?}
}
uint8?Read_DS18B20()??????????//???
{
?uint8?inum;
?for(i=0;i<8;i++)
?{
??DQ=1;
??DQ=0;
??delay_us(1);
??DQ=1;
??_nop_();
??_nop_();
???num=num>>1;
???if(DQ)
???num?|=0x80;
???delay_us(20);
?}
?return?num;
}
void?Get_Temp()
{
?Inte_DS18B20();
?write_DS18B20(0xCC);
?wri
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????11180??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa
?????文件???????3633??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.c
?????文件???????2168??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.hex
?????文件?????????36??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.lnp
?????文件???????7957??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.LST
?????文件??????16742??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.M51
?????文件??????12943??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.OBJ
?????文件??????11689??2014-05-17?15:32??LCD+DS18B20+ADC0809\aa.plg
????.......?????68633??2014-05-17?16:03??LCD+DS18B20+ADC0809\aa.uvgui.Administrator
????.......??????5030??2014-05-17?16:03??LCD+DS18B20+ADC0809\aa.uvopt
????.......?????13385??2014-05-17?16:03??LCD+DS18B20+ADC0809\aa.uvproj
????.......?????????0??2014-05-17?14:39??LCD+DS18B20+ADC0809\aa_uvproj.bak
?????目錄??????????0??2014-05-17?16:03??LCD+DS18B20+ADC0809
-----------?---------??----------?-----??----
???????????????153396????????????????????13
- 上一篇:基于PLC的變頻恒壓供水的設計
- 下一篇:WEB瀏覽器設計 .
評論
共有 條評論