实验目的:
掌握输出、延时
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);
}
}
}