PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   hỏi về quét 2 led 7 thanh (http://www.picvietnam.com/forum/showthread.php?t=8990)

nangvang 25-04-2011 12:22 PM

hỏi về quét 2 led 7 thanh
 
1 Attachment(s)
các anh ơi giúp em doạn code này với
em định cho 2 led đếm từ 00 đến 99 không dùng ngắt mà dùng delay
nhưng khi chạy mô phỏng thì chỉ thấy nó nhấp nháy vài thanh của led thôi
các anh kiểm tra code giúp em với
em cam ơn
#include <16F877A.h>
#Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use fast_io(c)
#use fast_io(d)
int8 font[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
void main ()
{
unsigned int8 i;
set_tris_c(0);
set_tris_d(0);
output_d(0xff);
while(1)
{

for(i=0;i<=100;i++);
{
output_d(0xfe);
output_c(font[i/10]);
delay_ms(50);
output_d(0xfd);
output_c(font[i%10]);
delay_ms(50);
}
}
}

tdm 25-04-2011 03:20 PM

1 Attachment(s)
Trích:

Nguyên văn bởi nangvang (Post 44321)
các anh ơi giúp em doạn code này với
em định cho 2 led đếm từ 00 đến 99 không dùng ngắt mà dùng delay
nhưng khi chạy mô phỏng thì chỉ thấy nó nhấp nháy vài thanh của led thôi
các anh kiểm tra code giúp em với
em cam ơn
#include <16F877A.h>
#Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use fast_io(c)
#use fast_io(d)
int8 font[10]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
void main ()
{
unsigned int8 i;
set_tris_c(0);
set_tris_d(0);
output_d(0xff);
while(1)
{

for(i=0;i<=100;i++);
{
output_d(0xfe);
output_c(font[i/10]);
delay_ms(50);
output_d(0xfd);
output_c(font[i%10]);
delay_ms(50);
}
}
}

sai ở đây:
for(i=0;i<=100;i++); bỏ dấu chấm phẩy đi
tạo thêm vòng lặp nữa để đếm chậm lại.
thay 2con tranzitor bằng cổng đảo.
Code:

#include <16F877A.h>
#Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use fast_io(c)
#use fast_io(d)
const unsigned char font[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
int8 i,a;
void main ()
{

set_tris_c(0);
set_tris_d(0);
output_d(0x00);
while(1)
{

for(i=0;i<=100;i++)
{
 for(a=0;a<=100;a++)
 {
 
output_d(0xfe);
output_c(font[i/10]);
delay_ms(1);
output_c(0xff);
output_d(0xfd);
output_c(font[i%10]);
delay_ms(1);
output_c(0xff);
 }
 
}

}
}

http://www.youtube.com/watch?v=XFRGEs2XMy0

tanbka 25-04-2011 10:25 PM

Về chương trình bạn sửa như bác tdm đã chỉ giáo.
Còn về phần Mạch nguyên lý thì bạn dùng transitor hay cổng đảo cũng được, có điều bạn phải chú ý mã hóa kẻo bị đảo mã, nhưng theo mình bạn nên dùng transitor, như thế sau này sẽ dễ mở rộng cho những dự án cần dòng lớn hơn. Đồng thời bạn nên thêm trở hạn dòng vào các thanh cho LED.

hantruongthe 09-10-2012 09:31 PM

các bác cho e hỏi thăm. e lập trình cho 16f877a quét led 7 đoạn giảm dần nhưng khi về đến 00 thì nó đứng yên số 1. bác xem thử code em sai chỗ nào. e mới học nghề thôi. em ko biết gửi mô phỏng lên như thế nào. các bác thông cảm. cám ơn nhiều
code:
#include <16f877a.h>
#use delay(clock=4000000)
#Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use fast_io(d)
#byte portd=0x08
#use fast_io(c)
#byte portc=0x07
int8 i,j,k,m;
Int8 bm[10]={0b00111111,0b00000110,0b01011011,
0b01001111,0b01100110,0b01101101,0b01111101,
0b00000111,0b01111111,0b01101111};
void main()
{
set_tris_d(0);
Set_tris_c(0);
while(1)
{
for(m=10;m>=0;m--)
{
for(k=0;k<=50;k++)
{
output_d(0b00000010);
Output_c(bm[m/10]);
delay_ms(40);
output_c(bm[0]);
output_d(0b00000001);
Output_c(bm[m%10]);
delay_ms(40);
output_c(bm[0])
}
}
}
}

huydungsh 14-12-2012 02:39 PM

mình có làm 1 cái đếm từ 0000>>9999 bạn xem thử được không
#include <16f877a.h>
//#include< def_877a.h>
#fuses hs,nolvp,nowdt,put
#use delay(clock=20000000)
#use fast_io(B)
#use fast_io(C)
int16 gian,i,j,dem,nghin,tram,chuc,dv;
unsigned char MA7DOAN[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,
0x7D,0x07,0x7F,0x6F};
void main ()
{
set_tris_b(0x00);
set_tris_c(0x00);
while (1)
{
for(dem=0;dem<=9999;dem++)
{
gian=dem;
nghin=dem/1000;
dem=dem%1000;
tram=dem/100;
dem=dem%100;
chuc=dem/10;
dv=dem%10;
for(j=0;j<=100;j++)
{
output_c(0xbf);
output_b(MA7DOAN[dv]);
delay_us(1000);
output_c(0xdf);
output_b(MA7DOAN[chuc]);
delay_us(1000);
output_c(0xef);
output_b(MA7DOAN[tram]);
delay_us(1000);
output_c(0Xf7);
output_b(MA7DOAN[nghin]);
delay_us(1000);
}
dem=gian;
}
}
}

hatuan296 15-12-2012 04:27 AM

Trích:

Nguyên văn bởi hantruongthe (Post 78339)
các bác cho e hỏi thăm. e lập trình cho 16f877a quét led 7 đoạn giảm dần nhưng khi về đến 00 thì nó đứng yên số 1. bác xem thử code em sai chỗ nào. e mới học nghề thôi. em ko biết gửi mô phỏng lên như thế nào. các bác thông cảm. cám ơn nhiều
code:
#include <16f877a.h>
#use delay(clock=4000000)
#Fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use fast_io(d)
#byte portd=0x08
#use fast_io(c)
#byte portc=0x07
int8 i,j,k,m;
Int8 bm[10]={0b00111111,0b00000110,0b01011011,
0b01001111,0b01100110,0b01101101,0b01111101,
0b00000111,0b01111111,0b01101111};
void main()
{
set_tris_d(0);
Set_tris_c(0);
while(1)
{
for(m=10;m>=0;m--)
{
for(k=0;k<=50;k++)
{
output_d(0b00000010);
Output_c(bm[m/10]);
delay_ms(40);
output_c(bm[0]);
output_d(0b00000001);
Output_c(bm[m%10]);
delay_ms(40);
output_c(bm[0])
}
}
}
}

Vòng lặp này :

{
for(m=10;m>=0;m--)
{

bạn sửa thử là

for(m=10;m=0;m--) hoặc for(m=10;m<1;m--) xem sao nha .

cuongadn90 15-12-2012 08:08 PM

cai nayf co bac nao dung ngat timer khong post len xem


Múi giờ GMT. Hiện tại là 01:39 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam