|
哈哈,发一个BASCOM交通灯程序~~
昨晚编写的简单十字路口交通灯,以学校东门的十字路口的交通灯为模板,以实地调查(昨晚)获得的状态转换机制设计。模块化编写,使用LED与LCD双重显示,有倒计时,设东西方向(横向)为主干道。不使用中断,暂时还没有添加掉电保存~~~
添加了版本与版权信息显得正式些~~
$regfile = "m16def.dat"
$crystal = 4000000
'--------------------------------------------------------
' 项目名称:基于主干道的八状态十字路口交通灯
' 版本序列:V1.0
' 创 建 者:白 羽
' 单位信息:物电学院07物本班
' Q Q联系 白羽
' 创键时间:2010.7.14
' 版权信息:任意共享
'--------------------------------------------------------
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2
Config Lcd = 16 * 2
Cls
Cursor Off
'************* IO口初始化 **************
Config Portb = Output
Config Portd = Output
Portb = &HFF
Portd = &HFF
'************* IO口初始化 **************
Declare Sub Show_time(byval Longth As Byte) '函数声明
'******************************************************************
'(
北
| /\ |
| || |
| <=红黄绿 红黄绿 |
| 0 1 2 3 4 5 |
---------- ---------
绿 B
<= 黄 A
红 9
绿 8
西 黄 7 东
红 6
||
\/
---------- ---------
| |
| |
| |
南
灯0 -7 : Pd0 -pd7
灯8 -b : Pb0 -pb3
')
'******************************************************************
'********************* 自 定 义 字 符 (箭 头) *************************
Deflcdchar 0 , 4 , 10 , 17 , 10 , 10 , 10 , 14 , 32 ' 上
Deflcdchar 1 , 32 , 14 , 10 , 10 , 10 , 17 , 10 , 4 ' 下
Deflcdchar 2 , 32 , 4 , 11 , 16 , 11 , 4 , 32 , 32 ' 左
Deflcdchar 3 , 32 , 4 , 26 , 1 , 26 , 4 , 32 , 32 ' 右
Deflcdchar 4 , 32 , 15 , 8 , 11 , 10 , 17 , 10 , 4 ' 左上
Deflcdchar 5 , 4 , 10 , 17 , 10 , 26 , 2 , 30 , 32 ' 左下
Deflcdchar 6 , 16 , 16 , 20 , 26 , 17 , 26 , 4 , 32 ' 右上
Deflcdchar 7 , 32 , 4 , 11 , 16 , 11 , 5 , 1 , 1 ' 右下
'******************************************************************
'################## 以 下 是 主 程 序 ########################
Main:
Do
Gosub Line_straight '横向直行
Show_time 10
Gosub Clean_sign
Gosub Line_temp '缓冲(黄灯)
Show_time 2
Gosub Line_turn_left '横向左拐
Show_time 5
Gosub Clean_sign
Gosub Line_left_temp '缓冲(黄灯)
Show_time 2
Gosub Row_straight '纵向直行
Show_time 5
Gosub Clean_sign
Gosub Row_temp '缓冲(黄灯) '
Show_time 2
Gosub Row_turn_left '纵向左拐
Show_time 5
Gosub Clean_sign
Gosub Row_left_temp '缓冲(黄灯)
Show_time 2
Loop
End
'#####################################################
'################### 以 下 是 子 程 序 #######################
'~~~~~~~~~~~~~~~~~~~ 横 向 直 行 子 程 序 ~~~~~~~~~~~~~~~~~~~~~
Line_straight: '东西方向(横向),直走
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.3 = 0
Portd.6 = 0
Portb.3 = 0
Locate 1 , 1
Lcd "Going "
Locate 1 , 9
Lcd Chr(2) ; Spc(1)
Locate 2 , 9
Lcd Spc(1) ; Chr(3)
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~~ 横 向 左 拐 子 程 序 ~~~~~~~~~~~~~~~~~~~~~
Line_turn_left: '东西方向(横向),左拐
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.3 = 0
Portb.0 = 0
Portb.1 = 0
Locate 1 , 1
Lcd "Going "
Locate 1 , 9
Lcd Spc(1) ; Chr(4)
Locate 2 , 9
Lcd Chr(5) ; Spc(1)
Return
'~~~~~~~~~~~~~~~~~~~~ 纵 向 直 行 子 程 序 ~~~~~~~~~~~~~~~~~~~~
Row_straight: '南北方向(横向),直走
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.5 = 0
Portd.6 = 0
Portb.1 = 0
Locate 1 , 1
Lcd "Going "
Locate 1 , 9
Lcd Spc(1) ; Chr(0)
Locate 2 , 9
Lcd Chr(1) ; Spc(1)
Return
'~~~~~~~~~~~~~~~~~~~ 纵 向 左 拐 子 程 序 ~~~~~~~~~~~~~~~~~~~~~
Row_turn_left: '南北方向(横向),左拐
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.2 = 0
Portd.3 = 0
Portd.6 = 0
Portb.1 = 0
Locate 1 , 1
Lcd "Going "
Locate 1 , 9
Lcd Chr(6) ; Spc(1)
Locate 2 , 9
Lcd Spc(1) ; Chr(7)
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~ 横 向 缓 冲 子 程 序 ~~~~~~~~~~~~~~~~~~~~~
Line_temp:
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.3 = 0
Portd.7 = 0
Portb.9 = 0
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~ 横 向 左 拐 缓 冲 子 程 序 ~~~~~~~~~~~~~~~~~~~
Line_left_temp:
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.4 = 0
Portd.6 = 0
Portb.1 = 0
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~~ 纵 向 缓 冲 子 程 序 ~~~~~~~~~~~~~~~~~~~~~
Row_temp:
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.1 = 0
Portd.3 = 0
Portd.6 = 0
Portb.1 = 0
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~ 纵 向 左 拐 缓 冲 子 程 序 ~~~~~~~~~~~~~~~~~~~~
Row_left_temp:
Portb = &HFF '初始化LED:全灭
Portd = &HFF
Portd.0 = 0
Portd.3 = 0
Portd.6 = 0
Portb.2 = 0
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~~~~~ 倒 计 时 显 示 ~~~~~~~~~~~~~~~~~~~~~~
Sub Show_time(longth As Byte)
While Longth <> 0
Locate 1 , 14
Lcd Longth ; Spc(2)
Wait 1
Decr Longth
Wend
Locate 1 , 14
Lcd Spc(3)
End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'~~~~~~~~~~~~~~~~~~~~ 清 除 方 向 标 志~~~~~~~~~~~~~~~~~~~~~~
Clean_sign:
Locate 1 , 1
Lcd "Waiting"
Locate 1 , 9
Lcd "**"
Locate 2 , 9
Lcd "**"
Return
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|