单片机编程:LED发光二极管的初始状态为亮。按一下按键,LED灯灭。再按一下,亮。此规律亮灭交替?画出一个仿真图,让p2口接8个发光二极管,并书写一道程序,让灯做亮灭闪烁每一秒
单片机编程:LED发光二极管的初始状态为亮。按一下按键,LED灯灭。再按一下,LED亮。此规律LED亮灭交替?
今天做回好人,闲着给你写一个做参考。 按键按一次LED灯灭,在按一次按键LED灯亮。 程序如下:
/************************************************************************************************************* #include "REG52.H" sbit LED1_01 = P1^1; //LED灯 sbit KEY0_01 = P1^2; //按键 void Delay_1ms(unsigned int Time) { unsigned int x, y; for(x = Time; x > 0; x--) for(y = 120; y > 0; y--); } int main(void) { LED1_01 = 1; //打开LED灯点亮 while(1) { if(KEY0_01 == 0) //检测按键是否按下 { Delay_1ms(10)
; //延时去抖动 if(KEY0_01 == 0) //确定按键按下 { LED1_01 = ~ LED1_01; //取反LED灯 [ 亮 . 灭 ] } while(KEY0_01 == 0)
; //检测松手 } } } *****************************************************************************************************************/
画出一个仿真图,让p2口接8个LED发光二极管,并书写一道程序,让LED灯做亮灭闪烁每一秒闪烁一次?
首先搞清LED管是高电平导通还是低电平导通。
如果是低电平导通,P2赋0x00时,发光管全亮,0xff时,全灭。
具体程序:
#define uint unsigned int
#define uchar unsigned char
void delay(uint time_out)
{
uint i,j;
for(i=0;i<time_out;i++)
{
for(j=0;j<110;j++)
{;}
}
}
void main(){
while(1)
{
P2=0xfe; //第1个管亮
delay(500);
P2=0xfd; //第2个管亮
delay(500);
P2=0xfb; //依次类推
delay(500);
P2=0xf7;
delay(500);
P2=0xef;
delay(500);
P2=0xdf;
delay(500);
P2=0xbf;
delay(500);
P2=0x7f;
delay(500);
}
}
程序大致如此,delay函数负责延迟500ms.有问题自己再调试调试