?? 復件 18.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 + -