C51 단일 칩 종합 시뮬레이션 실험 1 간단한 신호등 시스템

목적:

출력, 지연 , LED 및 디지털 튜브 사용을 마스터하십시오.

실험 장비 및 소프트웨어:

컴퓨터; Keil , Proteus , MCU Elf.

실험 내용:

교통 신호등은 사람들의 삶에서 없어서는 안될 중요한 부분이며 큰 의미가 있습니다. 단일 칩 마이크로컴퓨터를 시작한 지 불과 며칠 만에
간단한 제어 기술은 간단한 신호등도 설계할 수 있습니다.

실험 요구 사항:

1. LED는 동서남북 방향에 각각 빨강, 노랑, 초록 3개가 있습니다 .
2. 먼저 빨간색 표시등 이 10초 , 녹색 표시등 이 7초 , 마지막으로 노란색 표시등이 3초 동안 깜박입니다 .
3. BCD 디지털 튜브를 통해 20초 전체 주기의 카운트다운이 표시됩니다 .
4. 소프트웨어 지연 에 의해서만 지연될 수 있으며 하드웨어 타이머는 사용할 수 없습니다.

관련 정보:

1. 케일 프로테우스 사용법 .
2. 마이크로컨트롤러의 출력.
3. LED 제어.
4. Nixie 튜브 컨트롤.
5.delay 소프트웨어 지연.

예비 지식:

1. 케일 프로테우스 사용법 .
2. C 언어, 마이크로컨트롤러 핀 출력, 지연 소프트웨어 지연.

실험 단계:

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