📄 ds18b20+adc中断lcd显示.bas
字号:
' 入门例子]ADC中断LCD显示在PROTEUS6.9sp5仿真中通过
'名 称 : 入门例子]ADC中断LCD显示.bas
'目 的 : ADC中断LCD显示在PROTEUS6.9sp5仿真中通过
'目 标 芯 片 : Mega16
'试 验 环 境 : mega16_PROTEUS6.9sp5仿真
'编 译 环 境 : BASCOM-AVR 1.11.8.1 DEMO
'------------------------------------------------------------------------------
$regfile = "m16def.dat" ' specify the used micro
$crystal = 1000000 ' used crystal frequency
$baud = 9600
' use baud rate
Config 1wire = Porta.0 ' default use 40 for the frame space
Config Adc = Single , Prescaler = Auto ' Reference = Internal
Dim W1 As Long , Channe1 As Byte , V1 As String * 16
' Enable Interrupts
' Enable Adc
'On Adc Adc_isr
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Declare Sub Ds18b20(i As Byte , C(2) As Byte , T As Word , Wendu As Single)
Deflcdchar 1 , 4 , 10 , 17 , 4 , 31 , 2 , 4 , 8 '自定义中文字符"今"
Deflcdchar 2 , 31 , 4 , 31 , 4 , 12 , 10 , 18 , 17 '自定义中文字符"天"
Deflcdchar 3 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 '自定义中文字符"℃"
Dim I As Byte
Dim C(2) As Byte
Dim T As Word
Dim Wendu As Single
Cls
Cursor Off
Channe1 = 1
Do
Call Ds18b20(i , C(2) , T , Wendu )
Start Adc
W1 = Getadc(channe1)
W1 = W1 * 256
W1 = W1 / 1023
V1 = Str(w1) ' 数字转换为字符串
V1 = Format(v1 , "0.00")
'确定小数点
Locate 1 , 1 : Lcd "Ch " ; Channe1 ; " val " ; V1 ; "V" '打印模拟值
Loop
End
'Adc_isr:
' W1 = Getadc(channe1)
' W1 = W1 * 256
' W1 = W1 / 1023 '将10位A/D转换器的值转化为十进制
'Return
Sub Ds18b20(i As Byte , C(2) As Byte , T As Word , Wendu As Single)
1wreset '单总线初始化
1wwrite &HCC '主机向单总线器件发送跳过ID码指令
1wwrite &H44 '主机向单总线发送温度转换指令
Waitms 800 '精度不同时间也不同,9位93.75ms,10位187.5ms,11位375ms,12位750ms
1wreset '单总线初始化
1wwrite &HCC '主机向单总线器件发送跳过ID码指令
1wwrite &HBE '主机向单总线发送读取RAM指令
For I = 1 To 2
C(i) = 1wread() '将用数组C(i)保存温度数据的前两个字节
Next
1wwrite &HCC
'256*0.0625=16
T = C(2) * 255 '16℃以内的温度值放在C(1)中, 每16℃一个进位放在C(2)中 ,
T = T + C(1)
Waitms 100
'Cls '显示温度值
'Locate 1 , 5
'Lcd "DS18B20"
Locate 2 , 1
Lcd Chr(1) ; Chr(2) ; " T="
Locate 2 , 6
If C(2) > 15 Then '负温度判断
T = Not T
T = T + 1
Lcd "-" ;
Else
Lcd "+" ;
End If
Wendu = T * 0.0625 '精度为0.0625
Lcd Wendu ; Chr(3) ; "C"
Waitms 100
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -