📄 bj.c
字号:
/*******************************DISSPLAY FOR Alarm*************************/
/*************************PROGRAM BY FANZ**2006/12/18************************/
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <math.h>
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80
#define InPutPort P0
#define OutPutPort P1
code Uchar CSOutData[11]={0x60,0x80,0x40,0xC0,0x20,0xF0,0x70,0x90,0x50,0xD0,0x30};
code Uchar CSInData[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x00,0x01,0x02,0x03,0x04,0x0F};
/**********端口********/
sbit WDI =P3^3;
sbit Buzzer =P3^4;
sbit AlarmOut=P3^5;
sbit SlienKey=P3^6;
sbit TestKey =P3^7;
sbit LampE =P3^0;
sbit LampD =P2^4;
sbit LampC =P2^5;
sbit LampB =P2^6;
sbit LampA =P2^7;
/**********全局变量************/
Uchar idata LeampFlag[5][8];
Uchar idata GatherD[5];
Uchar idata DisBuf[5];
Uchar idata HalfSec;
Uchar idata TimeFlag;
Uchar idata Flash;
/**********函数列表**************/
void InitReg(void);
void ReadData(void);
void ComDisPlay();
void DispData(void);
/******************初始化相关寄存器****************/
void InitReg(void)
{
Uchar i,m;
/*T0为16位定时方式一*/
TMOD=0x01;
/*50Ms*/
TH0=0x3C;
TL0=0xB0;
HalfSec=0x00;
TimeFlag=0;
Flash=0x55;
for(i=0;i<5;i++)
for(m=0;m<8;m++) LeampFlag[i][m]=0x11;
for(i=0;i<5;i++) DisBuf[i]=0x00;
ComDisPlay();
TR0=1;ET0=1;
EA=1;
}
void ComDisPlay(void)
{
OutPutPort=DisBuf[0];
LampA=0;
_nop_();
LampA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
OutPutPort=DisBuf[1];
LampB=0;
_nop_();
LampB=1;_nop_();_nop_();_nop_();_nop_();_nop_();
OutPutPort=DisBuf[2];
LampC=0;
_nop_();
LampC=1;_nop_();_nop_();_nop_();_nop_();_nop_();
OutPutPort=DisBuf[3];
LampD=0;
_nop_();
LampD=1;_nop_();_nop_();_nop_();_nop_();_nop_();
OutPutPort=DisBuf[4];
LampE=0;
_nop_();
LampE=1;_nop_();_nop_();_nop_();_nop_();_nop_();
}
/***************************读取开关量***************/
void ReadData(void)
{
Uchar i,m,TData;
WDI=~WDI;
for(i=0;i<5;i++)
{
TData=P2;
TData=TData&0xF0;
TData=TData|CSInData[i];
P2=TData;
InPutPort=0xFF;
_nop_();_nop_();_nop_();
TData=InPutPort;
GatherD[i]=TData;
}
/*断开报警*/
//GatherD[0]=~GatherD[0];
//GatherD[1]=~GatherD[1];
//if(GatherD[3]&0x40) GatherD[4]&=0xF7;
GatherD[3]^=0x80;
for(i=0;i<5;i++)
for(m=0;m<8;m++)
{
if(((GatherD[i]&(0x01<<m))==0x00)&&(LeampFlag[i][m]==0x11)) LeampFlag[i][m]=0x22;
if(GatherD[i]&(0x01<<m)) LeampFlag[i][m]=0x11;
}
if((GatherD[4]&0x80)==0x00) LeampFlag[4][7]=0x33;
if((GatherD[4]&0x80)==0x80) LeampFlag[4][7]=0x11;
}
/**************************送显示*********/
void DispData(void)
{
Uchar i,m;
for(i=0;i<5;i++) DisBuf[i]=0xFF;
for(i=0;i<5;i++)
{
for(m=0;m<8;m++)
{
if((Flash==0xAA)&&(LeampFlag[i][m]==0x22)) DisBuf[i]&=(~(0x01<<m));
if(LeampFlag[i][m]==0x33) DisBuf[i]&=(~(0x01<<m));
}
}
ComDisPlay();
Flash=~Flash;
}
/************定时***************/
void Timer0(void) interrupt 1 using 2 //T0
{
HalfSec++;
if(HalfSec==5)
{
TimeFlag=1;
HalfSec=0x00;
WDI=~WDI;
}
TH0=0x3C;
TL0=0xB0;
}
/********************主函数****************************/
void main(void)
{
Uchar i,m;
Uchar TData;
EA=0;
PSW=0;
SP=0xD0;
InitReg();
while(1)
{
TData=0;
for(i=0;i<5;i++)
for(m=0;m<8;m++)
{
if(LeampFlag[i][m]==0x22) TData=1;
}
if(TData) {Buzzer=0;AlarmOut=0;}
else {Buzzer=1;AlarmOut=1;}
WDI=~WDI;
if(SlienKey==0)
{
for(i=0;i<5;i++)
for(m=0;m<8;m++)
{
if(LeampFlag[i][m]==0x22) LeampFlag[i][m]=0x33;
}
while(!SlienKey);
}
if(TestKey==0)
{
EA=0;
OutPutPort=0x00;
LampA=0;
_nop_();
LampA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
LampB=0;
_nop_();
LampB=1;_nop_();_nop_();_nop_();_nop_();_nop_();
LampC=0;
_nop_();
LampC=1;_nop_();_nop_();_nop_();_nop_();_nop_();
LampD=0;
_nop_();
LampD=1;_nop_();_nop_();_nop_();_nop_();_nop_();
LampE=0;
_nop_();
LampE=1;_nop_();_nop_();_nop_();_nop_();_nop_();
Buzzer=0;AlarmOut=0;
while(!TestKey) WDI=~WDI;
EA=1;
}
if(TimeFlag)
{
ReadData();
DispData();
TimeFlag=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -