c语言单片机程序实例:十字路口交通灯
如果一个单位时间为1秒,这里设定的十字路口交通灯按如下方式四个步骤循环工作:
#include <at89x52.h>
//sbit用来定义一个符号位地址,方便编程,提高可读性,和可移植性
sbit SNRed =P1^0; //南北方向红灯
sbit SNYellow =P1^1; //南北方向黄灯
sbit SNGreen =P1^2; //南北方向绿灯
sbit EWRed =P1^3; //东西方向红灯
sbit EWYellow =P1^4; //东西方向黄灯
sbit EWGreen =P1^5; //东西方向绿灯
/* 用软件产生延时一个单位时间 */
void Delay1Unit( void )
{
unsigned int i, j;
for( i=0; i<1000; i++ )
for( j<0; j<1000; j++ ); //通过实测,调整j循环次数,产生1ms延时
//还可以通过生成汇编程序来计算指令周期数,结合晶体频率来调整j循环次数,接近1ms
}
/* 延时n个单位时间 */
void Delay( unsigned int n ){ for( ; n!=0; n-- ) Delay1Unit(); }
void main( void )
{
while( 1 )
{
SNRed=0; SNYellow=0; SNGreen=1; EWRed=1; EWYellow=0; EWGreen=0; Delay( 60 );
SNRed=0; SNYellow=1; SNGreen=0; EWRed=1; EWYellow=0; EWGreen=0; Delay( 10 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=0; EWGreen=1; Delay( 60 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=1; EWGreen=0; Delay( 10 );
}
}
- 60个单位时间,南北红,东西绿;
- 10个单位时间,南北红,东西黄;
- 60个单位时间,南北绿,东西红;
- 10个单位时间,南北黄,东西红;
#include <at89x52.h>
//sbit用来定义一个符号位地址,方便编程,提高可读性,和可移植性
sbit SNRed =P1^0; //南北方向红灯
sbit SNYellow =P1^1; //南北方向黄灯
sbit SNGreen =P1^2; //南北方向绿灯
sbit EWRed =P1^3; //东西方向红灯
sbit EWYellow =P1^4; //东西方向黄灯
sbit EWGreen =P1^5; //东西方向绿灯
/* 用软件产生延时一个单位时间 */
void Delay1Unit( void )
{
unsigned int i, j;
for( i=0; i<1000; i++ )
for( j<0; j<1000; j++ ); //通过实测,调整j循环次数,产生1ms延时
//还可以通过生成汇编程序来计算指令周期数,结合晶体频率来调整j循环次数,接近1ms
}
/* 延时n个单位时间 */
void Delay( unsigned int n ){ for( ; n!=0; n-- ) Delay1Unit(); }
void main( void )
{
while( 1 )
{
SNRed=0; SNYellow=0; SNGreen=1; EWRed=1; EWYellow=0; EWGreen=0; Delay( 60 );
SNRed=0; SNYellow=1; SNGreen=0; EWRed=1; EWYellow=0; EWGreen=0; Delay( 10 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=0; EWGreen=1; Delay( 60 );
SNRed=1; SNYellow=0; SNGreen=0; EWRed=0; EWYellow=1; EWGreen=0; Delay( 10 );
}
}