![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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 |
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
#1 |
|
Đệ tử 2 túi
Tham gia ngày: Mar 2012
Bài gửi: 34
: |
Hiện thị số dùng ic 74HC595 + pc 16f877a
Em chỉ muốn hiện thị số lên thôi mà không được, dưới đây là code và mạch mô phỏng = protues, mong anh chị sửa giúp em. thanks
|
|
|
|
|
|
#2 |
|
Đệ tử 3 túi
Tham gia ngày: Apr 2010
Bài gửi: 58
: |
Chương trình này chạy rồi, nhưng bảng mã giải mã led 7 đoạn còn sai nên hiển thị chưa đúng, bạn sửa lại cho đúng nhé
__________________
Mừng năm mới, khuyến mãi đặc biệt giảm giá 20% tất cả các kit từ ngày 01/01/2013 đến ngày 30/03/2013 -> số lượng có hạn nhé. DT: 0983.548.514. www.picdevelopmenttool.webs.com www.smart-house.webs.com www.robot3t.com |
|
|
|
|
|
#3 | |
|
Đệ tử 2 túi
Tham gia ngày: Mar 2012
Bài gửi: 34
: |
Trích:
tks!!1 |
|
|
|
|
|
|
#4 |
|
Đệ tử 3 túi
Tham gia ngày: Apr 2010
Bài gửi: 58
: |
Code của bạn thiếu lệnh dịch bit. Sau khi bạn dịch bit 7 ra chân DS thì bạn dịch bit 6 lên vị trí bit 7 "shift_left(data,1,1);" Dịch số 1 xang bên trái vào biến data. Hoặc dùng lệng data<<=1;
__________________
Mừng năm mới, khuyến mãi đặc biệt giảm giá 20% tất cả các kit từ ngày 01/01/2013 đến ngày 30/03/2013 -> số lượng có hạn nhé. DT: 0983.548.514. www.picdevelopmenttool.webs.com www.smart-house.webs.com www.robot3t.com |
|
|
|
|
|
#5 | |
|
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
#include <def_877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #use delay(clock=20000000) //#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bi ts=9) //Baud_min=4800 Baud_max=115200 //#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8) // Dinh nghia cac chan cho ket noi 74595 //#bit SCL=0x08.7 //#bit DATA=0x08.6 //#bit SCK=0x08.5 #define SCL RD5//đổi lại cho phù hợp phần cứng #define DATA RD6 #define SCK RD7//đổi lại cho phù hợp phần cứng #byte TRISD =0x88 void quet(unsigned char x); unsigned int num=1; unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7 void quet(unsigned char x) { int i,temp; for(i=0;i<8;i++) { temp=x;//gan bien temp=temp&0x80;//lay ra bit dau tien (bit 7) if(temp==0x80)//so sanh bit DATA=1; //bang 1 thi xuat vao chip =1 else DATA=0; //nguoc lai bang 0 x*=2; //dich bit lay bit trong so thap SCK=0; //tao xung tren chan 11 SCK=1; //1 xung dua vào 1 bít } SCL=0; //xuat du lieu ra output SCL=1; } void main() { TRISD=0x00;//thiếu dòng này num=5; while(1) { quet(~ma[num]);//đảo lại mã cho phù hợp phần cứng } }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
|
|
|
|
|
#6 |
|
Đệ tử 2 túi
Tham gia ngày: Mar 2012
Bài gửi: 34
: |
cám ơn anh tdm nha em sửa theo anh va chạy được rồi
Tiện đây em mở rộng thêm 1 tý là hiển thị 4 số VD:1234 em cũng viết rùi cũng không chạy mong anh sửa giúp em ![]() |
|
|
|
|
|
#7 |
|
Đệ tử 6 túi
Tham gia ngày: Feb 2009
Bài gửi: 127
: |
code chạy ok này
|
|
|
|
|
|
#8 | |
|
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
chỉ thế này thôi: Code:
#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
//#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9) //Baud_min=4800 Baud_max=115200
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
// Dinh nghia cac chan cho ket noi 74595
//#bit SCL=0x08.7
//#bit DATA=0x08.6
//#bit SCK=0x08.5
#define SCL RD5
#define DATA RD6
#define SCK RD7
#byte TRISD =0x88
void quet(unsigned char x);
void DCB(void);
unsigned int donvi,chuc,tram,nghin;
int16 num;
unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//ma led 7
void quet(unsigned char x)
{
int i,j,k,u,temp1,temp2,temp3,temp4;
for(i=0;i<8;i++)
{
temp1=x;//gan bien
temp1=temp1&0x80;//lay ra bit dau tien (bit 7)
if(temp1==0x80)//so sanh bit
DATA=1; //bang 1 thi xuat vao chip =1
else
DATA=0; //nguoc lai bang 0
x*=2; //dich bit lay bit trong so thap
SCK=0; //tao xung tren chan 11
SCK=1; //1 xung dua vào 1 bít
}
}
void chot()
{
SCL=0; //xuat du lieu ra output
SCL=1;
}
void DCB(void)
{
nghin=num/1000;
tram=(num%1000)/100;
chuc=(num%100)/10;
donvi=num%10;
}
void main()
{
trisd=0x00;
num=9875;
DCB();
quet(ma[donvi]);
quet(ma[chuc]);
quet(ma[tram]);
quet(ma[nghin]);
chot();
while(1)
{
}
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
|
|
|
|
|
#9 |
|
Đệ tử 2 túi
Tham gia ngày: Mar 2012
Bài gửi: 34
: |
Cách anh tdm ngắn gọn nhỉ cám ơn anh nhiều
![]() Và giờ nếu em mở rộng lên 8 hay 16 con số thì thuật toán của cái code đó như thế nào vậy anh |
|
|
|
|
|
#10 |
|
Nhập môn đệ tử
Tham gia ngày: Apr 2012
Bài gửi: 5
: |
Chào anh"tdm". Anh giải thích cho em 2 dòng lệnh này nhé, em chưa hiểu lắm. thank anh.
temp=temp&0x80; x*=2; |
|
|
|
![]() |
|
|