Tình hình là em có vấn đề này muốn nhờ các bác giúp qua chút
Là thế này :có 16 LED ở P2 và P3 và 2 nút nhấn ở p1.0 và p1.1 ,yêu cầu bài toán là khi nhấn nút 1 thì 16LED sáng tắt với chu kì 1s, khi nhấn nút 2 thì 16 LED sáng đuổi nhau từ trên xuống dưới
em viết 2 chương trình con cho 2 nút bấm được rồi, chạy thử dc rồi như khi lồng vào hàm main thì em ko biết lồng thế nào
ý tưởng của em là nếu nhấn nút 1 thì thực hiên chương trình cv1(chương trình con để chạy khi nhấn nút 1), trong quá trình chạy cv1 luôn kiểm tra nút nhấn 2 , nếu nnuts nhấn 2 đc nhấn thì thực hiện chương trình cv2(chương trình con để chạy khi nhấn nút 2), và trong quá trình chạy cv2 luôn kiểm tra nút nhấn 1, khi nút nhấn 1 dc nhấn thì thực hiện cv1, và cứ như vậy thì tạo thành 1 vòng lặp vô hạn
đấy là ý tưởng nhưng khi em viết ko thể nào theo đúng ý tưởng dc, nay mong các bác giúp em với, đây là chương trình của em , mong các bác giúp đỡ
#include <REGx51.H>
#include <stdio.h>
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
unsigned int x,i;
unsigned int b=0;
unsigned int a=0;
void delay_us(unsigned int t)
{
for(x=0;x<=t;x++);
}
void cv1()
{
P2=0xff;
P3=0xff;
delay_us(1000);
P2=0x00;
P3=0x00;
delay_us(1000);
}
void cv2()
{
while(1)
{
P2=0x00;
P3=0x00;
delay_us(5000);
P2=0x01;
P3=0x00;
delay_us(5000);
P2=0x02;
P3=0x00;
delay_us(5000);
P2=0x04;
P3=0x00;
delay_us(5000);
P2=0x08;
P3=0x00;
delay_us(5000);
P2=0x10;
P3=0x00;
delay_us(5000);
P2=0x20;
P3=0x00;
delay_us(5000);
P2=0x40;
P3=0x00;
delay_us(5000);
P2=0x80;
P3=0x00;
delay_us(5000);
P2=0x00;
P3=0x01;
delay_us(5000);
P2=0x00;
P3=0x02;
delay_us(5000);
P2=0x00;
P3=0x04;
delay_us(5000);
P2=0x00;
P3=0x08;
delay_us(5000);
P2=0x00;
P3=0x10;
delay_us(5000);
P2=0x00;
P3=0x20;
delay_us(5000);
P2=0x00;
P3=0x40;
delay_us(5000);
P2=0x00;
P3=0x80;
delay_us(5000);
}
}
void kiemtraphim()
{
if(KEY1==0)
{
a=2;
}
if(KEY2==0)
{
a=3;
}
}
void main(void)
{
P2=0x00;
P3=0x00;
{
if (a=2)
{
cv1();
if (a=3)
{
cv2();
}
}
}
}
Là thế này :có 16 LED ở P2 và P3 và 2 nút nhấn ở p1.0 và p1.1 ,yêu cầu bài toán là khi nhấn nút 1 thì 16LED sáng tắt với chu kì 1s, khi nhấn nút 2 thì 16 LED sáng đuổi nhau từ trên xuống dưới
em viết 2 chương trình con cho 2 nút bấm được rồi, chạy thử dc rồi như khi lồng vào hàm main thì em ko biết lồng thế nào
ý tưởng của em là nếu nhấn nút 1 thì thực hiên chương trình cv1(chương trình con để chạy khi nhấn nút 1), trong quá trình chạy cv1 luôn kiểm tra nút nhấn 2 , nếu nnuts nhấn 2 đc nhấn thì thực hiện chương trình cv2(chương trình con để chạy khi nhấn nút 2), và trong quá trình chạy cv2 luôn kiểm tra nút nhấn 1, khi nút nhấn 1 dc nhấn thì thực hiện cv1, và cứ như vậy thì tạo thành 1 vòng lặp vô hạn
đấy là ý tưởng nhưng khi em viết ko thể nào theo đúng ý tưởng dc, nay mong các bác giúp em với, đây là chương trình của em , mong các bác giúp đỡ
#include <REGx51.H>
#include <stdio.h>
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
unsigned int x,i;
unsigned int b=0;
unsigned int a=0;
void delay_us(unsigned int t)
{
for(x=0;x<=t;x++);
}
void cv1()
{
P2=0xff;
P3=0xff;
delay_us(1000);
P2=0x00;
P3=0x00;
delay_us(1000);
}
void cv2()
{
while(1)
{
P2=0x00;
P3=0x00;
delay_us(5000);
P2=0x01;
P3=0x00;
delay_us(5000);
P2=0x02;
P3=0x00;
delay_us(5000);
P2=0x04;
P3=0x00;
delay_us(5000);
P2=0x08;
P3=0x00;
delay_us(5000);
P2=0x10;
P3=0x00;
delay_us(5000);
P2=0x20;
P3=0x00;
delay_us(5000);
P2=0x40;
P3=0x00;
delay_us(5000);
P2=0x80;
P3=0x00;
delay_us(5000);
P2=0x00;
P3=0x01;
delay_us(5000);
P2=0x00;
P3=0x02;
delay_us(5000);
P2=0x00;
P3=0x04;
delay_us(5000);
P2=0x00;
P3=0x08;
delay_us(5000);
P2=0x00;
P3=0x10;
delay_us(5000);
P2=0x00;
P3=0x20;
delay_us(5000);
P2=0x00;
P3=0x40;
delay_us(5000);
P2=0x00;
P3=0x80;
delay_us(5000);
}
}
void kiemtraphim()
{
if(KEY1==0)
{
a=2;
}
if(KEY2==0)
{
a=3;
}
}
void main(void)
{
P2=0x00;
P3=0x00;
{
if (a=2)
{
cv1();
if (a=3)
{
cv2();
}
}
}
}
Comment