⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 18.c

📁 智能交通控制系统中SCATS系统倒计时控制程序
💻 C
字号:
/*
*********************************************************************************************************
*
*                                               倒计时牌源代码
*
* CPU          :AT89C2051
*
* FILE         : 18.C
* By           : CC
* DATE         : 2008-04-05
* VERSION      : 1.0
* 修改记录     :
*********************************************************************************************************
*/


#include<REG2051.H>
#include<INTRINS.H>
//#include<x5045.H>

#define uchr    unsigned char
#define uint    unsigned int

#define TIM       92//
#define T100MS    0x400//100ms
#define T500MS    0x2000//500ms
#define T1000MS   0x4000//1000ms
#define RFLH_N    0x00//红灯闪烁次数
#define GFLH_N    0x03//绿灯闪烁次数

#define RSAVEADDR   0x80
#define GSAVEADDR   0x90

sbit p17     = P1^7;

//DATA
bit  rstart  = 0;
bit  gstart  = 0;
bit  rend    = 0;
bit  gend    = 0;
bit  rsave   = 0;
bit  gsave   = 0;

uint rcount  = 0;
uint gcount  = 0;
uchr rdelay  = 0;
uint gdelay[10]  = 0;
uchr time1s  = 0;

uint timer0  = 0;
uint timechk = 0;


uchr data sreg    = 0;

//t0时钟基准0.25ms
void rtimer() interrupt 1 using 2
{
     TH0=(65536-TIM)/256;
     TL0=(65536-TIM)%256;
	 TR0=0;
     //P1=~P1;
	 //timer0++;
	// timechk++;
/*	 if(timer0>=4) 
	 {
	     
		 timer0=0;
		 time1s++;
		 if(rstart) rcount++;
	     if(gstart) gcount++;
	 }
	 if(timechk>50000) timechk=50000;*/
}

//红灯脉冲计数器
void rint() interrupt 0 using 1
{
     
    // rcount++;
	 //gdelay[rcount]=timechk;
	 //timechk=0;
    p17=!p17;
    // if(rcount>=20) rcount=0;
	 /*if(timechk<T100MS)//如果时间小于200ms
	 {
	     timechk=0;
	 }
	 else if(timechk>T100MS && timechk<T500MS)//如果时间大于200ms并且小于500ms,准备开始计数
	 {
	     timechk=0;
	     rcount=0;
         rstart=1;
	 }
	 else if(timechk>T1000MS)//如果时间大于1000ms,计时结束
	 {
	     timechk=0;
		 if(rstart)
		 {
		     rstart=0;
			 rend=1;
		 }
	 }*/
}
/*
//绿灯脉冲计数器
void gint() interrupt 2 using 1
{
     if(timechk<T100MS)//如果时间小于200ms
	 {
	     timechk=0;
	 }
	 else if(timechk>T100MS && timechk<T500MS)//如果时间大于200ms并且小于500ms,准备开始计数
	 {
	     timechk=0;
	     gcount=0;
         gstart=1;
	 }
	 else if(timechk>T1000MS )//如果时间大于1000ms,计时结束
	 {
	     timechk=0;
		 if(gstart)
		 {
		     gstart=0;
			 gend=1;
		 }
	 }
}

*/

void main(void)
{
     uint i;
	 //uchr tmp=0x80;
	 //uchr tt=0,i=0;
     EA=1;
     TMOD=0X11;

	 //t0时钟基准
	 ET0=1;
     TH0=(65536-TIM)/256;
     TL0=(65536-TIM)%256;
     TR0=0;
	 TR1=0;

     //外部中断允许,下降沿触发
     EX0=1;
	 IT0=1;
	 EX1=0;
	 IT1=1;
	 


     //x5045ini();

	 while(1)
     {
	   /* if(rend && (rcount != rdelay))
		{
		    rend=0;
            //save(RSAVEADDR,rcount);
		}
		if(gend && (gcount != gdelay))
		{
		    gend=0;
            //save(GSAVEADDR,gcount);
		}*/
	
	
     }

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -