找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3756|回复: 0
打印 上一主题 下一主题
收起左侧

基于BASCOM主干道的八状态十字路口交通灯

[复制链接]
跳转到指定楼层
楼主
ID:71259 发表于 2014-12-29 02:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哈哈,发一个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
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表