㈠ 51单片机控制16个led灯,要求16个灯依次点亮后依次熄灭
假设16个灯接P0和P1,高电平点亮,每次亮一个灯
程序大致这样:
uint b;//16位变量对应16个灯
uchar i;
while(1)
{
for(i=0;i<16;i++)
{
b=0x01<<i;
P0=b;//自动取低8位
P1=b<<8;//取高8 位
delayms(200);
}
}
㈡ 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--);
}
可下载到单片机验证。