欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
基于51單片機ds18b20仿真+詳細注釋的代碼
[打印本頁]
作者:
i阿婆
時間:
2017-12-26 11:58
標題:
基于51單片機ds18b20仿真+詳細注釋的代碼
基于51單片機 18b20仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(23.52 KB, 下載次數: 58)
下載附件
2017-12-27 02:51 上傳
0.png
(7.82 KB, 下載次數: 55)
下載附件
2017-12-27 02:51 上傳
單片機源程序如下(帶有詳細的注釋):
#include<reg51.h>
#include<lcd1602.h>
#include<18b20.h>
#define uchar unsigned char
#define uint unsigned int
bit flag1s = 0; //1s定時標志
unsigned char T0RH = 0; //T0重載值的高字節
unsigned char T0RL = 0; //T0重載值的低字節
void ConfigTimer0(unsigned int ms);
unsigned char IntToString(unsigned char *str, int dat);
extern bit Start18B20();
extern bit Get18B20Temp(int *temp);
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void main()
{
bit res;
int temp; //讀取到的當前溫度值
int intT, decT; //溫度值的整數和小數部分
unsigned char len;
unsigned char str[12];
EA = 1; //開總中斷
ConfigTimer0(10); //T0定時10ms
Start18B20(); //啟動DS18B20
InitLcd1602(); //初始化液晶
while (1)
{
if (flag1s) //每秒更新一次溫度
{
flag1s = 0;
res = Get18B20Temp(&temp); //讀取當前溫度
if (res) //讀取成功時,刷新當前溫度顯示
{
intT = temp >> 4; //分離出溫度值整數部分
decT = temp & 0xF; //分離出溫度值小數部分
len = IntToString(str, intT); //整數部分轉換為字符串
str[len++] = '.'; //添加小數點
decT = (decT*10) / 16; //二進制的小數部分轉換為1位十進制位
str[len++] = decT + '0'; //十進制小數位再轉換為ASCII字符
while (len < 6) //用空格補齊到6個字符長度
{
str[len++] = ' ';
}
str[len] = '\0'; //添加字符串結束符
LcdShowStr(0, 0, str); //顯示到液晶屏上
}
else //讀取失敗時,提示錯誤信息
{
LcdShowStr(0, 0, "error!");
}
Start18B20(); //重新啟動下一次轉換
}
}
}
/* 整型數轉換為字符串,str-字符串指針,dat-待轉換數,返回值-字符串長度 */
unsigned char IntToString(unsigned char *str, int dat)
{
signed char i = 0;
unsigned char len = 0;
unsigned char buf[6];
if (dat < 0) //如果為負數,首先取絕對值,并在指針上添加負號
{
dat = -dat;
*str++ = '-';
len++;
}
do { //先轉換為低位在前的十進制數組
buf[i++] = dat % 10;
dat /= 10;
} while (dat > 0);
len += i; //i最后的值就是有效字符的個數
while (i-- > 0) //將數組值轉換為ASCII碼反向拷貝到接收指針上
{
*str++ = buf[i] + '0';
}
*str = '\0'; //添加字符串結束符
return len; //返回字符串長度
}
/* 配置并啟動T0,ms-T0定時時間 */
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //臨時變量
tmp = 11059200 / 12; //定時器計數頻率
tmp = (tmp * ms) / 1000; //計算所需的計數值
tmp = 65536 - tmp; //計算定時器重載值
tmp = tmp + 2; //補償中斷響應延時造成的誤差
T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0為模式1
TH0 = T0RH; //加載T0重載值
TL0 = T0RL;
ET0 = 1; //使能T0中斷
TR0 = 1; //啟動T0
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
16.18b20.zip
(99.28 KB, 下載次數: 133)
2017-12-26 11:57 上傳
點擊文件名下載附件
18b20
下載積分: 黑幣 -5
作者:
這個那個
時間:
2018-9-6 00:15
附件中沒有仿真
作者:
gaoshennanzi
時間:
2018-9-9 17:22
附件中沒有仿真
作者:
急不可待
時間:
2018-11-28 21:44
謝謝。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1