Trích:
Nguyên văn bởi vandat07
Em đang định viết chương trình điều khiển đèn led nháy nhiều chế độ dùng 1 button nhưng mà chưa biết làm thế nào? Có phải phải dùng ngắt ngoài không?
Ai biết thì cho em code.
Thank!
|
bài này của A Linhnc308,bạn lấy về edit lại theo ý mình nếu thích: "sory A Linh "
Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
int8 mode,i;
byte temp;
#INT_EXT
EXT_ISR()
{
mode++;
if (mode==9) mode = 0;
}
// End of INT
void program1();
void program2();
void program3();
void program4();
void program5();
void program6();
void program7();
void program8();
void main()
{
trisd = 0x00;
trisb = 0xFF;
portd=0xff;
enable_interrupts(int_EXT);
ext_int_edge(L_TO_H);
enable_interrupts(GLOBAL);
mode = 0;
while (1) {
switch(mode) {
case 1: program1(); break;
case 2: program2(); break;
case 3: program3(); break;
case 4: program4(); break;
case 5: program5(); break;
case 6: program6(); break;
case 7: program7(); break;
case 8: program8(); break;
}
}
}
void program1()
{
PortD = 0x00;
delay_ms(10);
Portd = 0xFF;
delay_ms(100);
}
void program2() {
temp = 0xFF;
for (i=0;i<=8;i++)
{
portd = temp;
delay_ms(100);
temp >>= 1;
}
}
void program3()
{
temp = 0xFF;
for (i=0;i<=8;i++)
{
portd = temp;
delay_ms(100);
temp <<= 1;
}
}
void program4() {
portd = 0xAA;
delay_ms(100);
portd = 0x55;
delay_ms(100);
}
void program5()
{
Portd = 0x7E;
delay_ms(150);
Portd = 0xBD;
delay_ms(250);
Portd = 0xDB;
delay_ms(150);
Portd = 0xE7;
delay_ms(150);
Portd = 0xDB;
delay_ms(150);
Portd = 0xBD;
delay_ms(150);
Portd = 0x7E;
delay_ms(150);
}
void program6()
{
temp = 0xFF;
for (i=0;i<=8;i++) {
portd = temp;
delay_ms(250);
temp = temp >> 1;
}
}
void program7()
{
Portd = 0xFE;
delay_ms(150);
Portd = 0xFD;
delay_ms(150);
Portd = 0xFB;
delay_ms(150);
Portd = 0xF7;
delay_ms(150);
Portd = 0xEF;
delay_ms(150);
PortD = 0xDF;
delay_ms(150);
Portd = 0xBF;
delay_ms(150);
Portd = 0x7F;
delay_ms(150);
}
void program8() {
Portd = 0x7F;
delay_ms(150);
Portd = 0xBF;
delay_ms(150);
PortD = 0xDF;
delay_ms(150);
Portd = 0xEF;
delay_ms(150);
Portd = 0xF7;
delay_ms(150);
Portd = 0xFB;
delay_ms(150);
Portd = 0xFD;
delay_ms(150);
Portd = 0xFE;
delay_ms(150);
}