标题:
利用期末闲暇之余,制作了一个流水灯按键程序,四个按键控制LED流水灯的操作 加速
[打印本页]
作者:
单片机重购
时间:
2025-6-5 23:29
标题:
利用期末闲暇之余,制作了一个流水灯按键程序,四个按键控制LED流水灯的操作 加速
#include <REGX51.H>
sbit K1 = P3 ^ 2;
sbit K2 = P3 ^ 3;
sbit K3 = P3 ^ 4;
sbit K4 = P3 ^ 5;
unsigned char led_switch = 0;
volatile unsigned int number = 200;
volatile unsigned char temp;
void Delay(unsigned int xms);
void interrupt_init();
void timer_init();
void main()
{
unsigned char i;
interrupt_init();
timer_init();
while (1)
{
if (led_switch == 1)
{
temp = 0x80;
for (i = 0; i < 8; i++)
{
P1 = ~(temp >> i);
Delay(number);
}
if (led_switch == 0)
{
continue;
}
temp = 0x01;
for (i = 0; i < 8; i++)
{
P1 = ~(temp << i);
Delay(number);
}
}
}
}
void interrupt_init()
{
IT0 = 1;
EX0 = 1;
IT1 = 1;
EX1 = 1;
EA = 1;
}
void timer_init()
{
TMOD = 0X11; // 0001 0101 T1定时方式,模式1(16位),T0定时方式,模式1(16位)
TH0 = (65536 - 5000) / 256; // 初始值为64536,定时5000微秒相当于5毫秒;
TL0 = (65536 - 5000) % 256; //
ET0 = 1;
TR0 = 1; // 启动定时器T0
}
void Delay(unsigned int ms)
{
unsigned char i, j;
while (ms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void exint0_ISR() interrupt 0
{
led_switch = 1;
}
void exint1_ISR() interrupt 2
{
temp = 0x00;
P1 = 0xFF;
led_switch = 0;
}
void timer0_ISR() interrupt 1
{
TH0 = (65536 - 5000) / 256;
TL0 = (65536 - 5000) % 256;
if ((P3 & 0x30) != 0x30)
{
TR0 = 0;
P1 = 0xFF;
Delay(50);
if ((P3 & 0x30) != 0x30)
{
if (K3 == 0)
{
number -= 50;
if (number <= 50)
{
number = 50;
}
}
if (K4 == 0)
{
number += 50;
if (number >= 500)
{
number = 500;
}
}
}
TR0 = 1;
}
}
作者:
cy009
时间:
2025-6-6 08:42
在定时器中断中使用延时函数,不妥呵兄弟
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1