📄 dianji.c
字号:
CR = th; //1启动/0关闭PCA定时器
}
void Con_Buzzer(uint ch1,uint ch2) //蜂鸣器响起
{
_Buzzer_5V=0; //开蜂鸣器
STC_Delay_1ms(ch1);
_Buzzer_5V=1; //关蜂鸣器
STC_Delay_1ms(ch2);
}
//==============================STC12C4052PWM调速===========================
//作者:许XX 编写时间:20070808
//功能:
//入口:
//
//出口:无
//影响资源:PWM输出脚:_PWM_Point
//==========================================================================
void PWM_Timing() //功能选择函数,主要是6个按键的处理程序
{
uchar Control_Sign=0;//调速控制标志
if((Control_Key&0x3f)!=0x3f) //判断是否进入调速控制
{
STC_Delay_1ms(10);
Control_Key|=0x3f; //对控制器调控端口负值
//STC_Delay_1ms(1);
_nop_();
_nop_();
if((Control_Key&0x3f)!=0x3f) //进入调速控制
{
STC_Delay_1ms(1);
Control_Sign=Control_Key&0x3f; //保存控制端口值
if(Control_BeginOrEnd==0) //关机状态不相应
Con_Buzzer(300,1); //蜂鸣器响
switch(Control_Sign) //判断控制端口值,选择功能函数进行操作
{
case 0x1f : if((Time_EndWait==0)&&(Control_BeginOrEnd==0)) ConTime();break; //进入时间调整
case 0x3b : //进入电机正转
case 0x2f : //进入电机反转
if(Control_BeginOrEnd==0)
ConZZorFZ(Control_Sign);
break;
case 0x3d : if((Time_EndWait==0)&&(Control_BeginOrEnd==0))
ConSpeedup();
break; //进入电机加速
case 0x37 : if((Time_EndWait==0)&&(Control_BeginOrEnd==0))
ConSlowdown();break;//进入电机减速
case 0x3e : ConPower_KeyEnd();break; //进入电源开关
default :
while((Control_Key&0x3f)!=0x3f) //按键消抖,看情况是否删除
{
Control_Key|=0x3f;
_nop_();
_nop_();
}
break;
}
/*while((Control_Key&0x3f)!=0x3f) //按键消抖,看情况是否删除
{
Control_Key|=0x3f;
_nop_();
_nop_();
}*/
STC_Delay_1ms(50); //消抖动
}
}
}
void ConTime() //进入时间调整
{
if(Time_SignSetup==0) //判断是否进入定时操作
{
Time_Begin=1; //确认进入定时操作
Time_Mun+=5;
if(Time_Mun==20)
{
Time_Mun=0;
Time_Begin=0; //确认退出定时操作
}
Time_DSorDJS=1; //显示倒计时
Time_ShowAllow=1; //标志可以显示
}
}
void ConZZorFZ(uchar ZorF) //进入电机正转或者反转
{
if(ZorF==0x3b) //正传
Elect_ZZ=1; //开始正传
else if(ZorF==0x2f)
Elect_FZ=1; //开始反转
while((Control_Key&0x3f)!=0x3f) //按键消抖,看情况是否删除
{
Control_Key|=0x3f;
_nop_();
_nop_();
}
Elect_ZZ=0; //关闭正传 这两句看是否加进ConFZ/ConZZ中
Elect_FZ=0; //关闭反传
}
void ConSpeedup() //进入电机加速
{
//uchar key[2];
if(PWM_Pace!=20)
{
PWM_Pace++;
//key[0]=PWM_Pace/0x0a;
//key[1]=PWM_Pace-key[0]*0x0a;
//_74LS164_Show(key,table,2); //显示加速档数
PWM_Out(PWM_Pace,1);
Time_DSorDJS=0; //显示档数
Time_ShowAllow=1; //标志显示器可以显示数值提示
Time_SignSetup=1; //禁止进入定时设置控制操作
if(Time_Begin==1)
{
Time_Begin=0; //禁止再次定时
Ini_Timer(1); //开定时器
}
}
}
void ConSlowdown()//进入电机减速
{
//uchar key[2];
if(PWM_Pace>1)
{
PWM_Pace--;
//key[0]=PWM_Pace/0x0a;
//key[1]=PWM_Pace-key[0]*0x0a;
//_74LS164_Show(key,table,2); //开机初始显示00
PWM_Out(PWM_Pace,1);
Time_DSorDJS=0; //显示器显示档数
Time_ShowAllow=1; //标志显示器可以显示数值提示
}
}
void Con_ShowDSorDJS(bit ShowDSorDJS)//显示器轮流显示倒计时时间或者是档数
{
uchar _show_Sign; //待显示的数值,倒计时时间或者是档数
uchar key[2];
if(Time_ShowAllow==1) //判断是否进行数码管显示,1为显示,0为不显示
{
_show_Sign=Time_Mun; //ShowDSorDJS=1时,显示倒计时数值
if(ShowDSorDJS==0) //显示档数
{
_show_Sign=PWM_Pace;
}
key[0]=_show_Sign/0x0a;
key[1]=_show_Sign-key[0]*0x0a;
_74LS164_Show(key,table,2); //显示档数
Time_ShowAllow=0; //清楚显示标志
}
}
void ConPower_TmerEnd() //使用定时器进行电源开/关操作,此时等待Power键按下关机
{
if((Time_End == 1)&&(Time_EndWait == 1)) //等待定时器时间到
{
PWM_Out(0,0); //关闭电机,停止转动
Time_End = 0; //清零0关闭电机标志
Con_Buzzer(300,100);
Con_Buzzer(300,100);
Con_Buzzer(300,100);
PWM_Pace = 0;
Time_DSorDJS=0; //显示器显示档数
Time_ShowAllow=1; //标志显示器可以显示数值提示
}
//WDT_CONTR = 0x3c; //喂看门狗
}
void ConPower_KeyEnd() //使用按键进行电源开/关操作
{
if(Control_BeginOrEnd==1) //关机状态不相应
Con_Buzzer(300,1); //蜂鸣器响
STC_Delay_1ms(500);
Control_Key |= 0x3f;
_nop_();
_nop_();
if((Control_Key&0x3f)==0x3e)
{
if(Control_BeginOrEnd==0)//现在处于开机状态,现在准备关机
{
Control_BeginOrEnd = 1;//现在处于关机状态
Ini_WS_Control_End(); //关机初始化
}
else
{
Control_BeginOrEnd = 0;//现在处于关机状态,准备开机
Ini_WS_Control_Begin(); //开机初始化
}
}
//}
}
void main(void)
{
Ini_WS_Control_Begin();
while(1)
{
if(Control_BeginOrEnd==0) //给键盘负值
Control_Key|=0x3f;
else
Control_Key|=0x01;
PWM_Timing(); //功能选择函数,主要是6个按键的处理程序
Con_ShowDSorDJS(Time_DSorDJS); //显示器轮流显示倒计时时间或者是档数
ConPower_TmerEnd(); //使用定时器进行电源开/关操作,此时等待Power键按下关机
}
}
/*********************************************************
作者:许XX 编写时间:20070810
函数名:_74LS164_Show 功能说明:74ls164的驱动程序
参数:
输入:地址一SBuf_one 地址二SBuf_two 地址一内数据长度Mun_Long
SBuf_one的内容用SBuf_two的地址内容表示
输出:无
输出显示:SBuf_two[i] SBuf_two[i-1] ...
**********************************************************/
/*void _74LS164_Show(uchar * SBuf_one,uchar * SBuf_two,uchar Mun_Long) //数码管输出
{
uchar i,j,temp;
_74LS164_CLK=1;
_74LS164_DS=1;
for(i=0;i<Mun_Long;i++)
{
temp=SBuf_two[SBuf_one[Mun_Long-i-1]];
if(Control_BeginOrEnd==1) //如果控制器处于关机状态,显示器不显示
temp=0x00; //因为现在显示器只有2位,所以当高位显示为0时,此时数码管就不显示
for(j=0;j<8;j++)
{
temp=temp<<1;
_74LS164_CLK=0;
_nop_();
_nop_();
_74LS164_DS=CY;
_nop_();
_nop_();
_74LS164_CLK=1;
_nop_();
_nop_();
}
}
} */
void _74LS164_Show(uchar * SBuf_one,uchar * SBuf_two,uchar Mun_Long) //数码管输出
{
uchar i,j,temp;
_74LS164_CLK=1;
_74LS164_DS=1;
for(i=0;i<Mun_Long;i++)
{
//temp=SBuf_two[SBuf_one[Mun_Long-i-1]];
temp=SBuf_two[SBuf_one[i]];
if(Control_BeginOrEnd==1) //如果控制器处于关机状态,显示器不显示
temp=SBuf_two[10]; //因为现在显示器只有2位,所以当高位显示为0时,此时数码管就不显示
for(j=0;j<8;j++)
{
temp=temp<<1;
_74LS164_CLK=0;
_nop_();
_nop_();
_74LS164_DS=CY;
_nop_();
_nop_();
_74LS164_CLK=1;
_nop_();
_nop_();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -