bascom-avr温控加仿真,适合单片机学习,小项目制作
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- $regfile = "m32def.dat"
- $crystal = 8000000
- $baud = 9600
- Dim Ad As Word , N As Single , V As String * 5 , F As Byte , G As Byte , Spt As Eram Byte , Sp1 As Byte , Flag As Bit
- Dim Flag2 As Bit , Sll As Eram Byte , Slh As Eram Byte , Hy As Eram Byte , Md As Eram String * 5 , Flag3 As Bit , Flag4 As Bit
- Dim Md1 As String * 5 , Sll1 As Byte , Slh1 As Byte , Hy1 As Byte , Alh As Eram Byte , All As Eram Byte , Alh1 As Byte , All1 As Byte
- Dim Hy2 As Byte , Sp2 As Byte , Md2 As String * 5 , Alh2 As Byte , All2 As Byte , V1 As Byte , Ma As Byte , Mb As Byte , Sll2 As Byte , Slh2 As Byte
- Config Debounce = 30
- Config Porta.4 = Output 'haeter
- Config Porta.5 = Output 'colling
- Config Porta.1 = Output 'alarm
- Config Pinb.7 = Input 'key security
- Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
- Config Lcd = 16 * 2
- Config Adc = Single , Prescaler = Auto , Reference = Off
- Portb = 255 'pullup internal
- Start Adc
- Deflcdchar 0 , 4 , 14 , 4 , 4 , 4 , 4 , 4 , 4
- Deflcdchar 1 , 4 , 14 , 4 , 4 , 4 , 4 , 4 , 4
- Deflcdchar 2 , 4 , 4 , 4 , 4 , 4 , 14 , 4 , 4
- Cursor Off
- Print "welcom to control temperature"
- '#############################################################
- Do
- Debounce Pinb.0 , 0 , L1 , Sub 'mode
- Debounce Pinb.2 , 0 , L2 , Sub 'right,down
- Debounce Pinb.4 , 0 , L3 , Sub 'top
- Debounce Pinb.6 , 0 , L4 , Sub 'setup
- Ad = Getadc(0)
- N = Ad * 0.14663
- V = Fusing(n , "#.##") 'temperature by format string
- Hy2 = Hy
- Sp2 = Spt 'sp
- Md2 = Md
- Alh2 = Alh
- All2 = All
- V1 = Val(v) 'convert format to byte
- If F = 0 Then
- Cls
- Lcd "T=" ; V ; "C"
- Locate 1 , 11
- Lcd "sp=" ; Sp2
- Locate 2 , 1
- Lcd "md=" ; Md2 ; " " ; "hy=" ; Hy2
- If Porta.1 = 1 Then
- Locate 2 , 14
- Lcd "alm"
- End If
- Waitms 70
- End If
- If V1 > Alh2 Or V1 < All2 Then
- Porta.1 = 1
- Else
- Porta.1 = 0
- End If
- Hy2 = Hy
- Hy2 = Hy2 / 2
- Ma = Sp2 + Hy2
- Mb = Sp2 - Hy2
- If Md2 = "HT" Then 'main
- Porta.5 = 0
- If V1 =< Mb Then
- Porta.4 = 1
- Elseif V1 >= Ma Then
- Porta.4 = 0
- End If
- Elseif Md2 = "CL" Then
- Porta.4 = 0
- If V1 >= Ma Then
- Porta.5 = 1
- Elseif V1 =< Mb Then
- Porta.5 = 0
- End If
- End If
- Loop
- End
- '#############################################################
- L1: 'intro mode
- Sll2 = Sll
- Slh2 = Slh
- Print "tempreature=" ; V ; "setpoint=" ; Sp2 ; "mode=" ; Md2 ; "hystrisis" ; Hy2
- Print "alarm high=" ; Alh2 ; "alarm low=" ; All2 ; "setpoint high=" ; Slh2 ; "setpoint low=" ; Sll2
- If Flag = 0 And Flag2 = 0 Then
- Incr F
- End If
- If F = 1 And Flag = 0 And Flag2 = 0 Then
- Cls
- Locate 1 , 5
- Lcd "setpoint" 'mode SP
- Elseif F = 2 And Flag = 0 And Flag2 = 0 Then
- Cls
- Locate 1 , 2
- Lcd "configuration" 'mode CFG
- Elseif F = 3 And Flag = 0 And Flag2 = 0 Then
- F = 0 'mode normal
- End If
- Return
- '#############################################################
- L2:
- If F = 2 And Flag2 = 1 And Flag3 = 0 Then 'right motion to CFG
- If G = 0 Then
- Cls
- Locate 1 , 1
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "SLL"
- Locate 2 , 5
- Lcd "SLH"
- Locate 2 , 10
- Lcd "MD"
- Locate 2 , 14
- Lcd "HY"
- G = 5
- Elseif G = 5 Then
- Cls
- Locate 1 , 5
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "SLL"
- Locate 2 , 5
- Lcd "SLH"
- Locate 2 , 10
- Lcd "MD"
- Locate 2 , 14
- Lcd "HY"
- G = 10
- Elseif G = 10 Then
- Cls
- Locate 1 , 10
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "SLL"
- Locate 2 , 5
- Lcd "SLH"
- Locate 2 , 10
- Lcd "MD"
- Locate 2 , 14
- Lcd "HY"
- G = 15
- Elseif G = 15 Then
- Cls
- Locate 1 , 14
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "SLL"
- Locate 2 , 5
- Lcd "SLH"
- Locate 2 , 10
- Lcd "MD"
- Locate 2 , 14
- Lcd "HY"
- G = 20
- Elseif G = 20 Then
- Cls
- Locate 1 , 1
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "ALH"
- Locate 2 , 6
- Lcd "ALL"
- Locate 2 , 13
- Lcd "bake"
- G = 25
- Elseif G = 25 Then
- Cls
- Locate 1 , 6
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "ALH"
- Locate 2 , 6
- Lcd "ALL"
- Locate 2 , 13
- Lcd "bake"
- G = 30
- Elseif G = 30 Then
- Cls
- Locate 1 , 13
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "ALH"
- Locate 2 , 6
- Lcd "ALL"
- Locate 2 , 13
- Lcd "bake"
- G = 0
- End If
- Elseif F = 2 And Flag2 = 1 And Flag3 = 1 Then 'intro md
- If Flag4 = 0 Then
- Cls
- Locate 1 , 1
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "heat"
- Locate 2 , 9
- Lcd "cold"
- Flag4 = 1
- Elseif Flag4 = 1 Then
- Cls
- Locate 1 , 9
- Lcd Chr(0) ; Chr(0) ; Chr(0)
- Locate 2 , 1
- Lcd "heat"
- Locate 2 , 9
- Lcd "cold"
- Flag4 = 0
- End If
- Elseif F = 1 And Flag = 1 Then 'down
- Decr Sp1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "setpoint=" ; Sp1
- Elseif F = 7 Then
- Decr Sll1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "sp level low=" ; Sll1
- Elseif F = 8 Then
- Decr Slh1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "splevel high=" ; Slh1
- Elseif F = 9 Then
- Decr Hy1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "hystrisis=" ; Hy1
- Elseif F = 11 Then
- Decr Alh1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "alarm high=" ; Alh1
- Elseif F = 12 Then
- Decr All1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "alarm low=" ; All1
- End If
- Return
- '##########################################################
- L3: 'top
- If F = 1 And Flag = 1 Then
- Incr Sp1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "setpoint=" ; Sp1
- Elseif F = 7 Then
- Incr Sll1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "sp level low=" ; Sll1
- Elseif F = 8 Then
- Incr Slh1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "splevel high=" ; Slh1
- Elseif F = 9 Then
- Incr Hy1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "hystrisis=" ; Hy1
- Elseif F = 11 Then
- Incr Alh1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "alarm high=" ; Alh1
- Elseif F = 12 Then
- Incr All1
- Cls
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "alarm low=" ; All1
- End If
- Return
- '##########################################################
- L4: 'setup
- If F = 1 And Flag = 0 Then
- Cls
- Lcd "please change sp"
- Locate 2 , 1
- Lcd "by key top/down"
- Wait 1
- Cls
- Sp1 = Spt
- Locate 1 , 7
- Lcd Chr(1) ; Chr(2)
- Locate 2 , 1
- Lcd "setpoint=" ; Sp1
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
bascon温控加仿真.zip
(327.63 KB, 下载次数: 20)
|