交通信号灯控制系统(8051单片机中断实验)

实验设计图(proteus 7.8仿真):

 

 

 七段数码管有四个引脚    从左到右分别记为 a b c d    引脚输入电平与显示的数字对应关系为:

a b c d    显示

0 0 0 0     0

0 0 0 1     1

0 0 1 0     2

0 1 0 0     3

1 0 0 0     4

......

其实就是把四个引脚看成16进制数的一位显示出来,如果按照图中所画,想要改变数码管的显示数字,只需把一个16进制数移到P0口

MOV P0,#044H             ;数码管显示44

MOV P0,   #0ABH            ;数码管显示AB       注意:汇编语言中16进制数如果以字母开头必须在前面再加一个0

此处顺便说一下,P0口想要输出电平,必须外接上拉电阻,上拉电阻就是一个电源串联一个电阻。

关于代码,我们重点放在与书上不同的地方。 

ORG   0000H
LJMP  MAIN
ORG   0003H
LJMP  abc0     ;书上用的标号是INT0  但是proteus7.8不能用那个标号   可能是命名上的冲突吧
ORG   0013H
LJMP  abc1
ORG   0030H


MAIN:  SETB   PX0        
       MOV    TCON,#00H
       MOV    IE,#85H
LOOP:  MOV  P1,#0F3H
       MOV  R1,#44       ;我循环次数改为了原来的一办  下面的也都是
AP1:   LCALL    DELAY    ;既然循环改为一办,那么延时程序就应该为原来的2倍   
       MOV A,R1          ;把R1的数字显示到数码管上即可 ,先移到A中
       LCALL SHOW        ;SHOW函数实现将A中的数字显示到数码管上
       DJNZ     R1,AP1
       MOV      R1,#3
AP2:   CPL   P1.2
       LCALL   DELAY
       MOV A,R1
       LCALL SHOW
       DJNZ   R1,AP2
       MOV   P1,#0F5H
       MOV    R1,#3
AP3:   LCALL   DELAY
       MOV A,R1
       LCALL SHOW
       DJNZ    R1,AP3
       MOV     P1,#0DEH
       MOV     R1,#24
BP1:   LCALL    DELAY
       MOV A,R1
       LCALL SHOW
       DJNZ     R1,BP1
       MOV      R1,#3
BP2:   CPL    P1.5
       LCALL   DELAY
       MOV A,R1
       LCALL SHOW
       DJNZ    R1,BP2
       MOV     P1,#0EEH
       MOV     R1,#3
BP3:   LCALL    DELAY
       MOV A,R1
       LCALL SHOW
       DJNZ     R1,BP3
       SJMP     LOOP

ORG 0200H
abc0:                      ;中断1
	   PUSH    P1
       PUSH    04H         ;注意这块与书上不同  必须保存R4 R5 R6的值 也就是04H 05H 06H
       PUSH    05H         ;不写PUSH R5是因为压栈指令只能加直接地址
       PUSH    06H
       MOV    P1,#0F6H    
       MOV    R2,#15	  
DELAY0:	
       LCALL    DELAY
       MOV A,R2
       LCALL SHOW
       DJNZ     R2,DELAY0

       POP    06H
       POP    05H
       POP    04H
       POP    07H         ;这里也和书上不一样 POP P1不能把 数据弹到P1  所以先弹到07H 里面
       MOV    P1,07H      
       RETI
       ORG      0300H
abc1:  CLR     EA         ;中断2
       PUSH    P1
       PUSH    04H
       PUSH    05H
       PUSH    06H
       SETB    EA
       JNB     P3.0,AP0
       MOV     P1,#0F3H
       SJMP    DEL1

AP0:   JNB     P3.1,EXIT
       MOV     P1,#0DEH
DEL1:  MOV     R3,#15
NEXT:  LCALL    DELAY
       MOV A,R3
       LCALL SHOW
       DJNZ     R3,NEXT
EXIT:  CLR    EA
       POP    06H
       POP    05H
       POP    04H
       POP    07H
       MOV    P1,07H
       SETB   EA
       RETI           ;中断返回
       ORG    0350H
DELAY: MOV    R4,#20  ;循环次数改为了原来的2倍
LP1:   MOV    R5,#50
LP2:   MOV    R6,#248
       NOP
LP3:   DJNZ    R6,LP3
       DJNZ    R5,LP2
       DJNZ    R4,LP1
       RET

                         ;A中的数字是16进制的    红绿灯倒计时可没有1A  应变为26 
SHOW:      MOV B,#10         ;变10进制要除以10  商为第低位   余数为第高位
	   DIV AB            ;A/B 商放到A中  余数放到B中
	   MOV R7,B          
	   SWAP A            ;A的高四位与低四位交换 
	   ADD A,R7          ;商与余数合起来就是所求数
	   MOV P0,A          ;显示到数码管上
	   RET               ;子程序返回
       
END    ;汇编语言结束标志

     

老铁点个赞~~~ 

 

为了在Windows安装ADB工具,你可以按照以下步骤进行操作: 1. 首先,下载ADB工具包并解压缩到你自定义的安装目录。你可以选择将其解压缩到任何你喜欢的位置。 2. 打开运行窗口,可以通过按下Win+R键来快速打开。在运行窗口中输入"sysdm.cpl"并按下回车键。 3. 在系统属性窗口中,选择"高级"选项卡,然后点击"环境变量"按钮。 4. 在环境变量窗口中,选择"系统变量"部分,并找到名为"Path"的变量。点击"编辑"按钮。 5. 在编辑环境变量窗口中,点击"新建"按钮,并将ADB工具的安装路径添加到新建的路径中。确保路径正确无误后,点击"确定"按钮。 6. 返回到桌面,打开命令提示符窗口。你可以通过按下Win+R键,然后输入"cmd"并按下回车键来快速打开命令提示符窗口。 7. 在命令提示符窗口中,输入"adb version"命令来验证ADB工具是否成功安装。如果显示版本信息,则表示安装成功。 这样,你就成功在Windows安装ADB工具。你可以使用ADB工具来执行各种操作,如枚举设备、进入/退出ADB终端、文件传输、运行命令、查看系统日志等。具体的操作方法可以参考ADB工具的官方文档或其他相关教程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [windows环境安装adb驱动](https://blog.csdn.net/zx54633089/article/details/128533343)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Windows安装使用ADB简单易懂教程](https://blog.csdn.net/m0_37777700/article/details/129836351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会写代码的孙悟空

赠人玫瑰 手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值