LED交通灯实验报告

  • 格式:doc
  • 大小:345.50 KB
  • 文档页数:10

交通灯实验——练习使用两位LED灯

一、器件清单

(1) 单片机 AT98C51 (2) 晶振 CRYSTAL (3) 瓷片电容 CAP 【30pF】

(4) 电解电容 CAP-ELEC【1uF】 (5) 电阻 RES (6) 两位LED(共阳极) 7SEG-MPX2-CA

电源 POWER 地 GROUND

二、实验目的

熟悉两位LED灯的原理及使用。

三、实验要求

1、参照以上电路在Proteus下完成电路图绘制。

注意:该图中使用了总线,绘制总线的工具按钮是 ,总线的两端必须加上线路标号。

2、在Keil下编写C51程序,实现以下功能:每隔1秒钟,LED灯显示数字加1。显示从00开始,能够加到99。到了100又重新从00开始向上加。

3、使用T0定时器实现定时1秒钟(1s = 20 * 50000µs)。

四、两位LED灯的工作原理

1、学会识别两位LED灯是共阴极还是共阳极

 7SEG-MPX2-CA:Red, 2 Digit, Common Anode, 7-Segment Anode Display共阳极

 7SEG-MPX2-CC:Red, 2 Digit, Common Cathode, 7-Segment Anode Display共阴极 2、 本实例选用了共阳极的两位LED,其中引脚“1 2”表示位选端,当引

脚“1”送高电平时,点亮左侧的LED灯;当引脚“2”送高电平时,

点亮右侧的LED灯。每点亮一个LED灯时,应从引脚“ABCDEFG”

送这个LED灯的显示段码。

3、以下程序段可以顺序点亮右侧、左侧的两个LED灯

P1 = duan[ge]; //从P1口送个位数(右侧LED灯)的显示段码

P2_1 = 1; //单片机的P2.1=1,让LED灯的引脚2为高电平,点亮右侧LED灯

delay( ); //高电平持续一小段时间,注意delay( )函数设计为单层循环即可

P2_1 = 0; //单片机的P2.1=0,不再选中右侧的LED灯

P1 = duan[shi]; //从P1口送十位数(左侧LED灯)的显示段码

P2_0 = 1; //单片机的P2.0=0,让LED灯的引脚1为高电平,点亮左侧LED灯

delay(); //延时

P2_0 = 0; //单片机的P2.0=0,不再选中左侧的LED灯

五、将运行效果图粘贴在此处

六、将C51源代码粘贴在此处,并对每个函数添加序言性注释

#include

#include

//#define COM_8279 XBYTE[0x5fff] //定义 8279的控制口为 COM_8279

//#define DAT_8279 XBYTE[0x5eff] //定义 8279的数据口为 DAT_8279

typedef unsigned char uchar;

typedef unsigned int uint;

typedef unsigned long ulong;

ulong time=0;

sbit flag=ACC^7;

sbit P2_1=P2^1;//定义特殊标志位

sbit P2_0=P2^0;//定义特殊标志位

uchar code table[50]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

uchar duan[6]={0,0};

uchar T0_num=0;

void InitT0(void)

{

//uchar i,j;

// while(1) // {

// for(i=0;i<20;i++)

// {

TMOD = 0x01;

TH0 = 0x3c;

TL0 = 0xb0;

TR0 = 1;

EA=1;

ET0=1;

// }

// }

//}

}

void T0Fun()interrupt 1 using 1

{

TH0 = 0x3c;

TL0 = 0xb0;

T0_num++;

if(T0_num==20) //判断定时1秒是否到

{

T0_num=0; //把中断次数置为0

time++; // 时间自加1

duan[0]=time%10;

duan[1]=time/10%10;

}

}

void main()

{

InitT0();

while(1)

{

P1 = table[duan[0]]; //从P1口送个位数(右侧LED灯)的显示段码

P2_1 = 1; //单片机的P2.1=1,让LED灯的引脚2为高电平,点亮右侧LED灯

//高电平持续一小段时间,注意delay( )函数设计为单层循环即可

P2_1 = 0; //单片机的P2.1=0,不再选中右侧的LED灯

P1 = table[duan[1]]; //从P1口送十位数(左侧LED灯)的显示段码

P2_0 = 1; //单片机的P2.0=0,让LED灯的引脚1为高电平,点亮左侧LED灯

//延时

P2_0 = 0; //单片机的P2.0=0,不再选中左侧的LED灯 }

}