📄 zbb.c
字号:
#include "AT892051.H"
#define B0 P1_7
#define B1 P1_6
#define B2 P1_5
#define B3 P1_4
#define B4 P1_3
#define B5 P1_2
#define B6 P1_1
#define B7 P1_0
#define DOG P3_0
#define W1 P3_3
#define W2 P3_4
#define W3 P3_5
#define W4 P3_1
#define RUN P3_7
#define uchar unsigned char
#define uint unsigned int
/****************************/
uint data timeCount=0;
uchar data sampCount=0; //采集计数
uchar data countFlag=0x55; //计数起始标志
long data zjData=0; //频率计算中间变量
uint data tempData=0;
long data endData=0; //最终显示数据//频率计算结果
uchar data disbuffer[4]={5,0,0,0};
uint data feqBuf[20]; //20个采样数据取平均值
uchar data allCount=0;
//uint data allBuf[3]; //3次平均值
uchar data ShowFlag;
//LED显示字符编码,按照0~9的顺序。
uchar data ledNo[10]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
void init();
//========================================
void Int0(void) interrupt 0 using 1
{
if(ShowFlag == 0x55)
{
countFlag=~countFlag;
if(countFlag == 0xaa)
{
TL0=0x00;
TH0=0x00;
}
else
{
tempData=TH0;
tempData=(tempData<<8)+TL0;
ShowFlag=0x66;
}
}
}
//========================================
/***********************************
定时器0
1ms
************************************/
/*void TIME_0(void) interrupt 1 using 1
{
TL0=0X66;
TH0=0XFC;
timeCount++;
}*/
void main()
{
uint iii;
uchar i=0;
init();
ShowFlag=0x55;
while(1)
{
DOG=!DOG;
if(ShowFlag == 0x66)
{
if ((tempData <= 30000) && (tempData >= 15400))
{
zjData=100000000/tempData;
allCount++;
feqBuf[sampCount]=zjData;
sampCount++;
ShowFlag=0x55;
if (sampCount >= 20)
{
sampCount=0;
endData=0;
for (iii=0;iii<20;iii++)
{
endData+=feqBuf[iii];
}
endData=endData/20+3;
if (allCount >= 150)
{
allCount=0;
disbuffer[0]=endData/1000;
endData=endData%1000;
disbuffer[1]=endData/100;
endData=endData%100;
disbuffer[2]=endData/10;
disbuffer[3]=endData%10;
}
}
}
else
{
ShowFlag=0x55;
countFlag=0x55;
}
}
if (timeCount >= 100)
{
timeCount = 0;
RUN=!RUN;
}
P1=0x0;
W1=1;
W2=0;
W3=0;
W4=0;
P1=ledNo[disbuffer[0]];
for (iii=0;iii<400;iii++);
P1=0x0;
W1=0;
W2=1;
W3=0;
W4=0;
P1=ledNo[disbuffer[1]]&0xfe;
for (iii=0;iii<400;iii++);
P1=0x0;
W1=0;
W2=0;
W3=1;
W4=0;
P1=ledNo[disbuffer[2]];
for (iii=0;iii<400;iii++);
P1=0x0;
W1=0;
W2=0;
W3=0;
W4=1;
P1=ledNo[disbuffer[3]];
for (iii=0;iii<400;iii++);
W1=0;
W2=0;
W3=0;
W4=0;
if ((ShowFlag != 0x55) && (ShowFlag != 0x66))
{
ShowFlag=0x55;
}
if ((countFlag != 0x55) && (countFlag != 0xaa))
{
countFlag=0x55;
}
timeCount++;
}
}
/*******************************************************************************************/
//接收读卡数据
/*******************************************************************************************/
/*******************************************************************************************/
//读卡
/*******************************************************************************************/
/*******************************************************************************************/
//单片机初始化
/*******************************************************************************************/
void init()
{
EA = 0;
TMOD= 0x11; //T0 定时器方式1
//TH0 = 0xfc;
//TL0 = 0x66; //1毫秒定时*/
//TH0 = 0x0;
//TL0 = 0x0; //定时*/
ET0 = 1; //定时器0中断允许
TR0 = 1; // 设定时器0开始计数
//ET1 = 1; //定时器1中断允许
//TR1 = 1; // 设定时器1开始计数
IT0 = 1; //外部中断0下降沿触发
EX0 = 1; //外部中断0允许
//ES = 1;
EA = 1;
}
//===========================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -