|
可实现,基本的交通灯规则的实现。
下面是一部分代码:
/**********************************************************************************
* 标题: 交通灯 *
* *
* 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用8PIN排线连接
* P2与JP1 用8PIN排线相连 P30 P31连接J22 *
* P32 P33连接JP5 *
***********************************************************************************
* *
* 请学员认真消化本例程,注意定时器中断的用法,以及编程的逻辑*
***********************************************************************************/
#include <reg51.h>
void delay(unsigned int i); //函数声名
void display(); //函数声明
unsigned int num,time; //定义变量
//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制
//此表为8个数码管位选控制, 共阴数码管 1-8个 -
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制
/************主函数**********************/
main()
{
TMOD= 0X10; //定时器1的工作方式1
EA= 1; //开启总中断
ET1= 1; //开启定时器1
TH1= 0x3c; //高位赋初值
TL1= 0xb0; //低位赋初值 3cb0是15535,则计时为(65535-15535=50000)us,即50ms
TR1= 1; //启动定时器 T1
num= 0;
while(1)
{
if(num<31) //宝田路绿灯,前进路红灯,持续30s
{
P2= 0xcd; //11001101
P3= 0xfe; //11111110
time= (30-num);
display();
}
if(num>30&&num<34) // 宝田路黄灯,人行道禁止通行,前进路红灯,持续三秒
{
P2= 0xd6; //11010110
P3= 0xfe; //11111110
time= (34-num);
display();
}
if(num>33&&num<65) //前进路绿灯,宝田路红灯,持续30s
{
P2= 0x7a; //01111010
P3= 0xfd; //11111101
time= (64-num);
display();
}
if(num>64&&num<68) // 前进路黄灯,人行道禁止通行,宝田路红灯,持续三秒
{
P2= 0xba; //10111010
P3= 0xfe; //11111101
time= (67-num);
display();
}
}
}
|
|