第一次發帖。泡論壇一段時間,趁國慶有時間做了一個,程序是湊出來的,再修改。哈哈。共陰跟共陽數碼管亮度不一樣,算不算個性。大于99.9和負溫度沒有弄,畢竟室內不會出現那么極端的氣溫。電路圖有空再補上,還沒畫。上圖,渣渣的焊工。 
IMG_20171006_151630[1].jpg (2.73 MB, 下載次數: 54)
下載附件
2017-10-6 20:06 上傳
IMG_20171006_151705[1].jpg (2.9 MB, 下載次數: 61)
下載附件
2017-10-6 20:05 上傳
IMG_20171006_151739[1].jpg (3.3 MB, 下載次數: 80)
下載附件
2017-10-6 20:05 上傳
IMG_20171006_151837[1].jpg (2.93 MB, 下載次數: 57)
下載附件
2017-10-6 20:05 上傳
IMG_20171006_151859[1].jpg (3.4 MB, 下載次數: 60)
下載附件
2017-10-6 20:04 上傳
IMG_20171006_151915[1].jpg (3.31 MB, 下載次數: 52)
下載附件
2017-10-6 20:04 上傳
IMG_20171006_151931[1].jpg (2.88 MB, 下載次數: 54)
下載附件
渣渣的焊接,廢了不少時間。
2017-10-6 20:03 上傳
IMG_20171006_151946[1].jpg (3.1 MB, 下載次數: 64)
下載附件
2017-10-6 20:03 上傳
IMG_20171006_151948[1].jpg (3.02 MB, 下載次數: 53)
下載附件
2017-10-6 20:02 上傳
IMG_20171006_194812[1].jpg (2.91 MB, 下載次數: 74)
下載附件
2017-10-6 20:02 上傳
單片機源程序如下:
- #include "CONFIG.H"
- #include "DS18B20.H"
- #include "SHUMAGUAN.H"
- extern uchar LedBuff[3];
- sbit RED = P1^5;
- sbit YELLOW = P1^7;
- sbit GREEN = P1^3;
- bit flag1s = 0; //1s 定時標志
- //bit SMG_FLAG=0; //數碼管刷新標志
- uchar T0RH = 0; //T0 重載值的高字節
- uchar T0RL = 0; //T0 重載值的低字節
- void ConfigTimer0(uint ms);
- void main()
- {
- bit res;
- int temperature; //讀取到的當前溫度值
- int intT, decT; //溫度值的整數和小數部分
- EA = 1; //開總中斷
- ConfigTimer0(2); //T0 定時 2ms
- Start18B20(); //啟動 DS18B20
- while (1)
- {
- if (flag1s) //每秒更新一次溫度
- {
- flag1s = 0;
- res = Get18B20Temp(&temperature); //讀取當前溫度
- if (res) //讀取成功時,刷新當前溫度顯示
- {
- intT = temperature >> 4; //分離出溫度值整數部分 右移后不用乘精度。
- decT = temperature & 0xF; //分離出溫度值小數部分
- LedBuff[0]=intT/10;
- LedBuff[1]=intT%10;
- LedBuff[2]=(decT*10)/16;
- if ((intT>35)|(intT<10))
- {
- RED=0;
- YELLOW=1;
- GREEN=1;
- }
- else if ((intT>=15)&&(intT<=28))
- {
- RED=1;
- YELLOW=1;
- GREEN=0;
- }
- else if (((intT>=10)&&(intT<15))|((intT>28)&&(intT<=35)))
- {
- RED=1;
- YELLOW=0;
- GREEN=1;
- }
- Start18B20();
- }
- else //讀取失敗時,提示錯誤信息
- {
- Start18B20(); //重新啟動下一次轉換
- }
- }
- /*if (SMG_FLAG)
- {
- LedRefresh();
- SMG_FLAG=0;
-
- }*/
- }
- }
- /* 配置并啟動 T0, ms-T0 定時時間 */
- void ConfigTimer0(uint ms)
- {
- ulong tmp; //臨時變量
- tmp = 12000000 / 12; //定時器計數頻率
- tmp = (tmp * ms) / 1000; //計算所需的計數值
- tmp = 65536 - tmp; //計算定時器重載值
- // tmp = tmp + 12; //補償中斷響應延時造成的誤差
- T0RH = (uchar)(tmp>>8); //定時器重載值拆分為高低字節
- T0RL = (uchar)tmp;
- TMOD &= 0xF0; //清零 T0 的控制位
- TMOD |= 0x01; //配置 T0 為模式 1
- TH0 = T0RH; //加載 T0 重載值
- TL0 = T0RL;
- ET0 = 1; //使能 T0 中斷
- TR0 = 1; //啟動 T0
- }
- /* T0 中斷服務函數,完成 1 秒定時 */
- void InterruptTimer0() interrupt 1
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
DS18B20.rar
(43.15 KB, 下載次數: 20)
2017-10-6 20:08 上傳
點擊文件名下載附件
程序 下載積分: 黑幣 -5
|