thienlong586
19-09-2013, 08:19 PM
Chào các anh. Rất mong các anh hướng dẫn cho em vài hướng giải quyết trong đề tài đồ án em được nhận.
Em đã viết được đếm đến 9999 cấp xung từ rb0 và nút bấm hoạt động tốt, nhưng để sữ dụng 2 nút bấm lên xuống rb4 rb5 setup giá trị để mạch đếm đến giá trị đó rồi return về 0 thì em vẫn đang rối. Rất mong các anh giúp đỡ.
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=20000000)
#use fast_io(d)
#use fast_io(b)
#use fast_io(e)
#byte intcon=0x000B
#bit RB4=0x06.4
#bit RB5=0x06.5
#bit RBIF=intcon.0
#bit RBIE=intcon.3
int16 dem=0,nghin,tram,chuc,dv;
unsigned char MA7DOAN[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F};
#int_ext
void ngat_RB0()
{
if(dem==9999)
dem=0;
++dem;
}
#int_RB
void ngat_RB()
{
if(RBIE && RBIF)
{
if(input(PIN_B4)==1)
dem--;
if(input(PIN_B5)==1)
dem++;
if(dem>9999) dem=0;
}
}
void main()
{
set_tris_b(0b11111111);
set_tris_d(0);
set_tris_e(0);
enable_interrupts(int_ext);
enable_interrupts(int_RB);
enable_interrupts(global);
ext_int_edge(H_to_L);
clear_interrupt(int_ext);
clear_interrupt(int_RB);
while(1)
{
nghin=dem/1000;
tram=((dem%1000)/100);
chuc=(((dem%1000)%100)/10);
dv=(((dem%1000)%100)%10);
{
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);
}
}}
Em đã viết được đếm đến 9999 cấp xung từ rb0 và nút bấm hoạt động tốt, nhưng để sữ dụng 2 nút bấm lên xuống rb4 rb5 setup giá trị để mạch đếm đến giá trị đó rồi return về 0 thì em vẫn đang rối. Rất mong các anh giúp đỡ.
#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=20000000)
#use fast_io(d)
#use fast_io(b)
#use fast_io(e)
#byte intcon=0x000B
#bit RB4=0x06.4
#bit RB5=0x06.5
#bit RBIF=intcon.0
#bit RBIE=intcon.3
int16 dem=0,nghin,tram,chuc,dv;
unsigned char MA7DOAN[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F};
#int_ext
void ngat_RB0()
{
if(dem==9999)
dem=0;
++dem;
}
#int_RB
void ngat_RB()
{
if(RBIE && RBIF)
{
if(input(PIN_B4)==1)
dem--;
if(input(PIN_B5)==1)
dem++;
if(dem>9999) dem=0;
}
}
void main()
{
set_tris_b(0b11111111);
set_tris_d(0);
set_tris_e(0);
enable_interrupts(int_ext);
enable_interrupts(int_RB);
enable_interrupts(global);
ext_int_edge(H_to_L);
clear_interrupt(int_ext);
clear_interrupt(int_RB);
while(1)
{
nghin=dem/1000;
tram=((dem%1000)/100);
chuc=(((dem%1000)%100)/10);
dv=(((dem%1000)%100)%10);
{
output_d(0xbf);
output_c(MA7DOAN[dv]);
delay_ms(10);
output_d(0xdf);
output_c(MA7DOAN[chuc]);
delay_ms(10);
output_d(0xef);
output_c(MA7DOAN[tram]);
delay_ms(10);
output_d(0Xf7);
output_c(MA7DOAN[nghin]);
delay_ms(10);
}
}}