標題:
利用期末閑暇之余,制作了一個流水燈按鍵程序,四個按鍵控制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
在定時器中斷中使用延時函數(shù),不妥呵兄弟
作者:
單片機重購
時間:
2025-6-17 14:27
cy009 發(fā)表于 2025-6-6 08:42
在定時器中斷中使用延時函數(shù),不妥呵兄弟
為啥哦大神可以解答嘛
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1