Chào bạn!
Mình vừa tải File mô phỏng của bạn về chạy thử.
Nó vẫn chạy bình thường theo như ý bạn viết trong code mà.
Tuy nhiên, mình đã sửa lại đôi chút để số đếm hàng đơn vị không bị xóa sau mỗi lần bấm nút.
Ở đây dùng PIC6F877A thì nên để clock là 20MHz.
Bạn thử lại với code sau xem:
Code:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#byte portb=0x06
#byte portd=0x08
unsigned int16 dem=0, hang_chuc, hang_dvi;
const unsigned char digital[]={0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110,\
0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
#int_ext
void dem_xung()
{
dem++;
if(dem<=30)
{
hang_dvi= dem%10;
hang_chuc= dem/10;
output_a(0);
portd=digital[hang_chuc];
delay_ms(100);
output_a(1);
portd=digital[hang_dvi];
delay_ms(10);
}
if(dem>30)
{
dem=0; // Reset bien dem neu lon hon 30
}
}
void main()
{
while(true)
{
set_tris_B(0b00000001);
set_tris_d(0);
set_tris_a(0);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
}
}
Mình cũng mới ngâm cứu về Pic nên còn gà mờ lắm.
Theo như sơ đồ nguyên lý của bạn thì 2 LED 7 thanh của bạn nối chung với PORTD của Pic.
Do vậy, để hiển thị được cả hai LED thì phải dùng phương pháp quét (đánh lừa đôi mắt!). (Hình như là dùng ngắt timer để quét).
Bác nào có thể trợ giúp tiếp không ạ?
- Làm thế nào để khi LED hàng đơn vị đếm. LED hàng chục vẫn hiển thị?