❶ 如何实现51单片机按下k2灯从上往下亮,按下k3熄灭,按k4从下往上亮,按下k5熄灭
这个很好实现,没有原理图,那么随意设计好了。
#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
sbitk2=P1^0;
sbitk3=P1^1;
sbitk4=P1^2;
sbitk5=P1^3;
ucharmode;
voiddelay(ucharms)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
ucharled=0xfe;
while(1)
{
if(k2==0)
{
while(k2==0);
mode=1;
}
if(k3==0)
{
while(k3==0);
mode=2;
}
if(k4==0)
{
while(k4==0);
mode=3;
}
if(k5==0)
{
while(k5==0);
mode=4;
}
switch(mode)
{
case1:P0=led;led=_crol_(led,1);delay(200);break;
case2:P0=0xff;break;
case3:P0=led;led=_cror_(led,1);delay(200);break;
case4:P0=0xff;break;
default:break;
}
}
}
❷ 51单片机的按键控制小灯亮灭的问题(程序类型:c语言)怎么解决
#include
#define uint unsigned int
sbit LED = P1^0;
sbit KEY1 = P1^2;
void delay(uint);
void main(void)
{
LED = 1; //初始化LED熄灭
KEY1 = 1; //赋值KEY1高电平
while(1)
{
if(!KEY1) //检测到按键按下
{
LED = ~LED; /*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不
进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此时检测到KEY1 = 0,进入循
环,LED取反得到LED = 0,灯亮。*/
delay(500); /*此处延迟,保证连续两次按键动作处在程序的延时过程中,不进行其他程序从而不会影响小灯。*/
}
}
}
void delay(uint z) //延时函数
{
uint x, y;
for(x=85; x>0; x--)
for(y=z; y>0; y--);
}
可下载到单片机验证。
❸ 51单片机控制led灯点亮与熄灭
// 51单片机控制八个发光二极管 左右循环。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改变这里 LED 各种花样
uchar t,i;
void main()
{
TMOD=0x10;
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
EA=1;
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
t=0;
i=0;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
t++;
if(t==20)
{
t=0;
P2=TAB[i];
i++;
if(i==18) { i=0;}
}
}