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灯 }
}