Hiện thị số dùng ic 74HC595 + pc 16f877a
1 Attachment(s)
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
|
1 Attachment(s)
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é
|
Trích:
tks!!1 |
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;
|
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 } } |
1 Attachment(s)
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 :) |
1 Attachment(s)
code chạy ok này
|
Trích:
chỉ thế này thôi: Code:
|
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 |
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; |
Múi giờ GMT. Hiện tại là 03:24 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