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

📄 8.1.bas

📁 1602的流水灯等程序 用BASCOM-AVR语言 ATmega16平台
💻 BAS
字号:
'***********************************************************************
'本程序实现红外遥控流水灯花样,LCD显示时间,当时温度 ,按键实验和ADC测量
'程序语言:BASCOM-AVR
'编译版本BASCOM-AVR 1.11.8.5
'程序编译、仿真通过
'***********************************************************************
$regfile = "m16def.dat"                                    ' 定义目标单片机是ATmega88
$crystal = 8000000
$baud = 9600
'/////LCD1602 定义//////// ////////
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
Dim S As String * 16
'//////////定时器中断定义//////////
Config Timer2 = Timer , Prescale = 1024                     ' 定义单片机时钟周期是1000000Hz
Enable Interrupts                                           '允许全局中断                                               'timer0中断溢出时间=200ms
Enable Timer2
On Timer2 Timer2_isr
Timer2 = &H00
'////////////////////////端口定义///////////////////////////
Config Portc = Output
Config 1wire = Porta.0
Config Rc5 = Pina.3
'Config Adc = Single , Prescaler = Auto ,
'Dim W1 As Long , Channe1 As Byte , V1 As String * 10
'///////////////////////////////////////////变量定义////////////////////////////
Dim N As Byte                                               '流水灯花样控制相关
Dim M As Byte
Dim A As Byte : A = 0
Dim Tcounter As Byte : Tcounter = 0
'////////////////////温度变量相关///////////////////////
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           '自定义中文字符"℃"

Declare Sub Ds18b20(i As Byte , C(2) As Byte , T As Word , Wendu As Single)

Dim I As Byte
Dim C(2) As Byte
Dim T As Word
Dim Wendu As Single
 Cls
   Cursor Off

Do

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)

 Call Ds18b20(i , C(2) , T , Wendu )

     Incr A

   If A <= 4 Then
    On A Gosub Huayang0 , Huayang1 , Huayang2 , Huayang3 , Huayang4
        Else
        A = 0

    End If
 Loop
 End













































'//////////////定时器2中断服务程序控制花样运行方式///////////////

Timer2_isr:
Timer2 = &H00
  Tcounter = Tcounter + 1

  If Tcounter > 100 Then
       If N = 7 Then
      M = 1
  Else
  If N = 0 Then M = 0
 End If

  If M = 0 Then
     Incr N
             Else
               If M = 1 Then
                 Decr N
               End If
               Enable Interrupts
     End If
     Tcounter = 0
     End If

  Return

'///////////////花样//////////////////
 Huayang0:

Select Case N
      Case 0
          Portc = &HFE
      Case 1
          Portc = &HFD
      Case 2
           Portc = &HFB
      Case 3
         Portc = &HF7
      Case 4
          Portc = &HEF
      Case 5
         Portc = &HDF
      Case 6
           Portc = &HBF
      Case 7
         Portc = &H7F
   End Select

Return

 Huayang1:


Select Case N
     Case 0
          Portc = &B00000001
      Case 1
          Portc = &B00000010
      Case 2
          Portc = &B00000100
      Case 3
          Portc = &B00001000
      Case 4
          Portc = &B00010000
      Case 5
          Portc = &B00100000
      Case 6
          Portc = &B01000000
      Case 7
          Portc = &B10000000
End Select

Return

Huayang2:

Select Case N
   Case 0
  Portc = &B00111111
  Case 1
  Portc = &B11001111
  Case 2
  Portc = &B11110011
  Case 3
Portc = &B11111100
  Case Else
   N = 0
    End Select
Return
Huayang3:

Select Case N
   Case 0
       Portc = &B01111110
 '
 Case 1
   Portc = &B10111101
   Case 2
    Portc = &B11011011
 Case 3
    Portc = &B11100111
  Case 4
   Portc = &B11011011
  Case 5
   Portc = &B10111101
  Case Else
   N = 0
   End Select
   Return


Huayang4:

Select Case N
   Case 0
    Portc = &B10101010
    Case 1
    Portc = Not Portc
    Case Else
    N = 0
    End Select
      Return

Sub Ds18b20(i As Byte , C(2) As Byte , T As Word , Wendu As Single)
T = C(2) * 255                                              '16℃以内的温度值放在C(1)中, 每16℃一个进位放在C(2)中 ,
T = T + C(1)

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 + -