📄 基于jl3脉冲点器频率测试器程序.c
字号:
{ WP=0;
SCL_DR=1;
SDA_DR=1;
SDA=1;
delay();
SCL=1;
delay();
SDA=0;
delay();
SCL=0; //钳位I2C总线,准备发送数据
}
/**********************************************************
**名称:I2C_Stop
**功能:停止I2C
**输入:无
**返回:无
**********************************************************/
void I2C_Stop()
{
SCL_DR=1;
SDA_DR=1;
SDA=0;
delay();
SCL=1;
delay();
SDA=1;
delay();
}
/**********************************************************
**名称:Ack
**功能:应答信号
**输入:无
**返回:无
**********************************************************/
void Ack()
{
SCL_DR=1;
SDA_DR=1;
SDA=0;
delay();
SCL=1;
delay();
SCL=0;
delay();
SDA=1;
delay();
}
/********************************************************
**名称:NoAck
**功能:发送非应答信号
**输入:无
**返回:无
********************************************************/
void NoAck()
{
SCL_DR=1;
SDA_DR=1;
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
delay();
SDA=0;
delay();
}
/********************************************************
**名称:Test_Ack()
**功能:检测应答位
*********************************************************/
uchar Test_Ack(void)
{ uchar Return_da;
SCL_DR=1;
SDA_DR=1;
SCL=0;
SDA=1;//读入数据
;;;;
SCL=1;
;;;;
SDA_DR=0;
if(SDA==0)
Return_da=1;
else
Return_da=0;
SCL=0;
return(Return_da);
}
//读EEP驱动=========================================================
void Sen_data_dir(uchar Sen_Da)
{ uchar temp,i;
temp=Sen_Da;
SCL_DR=1;
SDA_DR=1;
for(i=0;i<8;i++)
{
SCL=0;
if(temp&0x80)
SDA=1;
else
SDA=0;
delay();
SCL=1;
delay();
temp=temp<<1;
}
SCL=0;
}
//==写EEP驱动=================================================
uchar Read_DA_dir(void)
{ uchar temp,i;
SCL_DR=1;
SDA_DR=0;
for(i=0;i<8;i++)
{ SCL=0;
delay();
SCL=1;
if(SDA==1)
temp=temp|0x01;
else
temp=temp&0xfe;
if(i<7)
temp=temp<<1;
}
SCL=0;
return (temp);
}
//=写EEP管理====================================================
uchar Write_data(uchar d_address,uchar address,uchar *data,uchar data_cont_set)
{ uchar return_var,i;
uchar *b;
b= data;
I2C_Start();
Sen_data_dir(d_address);
return_var=Test_Ack();
if(return_var==OK)
{ Sen_data_dir(address);
return_var=Test_Ack();
if(return_var==OK)
{ for(i=0;i<data_cont_set;i++)
{ b=b+i;
Sen_data_dir(*b);
return_var=Test_Ack();
if(return_var==OK)
;
else
return(0);
}
I2C_Stop();
return(1);
}
else
return(0);
}
else
return(0);
}
//===读EEP管理==================================================
uchar Read_data(uchar d_address,uchar address,uchar data_set)
{ uchar i;
I2C_Start();
Sen_data_dir(d_address);
//return_var=Test_Ack();
if(Test_Ack()==1)
{ Sen_data_dir(address);
if(Test_Ack()==1)
{ I2C_Start();
Sen_data_dir(0xa1);
if(Test_Ack()==1)
{ for (i=0;i<data_set-1;i++)
{
Read_Da_buff[i]=Read_DA_dir();
Ack();
}
Read_Da_buff[data_set-1]=Read_DA_dir();
NoAck();
I2C_Stop();
return(1);
}
else
return(0);
}
else
return(0);
}
else
return(0);
}
//=========================================================
void key_cor(void)
{ switch(key)
{ case 0x60:key=0;
if(eep_changfige==0)
{
sen_step++;
if(sen_step>1)
sen_step=0;
dsp_fige=3; //显示L,H
}
break;
case 0xc0:key=0;
if((eep_changfige==0)&&(dsp_fige==2))
{
dsp_fige=2;//显示设置值
eep_da_set[sen_step]++;
if(eep_da_set[sen_step]>99)
eep_da_set[sen_step]=0;
}
break;
case 0xa0:key=0; if(eep_changfige==0)
{
if(dsp_fige==3)
dsp_fige=2;
else
dsp_fige=3;
}
break;
//以上为长按键---------------------------------------
case 0x61:key=0;
eep_changfige=eep_changfige^1;
if(eep_changfige==1)
{ dsp_fige=0;//显示时间
if(Write_data(0xa0,0,eep_da_set,2)==1)
;
else
{
break;
}
}
else
{ dsp_fige=3;//显示L,H
}
break;
case 0xc1: key=0;
if((eep_changfige==0)&&(dsp_fige==2))
{
dsp_fige=2;//显示设置值
eep_da_set[sen_step]++;
if(eep_da_set[sen_step]>99)
eep_da_set[sen_step]=0;
keydown_fige=keydown_fige&0xfd;
key_cont=220;
}
break;
}
}
//主函数==========================================
void main(void)
{asm{
RSP
}
MCU_int();
//W_data_dir();
dsp_fige=1;
//主循环===================
for(;;)
{ dsp_dir();
key_dir();
Bell_dir();
key_cor();
dsp_cr(&dsp_fige);
__RESET_WATCHDOG(); /* feeds the dog */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -