Đề bài : Hãy sử dụng ADC để đọc giá trị điện áp thông qua phím nhấn sử dụng chân AN0 và thực hiện các hiệu ứng led đơn với :
Nút 1 : Sáng dần 8 led của Port D
Nút 2: Nháy 8 led port D với chu kỳ 0.5s
Nút 3: Sáng tắt 8 led port D
Nút 4: Dịch 8 led port D
Hướng dẫn vẽ sơ đồ :
Hướn Dẫn Code
<8 i="" move="move">#include <main.h>
UNSIGNED INT16 KQADC,SOV=5,SON=1023;
// SANG DAN 8 LED
void SANG_DAN(VOID)
{
unsigned int8 init=0x7F, temp, reset =0xff, move;
output_D(reset);
delay_MS(1000);
move=init;
output_D(move);
delay_MS(1000);
for(int8 i=0;i<8;i++)
{
move=move>>1;
temp=move;
output_D(temp);
delay_MS(1000);
}
}
// NHAY 8 LED CHU KY 0.5 ( TAT 0.25 VA MO 0.25)
VOID NHAY05GIAY(VOID)
{
OUTPUT_D(0X00);
DELAY_MS(250);
OUTPUT_D(0XFF);
DELAY_MS(250);
}
// SANG TAT 8 LED PORTD
VOID SANG_TAT()
{
OUTPUT_D(0X00);
DELAY_MS(500);
OUTPUT_D(0XFF);
DELAY_MS(500);
}
// DICH 8 LED
VOID DICH8LED(VOID)
{
output_D(0b01111111);
delay_MS(1000);
output_D(0b10111111);
delay_MS(1000);
output_D(0b11011111);
delay_MS(1000);
output_D(0b11101111);
delay_MS(1000);
output_D(0b11110111);
delay_MS(1000);
output_D(0b11111011);
delay_MS(1000);
output_D(0b11111101);
delay_MS(1000);
output_D(0b11111110);
delay_MS(1000);
output_D(0b11111111);
delay_MS(1000);
}
VOID HIENTHI()
{
KQADC=SOV*READ_ADC()/SON;
//NUT NHAN 1
IF(KQADC==4)
{
// SANG TAT 8 LED PORTD
SANG_TAT();
}
// NUT NHAN 2
ELSE IF(KQADC==3)
{
// SANG DAN 8 LED PORTd
SANG_DAN();
}
//NUT NHAN 3
ELSE IF(KQADC==2)
{
// DICH 8 LED PORTd
DICH8LED();
}
// NUT NHAN 4
ELSE IF(KQADC==1)
{
// NHAY 8 LED PORTd CHU KY 0.5S
NHAY05GIAY();
}
ELSE
OUTPUT_D(0XFF);
}
void main()
{
SET_TRIS_D(0X00);
SET_TRIS_A(0X00);
SETUP_ADC(ADC_CLOCK_DIV_2);
SETUP_ADC_PORTS(AN0);
SET_ADC_CHANNEL(0);
while(TRUE)
{
HIENTHI();
}
}
8>
0 nhận xét:
Đăng nhận xét