Bài 2: Dùng vi điều khiển 16F887 điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái mô phỏng trên Proteus
- Sơ đồ mạch:
Hình 1. Sơ đồ mạch điều khiển 8 led đơn sáng dần tắt dần từ phải sang trái
|
- Chương trình:
#INCLUDE <16F887.H>
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20M)
UNSIGNED INT8 I, X;
VOID MAIN()
{
SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X); DELAY_MS(500);
WHILE(TRUE)
{
FOR (I=0;I<8;I++)
{
X = (X<<1)+0X01; OUTPUT_D(X); DELAY_MS(500);
}
FOR (I=0;I<8;I++)
{
X = (X<<1); OUTPUT_D(X); DELAY_MS(500);
}
}
}
#FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20M)
UNSIGNED INT8 I, X;
VOID MAIN()
{
SET_TRIS_D(0x00); X=0X00; OUTPUT_D(X); DELAY_MS(500);
WHILE(TRUE)
{
FOR (I=0;I<8;I++)
{
X = (X<<1)+0X01; OUTPUT_D(X); DELAY_MS(500);
}
FOR (I=0;I<8;I++)
{
X = (X<<1); OUTPUT_D(X); DELAY_MS(500);
}
}
}
- Giải thích chương trình:
Vòng lặp for thứ nhất thực hiện 8 lần: tiến hành xoay trái dữ liệu của X và cộng với 0x01. Khi xoay trái dữ liệu thì số 0 được đẩy vào, cộng với 0x01 là để đẩy số 1 vào X. Dữ liệu biến X được xuất ra portD điều khiển led sáng dần, sau 8 lần thì X sẽ bằng 1111_1111 – 8 led sáng hết.
Vòng lặp for thứ hai thực hiện 8 lần: tiến hành xoay trái dữ liệu của X. Khi xoay trái dữ liệu thì số 0 được đẩy vào. Dữ liệu biến X được xuất ra portD điều khiển led tắt dần, sau 8 lần thì X sẽ bằng 0000_0000 – 8 led tắt hết.
Sau đó lặp lại cứ thế 8 led sáng dần xong rồi tắt dần.
Tài liệu tham khảo:
- Nguyễn Đình Phú (2014). Giáo trình VI ĐIỀU KHIỂN PIC 16F887.
Link download code: https://drive.google.com/file/d/1N8O29TRRUJTakFRKHJMcpm4xxZpUycID/view
Comments
Post a Comment