![]() |
|
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
: |
![]() Vấn đề của em như sau:
Từ VB em truyền 16 ký tự số xuống pic16f877a(lưu các giá trị nhận được từ VB vao eeprom của con pic >> lưu thế này không biết có được không ạ ) và cho hiển thị lên led 7 đoạn(A chung),sử dung IC giải mã 74hc595, em đã viết rồi mà không chạy. Mong anh chị xem và sửa giúp em, em xin cám ơn. #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,bi ts=9) //Baud_min=4800 Baud_max=115200 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=9) // 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 layma(); void luudata(char a); void display(); unsigned char Mrs232[];//mang nhan gia tri tu rs232 unsigned int Z[];//mang chua cac gia tri led7 unsigned int count; unsigned char ma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7 #INT_RDA Receive_isr() { char c; c=getch(); luudata(c); } void luudata(char a) {int i; for(i=0;i<16;i++) { write_eeprom(i,Mrs232[i]); } } void quet(unsigned char x) { int i,temp1; 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 display() { int i; for(i=0;i<16;i++) { quet(Mrs232[i]); } SCL=0; //xuat du lieu ra output SCL=1; } void layma() { int i,j; for(i=0;i<16;i++) { j=Mrs232[i]-48; if(j>9) Z[i]=ma[0]; else Z[i]=ma[j]; } } void main() { int i; enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); trisd=0x00; trisc=0x00; for(i=0;i<16;i++) { Mrs232[i] = read_eeprom(i); } layma(); while(1) { display(); delay_ms(500); } } |
![]() |
![]() |
|
|