목적:
출력,
지연
,
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);
}
}
}