資源簡介
內含數字溫度計 單片機keil代碼 和proteus電路原理仿真 以及設計論文 一條龍服務,超值~

代碼片段和文件信息
#include
#include?
#define?uchar?unsigned?char
#define?uint?unsigned?int
#define??????ad0_7??????P1???????//AD數據口
sbit?????????cs=P2^4;??????//片選信號,低電平有效,控制芯片的啟動和結果讀取
sbit?????????rd=P2^7;????????//讀數據控制,低電平有效
sbit?????????wr=P2^6;?????????//AD啟動控制,上升沿有效
sbit?????????intr=P2^5;???????//AD轉換完成輸出低電平
uchar?i;
uchar?led[11]={?????0x3F??//“0“
????????????????0x06??//“1“
????????????????0x5B??//“2“
????????????????0x4F??//“3“
????????????????0x66??//“4“
????????????????0x6D??//“5“
????????????????0x7D??//“6“
????????????????0x07??//“7“
????????????????0x7F??//“8“
????????????????0x6F??//“9“
0x40???//“-“
};
uchar?dat_AD[4]={0};
??
//啟動AD轉換子程序//////////////////
void?start_ad(void)
{???????cs=0;?????????????????//允許AD
????????wr=0;
????????_nop_();
?????????wr=1;????????????????//WR由低變高時啟動AD轉換
????????
????????while(intr);??????????//等待轉換完成,低電平有效
????????cs=1;?????????????????//停止AD轉換
}////////////////////
?read_ad()
{???????uint?ad_data;
????????ad0_7=0xff;
????????cs=0;?????????????????//允許讀
????????rd=0;?????????????????//讀取轉換數據結果
????????_nop_();
????????ad_data=ad0_7;?????????//把數據存到AD——data中
????????rd=1;cs=1;????????????//停止讀取AD
????????return(ad_data);
}
//?數據處理函數
//實際測量當0度時,AD數據為133,所以數據處理時判斷AD數據和133的大小來識別正負溫度。
//由于ADC芯片精度不夠,所以測量時有誤差,8位AD的分辨率為19.5mV,約為20mV,
//放大電路輸出的電壓,溫度每變化一度,電壓變化只有10mV左右,所以測量有誤差,
//以下溫度和AD數據的計算公式為實測數據后線性擬合得到的,實際線性擬合得到公式為:y=0.503x+133.63.
//因為AD數據為0-255的整數,所以公式簡化為以下計算方式
void?data_shout(uint?ad_data)
{??????
?????????float??temp;
?????????uint?T;
if(ad_data<79)
???????????????{
???????????????????temp=614.422-7.811*ad_data;
?T=(uint)temp;
?????????????????dat_AD[0]=10;
???????????????} ????????????????????//負溫度???dat_AD[0]中為溫度符號數據
? else?if(ad_data<=204)
???????????????{
???????????????????temp=7.990*ad_data-628.491;
?????????T=(uint)temp;
?????????????????dat_AD[0]=T/1000;
???????????????} ?????????????????????//正溫度
else?if(ad_data>204)
???????????????{
?????????????????temp=8.124*ad_data-655.742;
?????????T=(uint)temp;
?????????????????dat_AD[0]=T/1000;
???????????????} ????????????????????????//ad_data=T;
?????? ?dat_AD[1]=T%1000/100;??????????????//溫度值的十位
?????????dat_AD[2]=T%100/10;??????????//2溫度值的個位
?????????dat_AD[3]=T%10;??????????//溫度值的小數位
}
//顯示函數
void?disp(){
switch(i){
case?0:?P0=0xfe;P3=led[dat_AD[0]];i++;break; ?//顯示符號位
case?1:?P0=0xfd;P3=led[dat_AD[1]];i++;break;
case?2:?P0=0xfb;P3=led[dat_AD[2]]|0x80;i++;break;
case?3:?P0=0xf7;P3=led[dat_AD[3]];i=0;break;
}
}
//定時器初始化
//用作數碼管顯示的刷新
void?t0init(){
TMOD=0x01;
TH0=(65535-2000)/256; ???//定時20ms時間
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
}
?//定時器中斷函數,在中斷中刷新數碼管顯示
?void?Time0(??)?interrupt?1{
? TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
disp();
?}?
//主函數
void?main(void){?
?t0init(); ??//初始化
?????while(1){
????????start_ad();?????????????//開始AD
????????data_shout(read_ad());???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-06-05?23:38??keil\
?????文件??????118751??2014-06-09?15:10??keil\Last?Loaded?shuziwenduji.DBK
?????文件????????3411??2014-06-09?15:05??keil\main.c
?????文件????????6280??2019-06-05?23:35??keil\main.LST
?????文件????????6648??2019-06-05?23:35??keil\main.OBJ
?????文件????????7423??2019-06-05?23:35??keil\pt100
?????文件????????1054??2019-06-05?23:35??keil\pt100.build_log.htm
?????文件????????3992??2019-06-05?23:35??keil\pt100.hex
?????文件??????????42??2019-06-05?23:35??keil\pt100.lnp
?????文件???????10256??2019-06-05?23:35??keil\pt100.M51
?????文件?????????605??2014-06-09?15:08??keil\pt100.plg
?????文件???????90247??2019-06-05?23:38??keil\pt100.uvgui.20292
?????文件????????5741??2019-06-05?23:34??keil\pt100.uvopt
?????文件???????14027??2019-06-05?23:34??keil\pt100.uvproj
?????文件???????????0??2014-06-09?15:07??keil\pt100_Uv2.Bak
?????文件????????6376??2005-03-22?15:22??keil\STARTUP.A51
?????文件???????14069??2019-06-05?23:35??keil\STARTUP.LST
?????文件?????????749??2019-06-05?23:35??keil\STARTUP.OBJ
?????目錄???????????0??2019-06-05?23:37??proteus?仿真\
?????文件?????6885662??2014-06-09?15:48??proteus?仿真\shuziwenduji.BMP
?????文件??????118752??2014-06-09?18:10??proteus?仿真\shuziwenduji.DSN
?????文件???????21561??2019-06-05?23:37??proteus?仿真\shuziwenduji.pdsprj
?????文件?????????873??2019-06-05?23:37??proteus?仿真\shuziwenduji.pdsprj.DESKTOP-7CGG286.20292.workspace
?????文件?????????742??2014-06-09?18:10??proteus?仿真\shuziwenduji.PWI
?????目錄???????????0??2019-06-05?23:37??設計報告\
?????文件???????39424??2015-01-03?11:20??設計報告\基于熱敏電阻的數字溫度計的設計任務書.doc
?????文件??????605228??2015-01-03?11:19??設計報告\設計.doc
評論
共有 條評論