本文章是51单片机过程当中实验报告,自己进行学习和补充
一、实验目的
1、了解外部中断原理;
2、设置外部中断相关的特殊功能寄存器;
3、设计单片机外部中断应用系统。
二、实验内容
实验任务:交通灯控制系统设计
要求:正常情况下,按下表显示,当有警车出现时,东西向,南北向均为红灯,持续10S又恢复正常情况。
方 向 | 东西向 | 南北向 | ||||
灯 | 红 | 黄 | 绿 | 红 | 黄 | 绿 |
对应引脚 | P1.0 | P1.1 | P1.2 | P1.5 | P1.6 | P1.7 |
10S | 亮 | 灭 | 灭 | 灭 | 灭 | 亮 |
3S | 灭 | 闪烁 | 灭 | 灭 | 闪烁 | 灭 |
10S | 灭 | 灭 | 亮 | 亮 | 灭 | 灭 |
循环进行。用P3.2口为低电平来模拟警车到来。
三、实验原理
东西和南北各由一组三色交通灯来控制。分析可知,当东西向为绿灯通行时,南北向必须为红灯禁行;绿灯结束后,东西南北都进入黄灯闪烁等待状态,当东西向红灯;黄灯结束后,南北变为红灯禁行,南北向变为绿灯通行;南北向绿灯结束后,进入黄灯闪烁等待状态,东西向红灯,如此循环。
电路原理图见图2-3
图2-3基于51单片机的仿真原理图
六、实验程序
#include <REGX51.H>
void delay(int z)
{
int m,s;
for(m=z;m>0;m--)
for(s=0;s<921;s++);
}
//中断设计
void lnit()
{
IT0=1;
EX0=1;
// IT1=1;
// EX1=1;
EA=1;
}
int main(void)
{
char blink;
lnit();
while(1)
{
//东西红灯亮,南北绿灯亮高电平点亮
P1=0x81;
delay(1662);
//黄灯闪烁三下
while(blink<3)
{
P1=0x42;
delay(60);
P1=0x00;
delay(60);
blink ++;
}
//东西绿灯亮,南北红灯亮
P1=0x24;
delay(1662);
//黄灯闪烁三下
while(blink<3)
{
P1=0x42;
delay(60);
P1=0x00;
delay(60);
blink ++;
}
}
}
void int0() interrupt 0
{
unsigned char red;
red=P1;
P1=0x21;
delay(1667);
P1=red;
}
七、实验程序
1.东西红灯亮,南北绿灯亮持续十秒。具体见图3-7
图3-7-1仿真结果
2.东西绿灯亮,南北红灯亮持续十秒。具体见图3-7
图3-7-2仿真结果
2.东西绿灯亮,南北红灯亮持续十秒。具体见图3-7
图3-7-3仿真结果