C51单片机综合性仿真实验 1 简易交通灯系统

实验目的:

掌握输出、延时 delay LED 、数码管的使用方法。

实验设备及软件:

计算机; Keil Proteus ,单片机小精灵。

实验内容:

交通灯是人们生活中不可或缺的重要组成部分,意义重大。刚入门单片机几天,凭借最
简单的控制技术,也能够设计出简易交通灯。

实验要求:

1. 东西、南北方向,各有 3 LED ,分别是红黄绿。
2. 先红灯 10s ,然后绿灯 7s ,最后黄灯闪烁 3s
3. 通过 BCD 数码管,显示整个周期 20s 的倒计时。
4. 只能通过软件 delay 延时,不能使用硬件定时器。

相关知识:

1.Keil Proteus 的使用方法。
2. 单片机的输出。
3.LED 控制。
4. 数码管控制。
5.delay 软件延时。

预备知识:

1.Keil Proteus 的使用方法。
2.C 语言、单片机引脚输出、 delay 软件延时。

实验步骤:

1. 绘制 Proteus 电路图,添加 51 单片机、 LED 、数码管。
2. 新建 Keil 工程,编写程序,生成 Hex ,控制交通灯。
3.Hex 加载到电路中,运行。

 代码展示:

#include <reg51.h>
#include <stdio.h>

sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;

sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;

char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(int ms)		//ÑÓʱ³ÌÐò
{
	int j,k;
	for(j=0;j<ms;j++)			//ÑÓʱms
	   for(k=0;k<124;k++);		//´óÔ¼1ºÁÃëµÄÑÓʱ
}

void display(int num) {
    P3 = led_mod[num / 10];  // ʮλÊý
    P1 = led_mod[num % 10];  // ¸öλÊý
}


void main(void)
 { 
		int seconds = 20;
    int p,k;
    led1=0;led2=0;led3=0;
	 
		P1=led_mod[7];
		P3=led_mod[7];
	 
		led1=1;led2=1;led3=1;
		led4=1;led5=1;led6=1;//³õʼ»¯	 
	 
   while (1)
	 {
		 seconds = 20;
		 
			for(p=20;p>10;p--)
		 { 
		  led1=1;led2=1;led3=0;
			led4=0;led5=1;led6=1;	//ºìÁÁ
			display(seconds);
			seconds--;
		  delay(1000);
		 }

		 
			for(k=0;k<3;k++)//»ÆÉÁ
		 {
		  led1=1;led2=0;led3=1;
			led4=1;led5=0;led6=1;
			delay(500);
		 
		  led1=1;led2=1;led3=1;
			led4=1;led5=1;led6=1;
			seconds--;	
			display(seconds);
			delay(500);			 
		 }
		 
		 for(p=7;p>1;p--)
		 {
		 	led1=0;led2=1;led3=1;
			led4=1;led5=1;led6=0;//ÂÌÁÁ
		  seconds--;	
			display(seconds);
			delay(1000);			 
		 }
		 
		 
//ÓÒ±ßÒ»ÅŵÆ
			seconds = 20;
		 
			led1=1;led2=1;led3=1;
			led4=1;led5=1;led6=1;//³õʼ»¯
		 
		 
		 
			for(p=20;p>10;p--)
		 { 
		  led1=0;led2=1;led3=1;
			led4=1;led5=1;led6=0;	//ºìÁÁ
			display(seconds);
			seconds--;
		  delay(1000);
		 }
		 
			for(k=0;k<3;k++)//»ÆÉÁ
			 {
				led1=1;led2=0;led3=1;
				led4=1;led5=0;led6=1;
				delay(500);
			 
				led1=1;led2=1;led3=1;
				led4=1;led5=1;led6=1;
				seconds--;	
				display(seconds);				 
				delay(500);		
			 }
		 
		 for(p=7;p>1;p--)
		 {
		 	led1=1;led2=1;led3=0;
			led4=0;led5=1;led6=1;//ÂÌÁÁ
		  seconds--;	
			display(seconds);
			delay(1000);			 
		 }
		 
		 
	 }
 }

猜你喜欢

转载自blog.csdn.net/WZY22502701/article/details/131008311