|
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 |
07-04-2012, 12:58 AM | #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
|
07-04-2012, 10:25 AM | #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 |
07-04-2012, 11:24 AM | #3 | |
Đệ tử 2 túi
Tham gia ngày: Mar 2012
Bài gửi: 34
: |
Trích:
tks!!1 |
|
07-04-2012, 03:00 PM | #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 |
07-04-2012, 03:49 PM | #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 đề. |
|
08-04-2012, 09:57 PM | #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 |
09-04-2012, 12:13 AM | #7 |
Đệ tử 6 túi
Tham gia ngày: Feb 2009
Bài gửi: 127
: |
code chạy ok này
|
09-04-2012, 04:14 PM | #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 đề. |
|
09-04-2012, 09:28 PM | #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 |
21-05-2012, 10:46 PM | #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; |
|
|