📄 01222.c
字号:
/**********************************************************************
* 函 数 名: 测濒
* 功能描述:
* 函数说明:
* 调用函数:
* 全局变量:
* 输 入:
* 返 回:
* IO口分配: P1.~P1.5.....分濒线
P0...........送数据
p2.0~P2.4....键盘显示
T0...........被测信号输入 (16) P3.4
T1...........
T2...........显示
function: first......显示初始化
high........clear high bit 0
rehigh......recover high 0
* 设 计 者: 日期:
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//define data
#define NTH2D 0xF4 // MODE 1 4MHz: 0FAH 6MHZ: 0FBH 2.5MS
#define NTL2D 0xD0 // 12MHZ: 2.85MS= 2850=B30H=-F4D0H
//define bit
bit Y, // 预测标志
AB, // A中断
START, // 启动
ABX, // 测相位的标志
signe;
//all x
uchar Disbit,PN0,
K, // 分濒系数
TDH,TDL,PDH,PDL;
uchar F;
uint fn;
//function list
void first(void); // first send data
void deal(uint m);
void dealp(uint n);
void delay(uint l);
//arange define
uchar data disbuf[8]={0,0,0,0,0,0,0,0}; // display is area
uchar code tab[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0};//0X77,0X7C,0X39,0X5E,0X79,0X71}; //0-9 A~F
// point define
//T1 MODE 1 2.85S
void timer2(void) interrupt 5 using 2 // T=0.544ms 12MHZ
{
uchar save;
P0=0;
TH2=NTH2D;
TL2=NTL2D;
save=disbuf[Disbit];
if(PN0==Disbit) save=save|0x80;
P2=P2&0xf0;
P2=P2|Disbit;
P0=save;
Disbit+=1;
if(Disbit==8) Disbit=0;
}
void service_int0(void) interrupt 0 using 2
{
if(++F==1)
{TR0=1;TH0=0;TL0=0;}
if(F==2)
{TR0=0;F=0;PDH=TH0;PDL=TL0;signe=1;}
}
// INT1
void service_int1(void) interrupt 2
{
PDH=TH1; PDL=TL1;
TR1=0; ABX=1;
EX1=0;
}
void main(void)
{
uint X,P,fn;
uchar M,K;
first();
PN0=6;
IP=0X05;
TMOD=0X11;
TH0=0;
TL0=0;
IT0=1;
INT1=1;
EX0=1;
EA=1;
START=1;
F=0;
signe=0;
while(1)
{
Y=1;
while(signe==0);
fn=256*TDH+TDL;
fn=(float)10000/fn*100;
deal(fn); }
}
void first(void)
{
TH2=NTH2D;
TL2=NTL2D;
ET2=1;
EA=1;
T2CON=0x04;
P0=0XFF;
P1=0x1f;
P2=0XFF;
P3=0XFF;
PN0=0xff;
deal(9999);
dealp(9999);
delay(4550);
}
void deal(uint m)
{
uchar data b0,b1,b2,b3;
uint div=1000;
b0=m/div;
m%=div;
div/=10;
b1=m/div;
m%=div;
div/=10;
b2=m/div;
m%=div;
b3=m;
if(b0==0)
{
b0=10;
if(b1==0)
{
b1=10;
if(b2==0) b2=10;
}
}
disbuf[0]=tab[b0];
disbuf[1]=tab[b1];
disbuf[2]=tab[b2];
disbuf[3]=tab[b3];
}
void dealp(uint n)
{
uchar data b0,b1,b2,b3;
uint div=1000;
b0=n/div;
n%=div;
div/=10;
b1=n/div;
n%=div;
div/=10;
b2=n/div;
n%=div;
b3=n;
if(b0==0)
{
b0=10;
if(b1==0)
{
b1=10;
}
}
disbuf[4]=tab[b0];
disbuf[5]=tab[b1];
disbuf[6]=tab[b2];
disbuf[7]=tab[b3];
}
void delay(uint l)
{
while(--l) {_nop_();_nop_();}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -