資源簡介
基于51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì),并用4位數(shù)碼管顯示。實(shí)測可用。采用keil編程,有hex文件,

代碼片段和文件信息
#include? ?????????//調(diào)用單片機(jī)頭文件
#define?uchar?unsigned?char??//無符號字符型?宏定義 變量范圍0~255
#define?uint??unsigned?int ?//無符號整型?宏定義 變量范圍0~65535
???????//數(shù)碼管段選定義?0?????1????2????3? ??4 ???5 6 ?7 ??8 ???9
uchar?code?smg_du[]={0x140x770x4c0x450x270x850x840x570x040x05
// ???A B ?C ??D ???E???F 不顯示
? ???0x060xa40x9c0x640x8c0x8e0xff}; ?//斷碼
//數(shù)碼管位選定義
sbit?smg_we1?=?P2^0; ????//數(shù)碼管位選定義
sbit?smg_we2?=?P2^2;
sbit?smg_we3?=?P2^4;
sbit?smg_we4?=?P2^6;
uchar?dis_smg[8]?=?{0x140x770x4c0x450x270x850x84};
uchar?smg_i?=?3;????//顯示數(shù)碼管的個(gè)位數(shù)
sbit?dq???=?P3^3; //18b20?IO口的定義
bit?flag_wd_z_f;???????//正負(fù)溫度
int?temperature?;??//
/***********************1ms延時(shí)函數(shù)*****************************/
void?delay_1ms(uint?q)
{
uint?ij;
for(i=0;i for(j=0;j<120;j++);
}
/***********************小延時(shí)函數(shù)*****************************/
void?delay_uint(uint?q)
{
while(q--);
}
/***********************數(shù)碼位選函數(shù)*****************************/
void?smg_we_switch(uchar?i)
{
switch(i)
{
case?0:?smg_we1?=?0;??smg_we2?=?1;?smg_we3?=?1;??smg_we4?=?1;?break;
case?1:?smg_we1?=?1;??smg_we2?=?0;?smg_we3?=?1;??smg_we4?=?1;?break;
case?2:?smg_we1?=?1;??smg_we2?=?1;?smg_we3?=?0;??smg_we4?=?1;?break;
case?3:?smg_we1?=?1;??smg_we2?=?1;?smg_we3?=?1;??smg_we4?=?0;?break;
}
}
/***********************數(shù)碼顯示函數(shù)*****************************/
void?display()
{
static?uchar?i;???
i++;
if(i?>=?smg_i)
i?=?0;
P0?=?0xff; ?//消隱?
smg_we_switch(i); ?//位選
P0?=?dis_smg[i]; ?//段選 ????????
}
/***********************18b20初始化函數(shù)*****************************/
void?init_18b20()
{
bit?q;
dq?=?1; //把總線拿高
delay_uint(1); ????//15us
dq?=?0; //給復(fù)位脈沖
delay_uint(80); //750us
dq?=?1; //把總線拿高?等待
delay_uint(10); //110us
q?=?dq; //讀取18b20初始化信號
delay_uint(20); //200us
dq?=?1; //把總線拿高?釋放總線
}
/*************寫18b20內(nèi)的數(shù)據(jù)***************/
void?write_18b20(uchar?dat)
{
uchar?i;
for(i=0;i<8;i++)
{ ?//寫數(shù)據(jù)是低位開始
dq?=?0; ?//把總線拿低寫時(shí)間隙開始?
dq?=?dat?&?0x01;?//向18b20總線寫數(shù)據(jù)了
delay_uint(5); ?//?60us
dq?=?1; ?//釋放總線
dat?>>=?1;
}
}
/*************讀取18b20內(nèi)的數(shù)據(jù)***************/
uchar?read_18b20()
{
uchar?ivalue;
for(i=0;i<8;i++)
{
dq?=?0; ?//把總線拿低讀時(shí)間隙開始?
value?>>=?1; ?//讀數(shù)據(jù)是低位開始
dq?=?1; ?//釋放總線
if(dq?==?1) ?//開始讀寫數(shù)據(jù)?
value?|=?0x80;
delay_uint(5); ?//60us 讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間
}
return?value; ?//返回?cái)?shù)據(jù)
}
/*************讀取溫度的值?讀出來的是小數(shù)***************/
uint?read_temp()
{
uint?value;
uchar?low; ???//在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會影響到18b20的時(shí)序
init_18b20(); ???//初始化18b20
write_18b20(0xcc); ???//跳過64位ROM
write_18b20(0x44); ???//啟動(dòng)一次溫度轉(zhuǎn)換命令
delay_uint(50); ???//500us
init_18b20(); ???//初始化18b20
EA?=?0;
write_18b20(0xcc); ???//跳過64位ROM
write_18b20(0xbe); ???//發(fā)出讀取暫存器命令
low?=?read_18b20(); //讀溫度低字節(jié)
value?=?read_18b20();??//讀溫度高字節(jié)
EA?=?1;
value?<<=?8; ???//把溫度的高位左移8位
value?|=?low; ???//把讀
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????5402??2014-10-14?22:27??程序\單片機(jī)數(shù)字溫度計(jì).c
?????文件??????10233??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì)
?????文件???????5402??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).c
?????文件???????4800??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).hex
?????文件?????????64??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).lnp
?????文件??????11555??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).LST
?????文件??????14944??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).M51
?????文件??????11347??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).OBJ
?????文件????????690??2014-10-14?22:27??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).plg
????.......?????90195??2018-11-15?21:57??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).uvgui.回首追憶
????.......??????5406??2018-11-15?21:57??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).uvopt
????.......?????14314??2018-11-15?21:57??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì).uvproj
????.......?????????0??2014-10-14?22:26??程序\溫度計(jì)?程序\單片機(jī)數(shù)字溫度計(jì)_uvproj.bak
?????目錄??????????0??2018-11-15?21:57??程序\溫度計(jì)?程序
?????目錄??????????0??2016-01-17?23:51??程序
-----------?---------??----------?-----??----
???????????????174352????????????????????15
評論
共有 條評論