按钮与LED
流水灯
版本一:
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 129;
k = 119;
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();
}
}
版本二:
#include <REGX52.H>
#include <INTRINS.H>
void Delayms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
Delayms(500);
P2=0xFD;//1111 1101
Delayms(500);
P2=0xFB;//1111 1011
Delayms(500);
P2=0xF7;//1111 0111
Delayms(500);
P2=0xEF;//1110 1111
Delayms(1000);
P2=0xDF;//1101 1111
Delayms(1000);
P2=0xBF;//1011 1111
Delayms(1000);
P2=0x7F;//0111 1111
Delayms(1000);
}
}
按钮控制LED灯
注意:当板子接通电源是I/O口都为高电平,故当按键接通时,按键对应的I/O为低电平
#include <REGX52.H>
#include <INTRINS.H>
void main()
{
//P2=0xFE;
while(1)
{
if(P3_0==0)
{
P2_0=0;//按下按钮则灯亮
}
else
{
P2_0=1;//松开按钮则灯灭
}
}
}
独立按钮控制LED状态
#include <REGX52.H>
#include <INTRINS.H>
void Delayms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0)
{
Delayms(20);//按下按钮消抖
while(P3_1==0);//松开按键后,再改变状态
Delayms(20);//松开按钮消抖
P2_0=~P2_0;
}
}
}
独立按钮控制LED显示二进制
void main()
{
unsigned char LEDNumber = 0;
while(1)
{
if(P3_1==0)
{
Delayms(20);//按下按钮消抖
while(P3_1==0);//松开按键后,再改变状态
Delayms(20);//松开按钮消抖
//上电后起初P2=1111 1111 P2++ ==0000 0000
LEDNumber++;
P2=~LEDNumber;
}
}
}
独立按钮控制LED移位
void main()
{
unsigned char LEDNum=0;//用于表示8位的无符号整数,局部变量需要放在函数,if,for,while的第一行
P2=~0x01;
while(1)
{
if(P3_1==0)
{
Delayms(20);//按下按钮消抖
while(P3_1==0);//松开按键后,再改变状态
Delayms(20);//松开按钮消抖
LEDNum++;
if(LEDNum>=8)
LEDNum=0;
P2=~(0x01<<LEDNum);
}
if(P3_0==0)
{
Delayms(20);//按下按钮消抖
while(P3_0==0);//松开按键后,再改变状态
Delayms(20);//松开按钮消抖
if(LEDNum==0)
LEDNum=7;
else
LEDNum--;
P2=~(0x01<<LEDNum);
}
}
}
动态数码管显示(注意消影)
#include <REGX52.H>
#include <INTRINS.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示0-9对应的P0口代码
void Delayms(unsigned int xms) //@11.0592MHz 延时函数
{
unsigned char i, j;
while(xms)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
//某一位显示0-9之间的数字
void Nixie(unsigned char Location, Number)
{
switch(Location)//选择某一位数码管进行显示
{
case 1:
P2_4=1;P2_3=1;P2_2=1;break;
case 2:
P2_4=1;P2_3=1;P2_2=0;break;
case 3:
P2_4=1;P2_3=0;P2_2=1;break;
case 4:
P2_4=1;P2_3=0;P2_2=0;break;
case 5:
P2_4=0;P2_3=1;P2_2=1;break;
case 6:
P2_4=0;P2_3=1;P2_2=0;break;
case 7:
P2_4=0;P2_3=0;P2_2=1;break;
case 8:
P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
Delayms(1);//消影
P0=0x00;//消影
}
void main()
{
while(1)
{
Nixie(1,1);
// Delayms(200);
Nixie(2,2);
// Delayms(200);
Nixie(3,3);
// Delayms(200);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!