Ⅰ 51单片机控制LED闪烁频率
暂时想到两种解决方案:
1.最简方案——利用延时函数:进入主函数后,初始化LED,设置一个延时初始值,然后进入while循环,里边只做四件事,打开LED,利用键盘返回值作延时函数参数,关闭LED,利用键盘返回值作延时函数参数。
2.精确解决方案——定时器:初始化定时器,打开中断等,然后进入while等待中断,在中断函数里先定义一个变量,然后将键盘返回值赋值给此变量,再将此变量去重装定时器初值,接下来就是为LED取反。
有不懂的随时回复我。
希望我的回答能帮助到你。
Ⅱ 51单片机一键控制一个LED,每按一下按键LED闪烁一种频率,共闪烁三种频率.有好的答案加
#include<reg51.h>
unsigned char n = 0;
sbit key = P3^4;
sbit led = P1^0;
void delay()
{
unsigned int i, j;
for(i = 0; i < 100; i++) for(j = 0; j < 500; j++);
}
void readkey(void)
{
unsigned char i, j;
if(!key) {
for(i = 0; i < 10; i++)
for(j = 0; j < 120; j++); //延时消抖
if(!key) {
while(!key); //等待按键释放
n++;
n %= 4; //n = 0~3
}
}
}
main()
{
while(1) {
switch(n) {
case 0: led = 1; readkey(); break; //熄灭
case 1: delay(); readkey(); //慢速闪烁
case 2: delay(); readkey(); //中速闪烁
case 3: delay(); readkey(); led = ~led; //快速闪烁
}
}
}
Ⅲ 51单片机矩阵键盘输入的值保存到一个数组了里并显示出来最后再控制LED灯闪烁对应数值的次数
例如按下1、2、3,我可以令result=num[0]*100+num[1]*10+num[2],得到123。--每次怎么可能按下 1、2、3 ?每次,只能按下一个。你把值保存到数组num[i]的一个元素中,再 i++。 i == 3,可令result=num[0]*100+num[1]*10+num[2],得到123。然后可以读这些数进行计算。
Ⅳ 在52单片机上实现:点亮任意一个LED,先以1HZ的频率闪烁5秒,再以100HZ的频率闪烁5秒,以此循环.
大体思路:设P0^0控制LED的亮灭,当P0.0=0时灯点亮。有两种闪烁方式,可以让1HZ的在main()函数里闪烁。然后开个定时器,让100HZ的在定时器中断里闪烁,就行了。
1HZ就是1S亮一次,100HZ是10ms亮一次
#include<reg52.h>
void delay(int x)
{
时间是5ms;
}
void timer1()interrupt 1 定时器0中断
{
static unsigned int a;
unsigned int b;
if(++a==5) 看是否到了5S
{
TR0=0;先把定时器关了,防止在送段运行时再次进入中断。
a=0;
for(b=1000;b>0;--b)
{
P0.0=0; 让灯亮灭的间隔为5MS。一共闪5S
delay(1);
p0.0=~p0.0;
delay(1);
}
}
TH0=XX; 再次 设置好定时器,让它每隔1S进一次中断;
TL0=XX;
TR0=1;
}
void main()
{
TH0=XX; 设置好定时器,让它每隔1S进一次中断;
TL0=XX;
TR0=1;
while(1)
{
P0.0=0; 灯开始以500ms为间隔开始亮灭。
delay(100);
p0.0=~p0.0;
delay(100);
}
}