Trích:
Nguyên văn bởi dacthuong
Chào các bạn. Mình gõ lại bài thầy làm nhưng khi cho mô phỏng thì mạch chạy không đúng( bài này dùng quét led). Mong các bạn sửa chỗ sai dùm mình với.
Cảm ơn các bạn nhiều!
#include<16f877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(b)
#use fast_io(d)
const unsigned char ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};
int8 donvi,dem,chuc,i; // khai bao kieu du lieu
unsigned char mdonvi,mchuc;
void div_bcd(int tam)
{chuc=tam/10;
donvi=tam%10;
mchuc=ma7doan[chuc];
}
void hienthi()
{for(i=0;i<250;i++)
{output_b(mdonvi);
output_d(0xfe);
delay_ms(1);
output_b(mchuc);
output_d(0xfd);
delay_ms(1);
}
}
void main()
{set_tris_b(0x00);
set_tris_d(0x00);
while(1)
{for(dem=0;dem<100;dem++)
{div_bcd(dem);
hienthi();
}
}
}
|
Bài lập trình của bạn sai ở hàm hiển thị. Tuy nhiên lập trình như vậy còn lủng cũng quá. Tôi sửa bài của bạn lại như thế này:
#include <16f877A.h>
#fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(d)
byte const ma7doan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0};
void hienthi(int so)
{
int hc,hdv;
hc=so/10;
hdv=so%10;
//hien thi so hang chuc
output_low(pin_a4);//cho chan a4 xuong muc thap--->>>qua transitor(PNP)--->>>>tich cuc led hang chuc
output_high(pin_a5);//cho chan a4 len muc cao--->>>qua transitor(PNP)--->>>>khoa led hang don vi
output_b(ma7doan[hc]);//hien thi so hangf chuc da chuyen doi BCD
delay_ms(100);//thay doi tuy theo ban chon thach anh
//hien thi so hang don vi
output_high(pin_a4);
output_low(pin_a5);
output_b(ma7doan[hdv]);
delay_ms(100);
}
void main()
{
int8 count=0;
int8 i;
set_tris_b(0x00);
//set_tris_a(0x00);
while(1)
{
for(i=0;i<2;i++)//vong for de lap hien thi, de tao thoi` gian tre
{
hienthi(count);
count++;
if(count==10) count=0; //reset lai
}
}
}
chú ý: bài này led hàng chuc được nối với RA4, led hàng đơn vị nối với RA5 qua transitor loại pnp(tíc cực múc 0). port b nói với led7seg