/*-----------------------------------------------
名称:按键震动程序,按下不同的按键,改变输出端的震动频率
日期:2021-7-12
内容:改变P2口的1个LED灯闪烁频率,接手机震动马达,模拟电动牙刷
需要修改地方有两处:1,多个按键改成一个按键来控制不同震动频率。
2:按下按键1怎么让他一直循环,而不是循环10次,
直到按下按键2切换到第二种频率。
不使用PWM控制。
希望大师给修改一下程序
------------------------------------------------*/
#include<reg52.h> //包含头文件
//头文件包含特殊功能寄存器的定义
#define uint unsigned int
#define uchar unsigned char
sbit key1 = P1^0; //按键1
sbit key2 = P1^1; //按键2
sbit LED0=P2^0;// 定义 输出到P2.0端口,
int i;
void delay(uint xms) //延时
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--) ;
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (){
while (1) //主循环
{
if(key1 == 0){
//延时20ms 消除抖动
delay(15);
//第二次判断
if(key1 == 0){
for(i=0;i<10;i++) //不按按键应该让他一直循环,现在是循环执行10次 ,怎么才能让他一直循环?
{
LED0=0; //将P1.0口赋值 0,对外输出低电平
delay(250); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1.0口赋值 1,对外输出高电平
delay(250);
}
}
while(!key1); //当按键未松开时,key为0,执行该死循环。
//等待按键被松开
}
if(key2 == 0){
//延时20ms 消除抖动
delay(15);
//第二次判断
if(key2 == 0){
for(i=0;i<10;i++)
{
LED0=0; //将P1.0口赋值 0,对外输出低电平
delay(450); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1.0口赋值 1,对外输出高电平
delay(500);
}
}
//等待按键被松开
while(!key2); //当按键未松开时,key为0,执行该死循环。
}
//主循环中添加其他需要一直工作的程序
}
}
按键反应有点迟钝,也需要修改一下。
|