发光二极管:
led灯交替闪烁,间隔0.5s:
#include <REGX52.H>
#include <INTRINS.H>
//led交替闪烁,间隔0.5s
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0XFE;//1111 1110
Delay500ms();
P2=0XFD;//1111 1101
Delay500ms();
P2=0XFB;//1111 1011
Delay500ms();
P2=0XF7;//1111 0111
Delay500ms();
P2=0XEF;//1110 1111
Delay500ms();
P2=0XDF;//1101 1111
Delay500ms();
P2=0XBF;//1011 1111
Delay500ms();
P2=0X7F;//0111 1111
Delay500ms();
}
}
P3_0代表独立按键‘k1’
P3_1代表独立按键‘k2’
P3_2代表独立按键‘k3’
P3_3代表独立按键‘k4’
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0&&P3_0==0){
//P3_1代表独立按键‘k2’,P3_0代表独立按键‘k1’
P2_0 = 0;
//p2_0代表LED模块‘D1’
}
else{
P2_0 = 1;
}
}
}
按位左移:0011 1100<<1 -> 0111 1000
按位右移:0011 1100>>1 -> 0001 1110
按位与:0011 1100 & 0101 0101 -> 0001 0100
按位或:0011 1100 | 0101 0101 -> 0111 1101
按位异或:0011 1100 ^ 0101 0101 -> 0110 1001
按位取反:~0011 1100 -> 1100 0011
独立按键(k1)按下灯亮(D1),再按下,灯灭;
(考虑抬手动作)
#include <REGX52.H>
//预防按键抖动
void delay(unsigned int xms)//传入几,就表示延时几毫秒
//@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0)//0表示按下k1,但此时还没有抬起手
{
delay(20);
while(P3_1==0);//如果按下k1;则陷入死循环,直到松手;
delay(20);
P2_0=~P2_0;
}
}
}
运用独立按键实现LED模块显示二进制
#include <REGX52.H>
//防按键抖动
void delay(unsigned int xms)//延迟时间,单位:毫秒 //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
unsigned int num=0;//定义二进制数0000 0000
while(1)
{
if(P3_1==0){
delay(20);
while(P3_1==0);//如果按下k1;则陷入死循环,直到松手;
delay(20);
num++;//每次加一
P2=~num;//LED灯亮表示1,灯灭表示0;
}
}
}
LED亮灯位置移动(左移右移)
#include <REGX52.H>
void delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
unsigned int num=0;
while(1)
{
if(P3_1==0){//按下k1,亮灯的LED向右移
delay(20);
while(P3_1==0);//如果按下k1;则陷入死循环,直到松手;
delay(20);
if(num==8)
num=0;
P2=~((0x01)<<num++);
}
if(P3_0==0){ //按下k2,亮灯的LED向左移
delay(20);
while(P3_0==0);//如果按下k1;则陷入死循环,直到松手;
delay(20);
if(num==0)
num=7;
else
num--;
P2=~((0x01)<<num);
}
}
}