|
哈哈,發一個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
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|