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

📄 mc.bas

📁 AVR单片机驱动LCD显示汉字的实践,在MEGA8上运行.
💻 BAS
📖 第 1 页 / 共 2 页
字号:
'--------------------------------------------------------------
'                 (c) 2003-2004 MC Electronics
'--------------------------------------------------------------
'  file: MC.BAS
'           2004.10.20
'--------------------------------------------------------------

'$sim
'note : tested in PIN mode with 4-bit
'使用AT90S8515芯片
'PA0~PA7用于驱动LCD;
'PB0~PB7用于接受检测信号;
'PD0~PD7用于接受按键输入;
'PC0~PC7用于驱动电或用于LED。

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Rem with the config lcdpin statement you can override the compiler settings

Config Lcd = 16 * 4                                         'Configure Lcd Screen

Config Portb = Output , Portd = Input
Config Portc = Output

Config Watchdog = 2048                                      'reset after 2048 mSec

'定义PB0~7用于接受现场采样输入:
'Pinb.0-缺板信号1;      信号来自生产线入口光电开关触点1
'Pinb.1-缺板信号2;      信号来自生产线入口光电开关触点2
'Pinb.2-310母液缸下限液位; 信号来自310母液缸下限液位开关触点
'Pinb.3-ORP高/低值;     信号来自ORP控制器高/低报警开关触点3
'Pinb.4-酸储罐液位;     信号来自HCL储罐下限液位开关触点
'Pinb.5-电导低值;       信号来自电导率控制器低报警开关触点3
'Pinb.6-母液比重高值;   信号来自比重控制器高报警开关触点3
'Pinb.7-采样管入口流量; 信号来自采样管流量检测开关触点
'定义PD0~7用于接受按键输入:
'Pind.0-加水启动;       信号来自本机按钮开关触点WATER
'Pind.1-加酸启动;       信号来自本机按钮开关触点HAC
'Pind.2-报警应答;       信号来自本机报警应答按钮开关触点ACK(INT0)
'Pind.3-手/自动选择;    "1"--AUTO;"0"--MAN.信号来自手/自动选择按钮(INT1);
'Pind.4-加氧化剂启动;   信号来自本机按钮开关触点OXG及ORP控制器开关触点
'Pind.5-自动加水控制;   信号来自离子浓度控制器副开关触点2
'Pind.6-自动加酸控制;   信号来自电导率控制器副开关触点2
'Pind.7-自动加氧化剂控制;信号来自ORP控制器副开关触点2
'定义PC0~7用于控制输出:
'Pinc.0-加水联锁控制;   串联于比重控制器主开关触点接相端
'Pinc.1-加酸联锁控制;   串联于电导率控制器主开关触点接相端
'Pinc.2-加OXG联锁控制;  串联于ORP控制器主开关触点接相端
'Pinc.3-手动加水控制;   并联于比重控制器主开关触点1
'Pinc.4-手动加酸控制;   并联于电导率控制器主开关触点1
'Pinc.5-手动加氧化剂控制;并联于ORP控制器主开关触点1
'Pinc.6-报警控制;       切短总报警线(另接)
'Pinc.7-空
'Portb = &HFF                                                '置上拉电阻有效
Portd = &HFF                                                '置上拉电阻有效

'程序词典:1.逻辑"0"对应低电平0~2V,RESET设置; 逻辑"1"对应高电平3~5V,SET设置;
'         2.所有继电器线圈在低电平(0~2V)时得电;在高电平(3~5V)时失电.

Declare Sub Updatalcd                                       '定义LCD口扫描子程序
Declare Sub Oklcd                                           '定义LCDOK赋值子程序
Declare Sub Ooflcd                                          '定义LCDOOF赋值子程序
Declare Sub Creatlcd                                        '定义LCD制表子程序
Declare Sub Ackalarm                                        '定义系统报警扫描子程序

'定义各全局变量
Dim Si As Byte , Ctl As Byte , I As Byte , Chkbox As Byte , Point As Byte , Ackdelay As Byte
'SI输入口状态变量;Ctl:控制输入口状态变量;I:全局中间变量;
'CHKBOX:输入口位状态变量;POINT:输入口状态检测指针;ackdelay:系统报警应答延时计数器
Dim Alarm As Byte , Lalarm As Byte                          '
'Alarm:新报警字;"1"时系统报警;Lalarm:原报警字;"1"时系统报警;0~7:
Dim Automan As Bit , Inlock1 As Bit , Inlock2 As Bit , Inlock3 As Bit , Amkey As Byte , 8cake As Byte
'AUTOMAN:操作模式标志"0"为手动;
'INLOCK1:联锁有效操作标志,"1"时联锁,锁定H2O;
'INLOCK2:联锁有效操作标志,"1"时联锁;锁定HAC;
'INLOCK3:联锁有效操作标志,"1"时联锁;锁定OXG;
'AMKEY:操作模式按钮除颤标志,"0"为模式可变;
'8cake:

Dim Cnv As String * 2                                       '定义电导率显示内容变量
Dim Hac As String * 4                                       '定义酸显示内容变量
Dim Th As String * 2                                        '定义酸罐液位显示内容变量
Dim Orp As String * 2                                       '定义ORP显示内容变量
Dim Oxg As String * 4                                       '定义氧化剂显示内容变量
Dim Tx As String * 2                                        '定义中限液位显示内容变量
Dim Sg As String * 2                                        '定义310罐液位显示内容变量
Dim H2o As String * 4                                       '定义水泵状态显示内容变量
Dim F1 As String * 2                                        '定义PCB供板显示内容变量1
Dim Am As String * 2                                        '定义手/自动显示内容变量
Dim Flw As String * 4                                       '定义检测液流量显示内容变量
Dim F2 As String * 2                                        '定义PCB供板显示内容变量2
'所有显示变量赋值长度必须在串长之内.

Config Lcd = 20 * 4                                         'configure lcd screen

Start Watchdog                                              'start the watchdog timer

'主程序开始
Flw = "OK "
Automan = 1                                                 '置为自动
Am = "A"
Amkey = 0
Set Portc.6                                                 '停报警,报警控制位置"1"
Lalarm = 0

Call Creatlcd                                               '建立屏幕列表
Call Oklcd                                                  '显示变量赋值
Call Ooflcd
Call Updatalcd                                              '完成显示

Do
Reset Watchdog
Alarm = 0                                                   '停报警
If Inlock1 = 0 Then                                         '如上周期连锁标志清零
   Reset Portc.0                                            '预切除连锁,常开闭合,允许H2O投料                                             '
   If Inlock2 = 0 Then                                      '如上周期连锁标志清零
      Reset Portc.1                                         '预切除连锁,常开闭合,允许HCL投料
   End If
   If Inlock3 = 0 Then                                      '如上周期连锁标志清零
      Reset Portc.2                                         '预切除连锁,常开闭合,允许YH310投料
   End If
End If
Inlock1 = 0                                                 '清H2O连锁标志,常开闭合,允许投料
Inlock2 = 0                                                 '清HCL连锁标志,常开闭合,允许投料
Inlock3 = 0                                                 '清OXG连锁标志,常开闭合,允许投料

Si = Pinb And &HFF                                          '读入现场信号,被置"0"位即有输入
If Si.7 = 0 Then                                            '采样管无流量
   Set Alarm.0
   Inlock1 = 1                                              '设H2O联锁标记
   Inlock2 = 1                                              '设HCL联锁标记
   Inlock3 = 1                                              '设OXG联锁标记
   Set Portc.0                                              '连锁失电,常开断开,禁止H20投料
   Set Portc.1                                              '连锁失电,常开断开,禁止HCL投料
   Set Portc.2                                              '连锁失电,常开断开,禁止YH310投料
   Flw = "Brk"                                              '文字报警
Else
   Reset Alarm.0
   Flw = "OK "                                              '文字报警
End If

If Si.6 = 0 Then                                            '离子浓度过高
   Set Alarm.1
   Sg = "Hi"                                                '置报警
Else
   Reset Alarm.1
   Sg = "OK"                                                '停报警
End If
If Si.5 = 0 Then                                            '电导率过高
   Set Alarm.2                                              '置报警
   Cnv = "Hi"
Else
   Reset Alarm.2                                            '停报警
   Cnv = "OK"
End If

If Si.4 = 0 Then                                            'HCL储罐液位低
   Set Alarm.3                                              '置报警
   Th = "Lw"
   Inlock2 = 1                                              '置连锁标志,禁止HCL投料
   Set Portc.1                                              '连锁失电,常开断开,禁止投料
Else
   Reset Alarm.3                                            '停报警
   Th = "OK"
End If

Reset Watchdog
If Si.3 = 0 Then                                            'ORP过高
   Set Alarm.4                                              '置报警
   Orp = "Hi"
Else
   Reset Alarm.4                                            '停报警
   Orp = "OK"
End If

If Si.2 = 0 Then                                            'YH310储罐液位低
   Set Alarm.5
   Set Portc.2
   Inlock3 = 1                                              '置连锁标志,禁止YH310投料
   Tx = "Lw"                                                '连锁失电,常开断开,禁止YH310投料
Else
   Reset Alarm.5
   Tx = "OK"
End If

If Si.1 = 0 Then                                            'PCB缺板检测1
   If Si.0 = 0 Then                                         'PCB缺板检测2
      If 8cake = 0 Then
         Set Portc.2                                        'PCB断供,连锁失电,常开断开,禁止加310
         Inlock3 = 1                                        '置连锁标志,禁止YH310投料
      Else
         Waitms 300                                         '延时
         Decr 8cake
      End If
      F2 = "Br"
   Else
      F2 = "OK"
      8cake = &HFF
   End If
   F1 = "Br"
Else
   F1 = "OK"
   If Si.0 = 0 Then
      F2 = "Br"
   Else
      F2 = "OK"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -