发布网友 发布时间:2022-04-22 09:57
共4个回答
热心网友 时间:2023-09-21 23:08
给你个C语言的
#include<stc.h> //头文件
sbit jian=P1^0;
sbit LED=P1^1;
void ys(unsigned int ); //声明延时函数
void main()
{
while(1)
{
LED=1; //让LED点亮,其实这条语句可以不写,因为单片机的IO口默认就是高电平
if(jian==0) //判断按键是否按下
{
ys(1000); //延时消抖
if(jian==0) //再次判断按键是否按下,这条语句很有必要。
{
LED==0; //LED 熄灭
}
}
}
}
/*延时函数*/
void ys(unsigned int i)
{
unsigned x;
for(x=0;x<5000;x++)
for(x=0;x<a;x++);
}
程序是在这里编写的,不是用编译器,可能存在语法错误
热心网友 时间:2023-09-21 23:09
KEIL C51语言
#include <REG51.H>
sbit K1 = P1^0;
sbit LED = P1^1;
main(void)
{
LED=0;//初始化LED灭
while(1)LED=~K1;//读按键状态取反后送LED显示
}
KEIL汇编语言
ORG 000H;程序开始
CLR P1.1;初始化LED灭
MAIN:;程序标号
MOV C,P1.0;读按键状态送C寄存
CPL C;取反键值
MOV P1.1,C;键值送LED显示
SJMP MAIN;转移到MAIN
END追问顺便:我用的是STC12C5A60S2,这个单片机可以用吗?
还有led两端的电压很低,只有1.76V(按下时),给单片机的电压有4.96V。
追答可以用REG51.H头文件
我这个方法不需消抖,你可以下载到单片机看效果
电压很低因为P1.1接LED到地,单片机内上拉很弱,你要设置P1.1为强上拉
有关强上拉设置方法请参考STC12C5A60S2手册
热心网友 时间:2023-09-21 23:09
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit led =P1^0;//假设灯在P1.0
sbit key1=P2^0;//假设按键在P2.0和P2.1
sbit key2=P2^1;//
void delay_1s(uint x)//延时
{
uint y;
uint z; //如果延时不够长可以把z的值加大
while(x--)
{
for(y=0;y<50000;y++)
{
z=200;;
while(z--);
}
}
}
void main(void)
{
led=1; //不亮
while(1)
{
if(key1==0 && key2==1)//按键1按下,按键2没按
{
led=0; //亮
}
else if(key1==1 ) //按键1释放或未按时,灯灭
{
led=1; //灭
}
if(key2==0 && key1==1) //按键2按下,按键1没按
{
led=0; //先亮
delay_1s(30); //等30秒
led =1 ; //30秒后灭
}
}
}
热心网友 时间:2023-09-21 23:10
ORG 0000H
LJMP START
ORG 0100H
START:
mov c,p1.0 //把p1.0的按钮信息读进来
cpl c //取反
mov p1.1,c //输出到p1.1
sjmp start //循环
END追问用KEIL c51编写,否则我看不懂,还有不是说了用按键开关吗(抖动)?
追答就是用keil编写的 还仿真过了