⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20+adc中断lcd显示.bas

📁 ATmega16的ADC应用代码 使用BASCOM-AVR编译
💻 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 + -