|
50gif.gif (2.62 MB, 下載次數(shù): 49)
下載附件
2023-10-27 22:54 上傳
ds1621溫度傳感器仿真程序:
rem Main.bas file generated by New Project wizard
rem
rem Created: 周三 10月 25 2023
rem Processor: ATmega88
rem Compiler: BASCOM-AVR
rem Write your code here
$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 30
$framesize = 40
'$baud = 19200 '定義通用異步收發(fā)設(shè)備BAUD速率
Config Clockdiv = 1 ' 確保芯片以8 MHz運行
Config Scl = Portc.5 ' 使用i2c引腳
Config Sda = Portc.4
Config Twi = 400000 ' i2c 速度
I2cinit
$lib "i2c_twi.lbx" ' 不使用模擬軟I2C,使用硬TWI
$lib "glcdSSD1306-I2C.lib" ' 用這個特殊的lib覆蓋默認lib
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
' 聲明用于溫度存儲的 RAM
Dim x As string *2 '*/-符號
Dim I2ctemp As byte '溫度存儲
Dim I2ctemp1 As byte
'這里使用軟件模擬 I2C 例程
' 配置要用于I2C總線的引腳
'Config Scl = Portd.2 '串行時鐘SCL
'Config Sda = Portd.3 '串行數(shù)據(jù)SDA
'I2cinit
' 聲明常量 - I2C 芯片地址
Const Ds1621wr = &B10010000 '寫入Ds1621傳感器
Const Ds1621rd = &B10010001 '讀取Ds1621傳感器
Const TH_XIANZI = 100 '上限溫度(達到上限溫度DS1624的TOUT腳輸出高電平)。
Const TL_XIANZI = 85 '下限溫度(達到下限溫度DS1624的TOUT腳輸出低電平)。
'*********************************************************
' 初始化Ds1621
I2cstart '發(fā)送啟動條件
I2cwbyte Ds1621wr '總線主機發(fā)送DS1621地址;R/W=0.
'訪問配置寄存器(&HAC 地址字節(jié))
I2cwbyte &HAC '主機發(fā)送訪問配置命令協(xié)議.
'設(shè)置連續(xù)轉(zhuǎn)換(&H02 命令字節(jié))
I2cwbyte &H02
I2cstop '發(fā)送停止條件
Waitms 25 '停止后等待一段時間
I2cstart ''發(fā)送啟動條件
I2cwbyte Ds1621wr '總線主機發(fā)送DS1621地址;R/W=0.
'訪問TH(&Ha1 命令字節(jié))
I2cwbyte &Ha1 '總線主機發(fā)送訪問TH(高溫)寄存器。命令.
I2cwbyte TH_XIANZI '總線主機發(fā)送限制TH(高溫)寄存器為上限°C的第一個字節(jié)數(shù)據(jù)
I2cwbyte &H00 '總線主機發(fā)送限制TH(高溫)寄存器為上限°C的第二字節(jié)數(shù)據(jù)。
I2cstop
Waitms 25
I2cstart
I2cwbyte Ds1621wr
I2cwbyte &Ha2 '總線主站發(fā)送訪問 TL(低溫)寄存器 命令。
I2cwbyte TL_XIANZI '總線主機發(fā)送TL(低溫)寄存器下限溫度°C的第一個字節(jié)數(shù)據(jù)。
I2cwbyte &H00 '總線主機發(fā)送TL(低溫)寄存器下限溫度°C的第二個字節(jié)數(shù)據(jù).
I2cstop
Waitms 25
I2cstart
I2cwbyte Ds1621wr
I2cwbyte &Hee '總線主機發(fā)送啟動轉(zhuǎn)換T命令協(xié)議。
I2cstop
Waitms 25
'初始化結(jié)束
'********************************************************
'獲取當(dāng)前溫度
Do
I2cstart
I2cwbyte Ds1621wr
I2cwbyte &HAA '讀取溫度(和 HAA 命令字節(jié))
I2cstop
Waitms 25
I2cstart
I2cwbyte Ds1621rd '芯片將提供寄存器內(nèi)容
'I2crbyte I2ctemp , Ack
I2crbyte I2ctemp , Nack
I2cstop
'判斷溫度值正負符號
if i2ctemp<=255 and i2ctemp>=201 then gosub fwd
if i2ctemp>=0 and i2ctemp<=128 then gosub zwd
if i2ctemp=0 then gosub zxz
Waitms 25
gosub xswd:
Waitms 25
Loop
end
'******************************************************
fwd: '計算負溫度值
i2ctemp1=256-i2ctemp
x="-"
return
zwd: '計算正溫度值
i2ctemp1=i2ctemp
x="+"
return
zxz: '零中性值沒有+-屬性
i2ctemp1=i2ctemp
x=" "
return
'********************************************************
xswd: '顯示溫度
Setfont Arial_16x18
Lcdat 1 , 2 ,chr(128);chr(129);chr(130);":"; '顯示“溫度值”字符串。
Lcdat 4, 36 , x; Str(i2ctemp1) ; chr(127);" "; '顯示:溫度值,+、-值符號,攝氏度符號。
Setfont font8x8TT
Lcdat 8 , 16 ,"DS1621_I2C"
return
'******************************************************
$include "../12.font" ' 字體文件
$include "../font8x8TT.font"
|
評分
-
查看全部評分
|