![]() |
|
||||||||||||||
| | 网站首页 | 关于我们 | 单片机培训 | 产品展示 | 产品开发 | 单片机解密 | 技术文章 | 下载中心 | 留言薄 | 技术论坛 | 联系我们 | | ||
|
||
|
|||||
| HT48 & HT46 交通信号灯的实现 | |||||
| HT48 & HT46 交通信号灯的实现 | |||||
作者:佚名 文章来源:本站原创 点击数: 更新时间:2007-10-16 ![]() |
|||||
|
HT48 & HT46 交通信号灯的实现 介绍 本应用范例用红、绿、黄三个发光二极管来模拟十字路口的交通信号灯。开始时,R1 和G2 点 亮,延时一段时间,绿灯闪烁几下后变为黄灯,再经过一段时间,变为R2 和G1 点亮。这种循环依 照这个规律一直进行下去,就好象十字路口的信号灯一样。其红绿灯点亮的时间可以根据不同的需 要来设置。 硬件电路图 此电路用PA 口的PA0-PA2 和PA4-PA6 引脚分别连接一组红绿灯,作为十字路口的交通信号灯。 其功能将在下面的程序中详细说明。具体的电路图如下: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 程序清单 include ht48r10a-1.inc ;------------------------------- data .section 'data' ;数据段 count1 db ? ;延时变量1 count2 db ? ;延时变量2 count3 db ? ;延时变量3 flash db ? ;LED闪烁控制寄存器 rglight db ? ;LED控制寄存器 ;------------------------------- code .section at 0 'code' ;程序段 org 00h ;程序初始入口地址 jmp start HT48 & HT46 交通信号灯的实现 start: ;程序开始 mov a,0 ;(1) ; mov pac,a ;设置PA口为输出口 mov pa,a ;清除PA口 ;------------------------------- loop: ;LED灯循环 mov a,0 ; mov tblp,a ;表格指针初始化 tabrdl rglight ;(2) ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ;(3) ; mov pa,a ;将LED寄存器的内容输出到PA口 call delayl ;(4) ;调用延时子程序delayl inc tblp ;(5) ;递增表格指针 mov a,6 ; mov flash,a ;设置LED闪烁控制寄存器的值为6次 flashlamp: ;LED闪烁循环 tabrdl rglight ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ; mov pa,a ;将LED寄存器的内容输出到PA口 call delays ;(6) ;调用延时子程序delays inc tblp ;递增表格指针 sdz flash ;检查LED闪烁是否结束 jmp flashlamp ;闪烁没有结束,则跳至LED闪烁循环 tabrdl rglight ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ; mov pa,a ;将LED寄存器的内容输出到PA口 call delaym ;(7) ;调用延时子程序delaym inc tblp ;递增表格指针 ;-------------------------------; tabrdl rglight ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ; mov pa,a ;将LED寄存器的内容输出到PA口 call delayl ;调用延时子程序delayl inc tblp ;递增表格指针 mov a,6 ;设置LED闪烁次数 mov flash,a ;将闪烁次数存入LED闪烁控制寄存器 flash2: ;LED闪烁循环2 tabrdl rglight ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ; mov pa,a ;将LED寄存器的内容输出到PA口 call delays ;调用延时子程序delays inc tblp ;递增表格指针 sdz flash ;检查LED闪烁是否结束 HT48 & HT46 交通信号灯的实现 jmp flash2 ;闪烁没有结束,则跳至LED闪烁循环2 tabrdl rglight ;读取最后一页的表格内容,放入LED控制寄存器 mov a,rglight ; mov pa,a ;将LED寄存器的内容输出到PA口 call delaym ;调用延时子程序delaym jmp loop ; ;------------------------------- delayl proc ;延时子程序delayl mov a,0fh mov count1,a mov count2,a mov count3,a d1: sdz count3 jmp d1 sdz count2 jmp d1 sdz count1 jmp d1 ret delayl endp ;------------------------------- delaym proc ;延时子程序delaym mov a,07h mov count1,a mov a,0ffh mov count2,a mov count3,a d2: sdz count3 jmp d2 sdz count2 jmp d2 sdz count1 jmp d2 ret delaym endp ;------------------------------- delays proc ;延时子程序delays mov a,0ffh mov count1,a mov count2,a d3: sdz count2 jmp d3 sdz count1 HT48 & HT46 交通信号灯的实现 jmp d3 ret delays endp ;------------------------------- org 300h ;LED表格 dc 0ebh,0fbh,0ebh,0fbh,0ebh,0fbh,0ebh,0dbh dc 0beh,0bfh,0beh,0bfh,0beh,0bfh,0beh,0bdh end 程序说明 程序开始(1)先设置输入/输出控制寄存器,用来确定端口是作为输入还是作为输出使用。在 本范例中,设置PAC 为0,即PA 口作为输出口使用。因为红绿灯的点亮条件是固定的,所以我们 可以利用查表的方法来确定PA 口的值,就象(2)所做的那样,而这个表格是由我们事先建立的。 TABRDL 指令用来读取最后一页表格内容,这里ROM 的最大地址是03FFH,因此最后一页是从 0300H 开始的。在(5)中,表格指针被递增。在(2)中,LED 显示寄存器从表格获得数据,并将 这个数据送至输出口进行LED 显示。由于不同的LED 点亮的时间有所不同,因此需要不同的延时, 程序中总共有三个不同的延时子程序,如程序中所示(4)delayl、(7) delaym、(6 ) delays。 |
|||||
| 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| HT48 & HT46 MCU I / O 口的 HT MCU查表指令的使用 HT48 & HT46 MCU 用软件执行 HT48 & HT46 MCU 与HT93LC46 HT MCU 软件堆栈的应用 |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | | |||
|