PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 25-04-2011, 12:22 PM   #1
nangvang
Đệ tử 1 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 23
:
hỏi về quét 2 led 7 thanh

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);
}
}
}
Hình Kèm Theo
File Type: jpg mach.jpg (113.0 KB, 36 lần tải)
nangvang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2011, 03:20 PM   #2
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi nangvang View Post
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
Hình Kèm Theo
File Type: jpg dem_7doan.jpg (162.3 KB, 14 lần tải)
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.

thay đổi nội dung bởi: tdm, 25-04-2011 lúc 03:31 PM.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2011, 10:25 PM   #3
tanbka
Đệ tử 5 túi
 
Tham gia ngày: Dec 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 91
:
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.
tanbka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-10-2012, 09:31 PM   #4
hantruongthe
Nhập môn đệ tử
 
Tham gia ngày: Oct 2012
Bài gửi: 1
:
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])
}
}
}
}
hantruongthe vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-12-2012, 02:39 PM   #5
huydungsh
Nhập môn đệ tử
 
Tham gia ngày: Sep 2011
Bài gửi: 10
:
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;
}
}
}
huydungsh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-12-2012, 04:27 AM   #6
hatuan296
Làm quen với PIC
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: Hcm
Bài gửi: 160
:
Trích:
Nguyên văn bởi hantruongthe View Post
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 .
hatuan296 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-12-2012, 08:08 PM   #7
cuongadn90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 16
:
cai nayf co bac nao dung ngat timer khong post len xem
__________________
Nguyễn Văn Cương
email :cuongadn90@gmail.com
cuongadn90@yahoo.com.vn
sdt 0973700862
cuongadn90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:40 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam