Chào các bác, e đang định làm cái đồng hồ led về treo ở nhà, có chút vấn đề nhờ các bác giúp đỡ.
Em đang mắc ở chỗ dùng 595 điều khiển led 7 thanh của đồng hồ ( hiển thị giờ phút giây, ngày tháng năm ).
Em định dùng 2 con 7447 để nối với các chân led, dùng 6 chân của 595 điều khiển việc cấp nguồn cho led 7 thanh.
nhưng vấn đề của em là trong 1 con led đôi thì chỉ có 1 con sáng, mặc dù em đã cho thời gian điều khiển của các led sáng là như nhau (1ms) ( như trong hình)
với khoảng thời gian là 1ms thì bị lỗi, trong khi em thử chỉnh thời gian lên 1s thì trong mô phỏng vẫn thấy đúng, tức là các chân của 595 chuyển đúng trong khoảng 1s.
còn đây là hàm điều khiển led 7 thanh, em nghĩ lỗi chắc nằm trong chỗ này ( ban đầu em định dùng từng chân của vdk để điều khiển led nhưng thấy tốn chân quá nên mới chuyển sang dùng 595 )
và hàm điều khiển 595
em xin gửi kèm file code và mô phỏng, mong các bác giúp đỡ, thanks vì đã đọc bài của em!!!
dong ho.zip
Em đang mắc ở chỗ dùng 595 điều khiển led 7 thanh của đồng hồ ( hiển thị giờ phút giây, ngày tháng năm ).
Em định dùng 2 con 7447 để nối với các chân led, dùng 6 chân của 595 điều khiển việc cấp nguồn cho led 7 thanh.
nhưng vấn đề của em là trong 1 con led đôi thì chỉ có 1 con sáng, mặc dù em đã cho thời gian điều khiển của các led sáng là như nhau (1ms) ( như trong hình)
Code:
count_led++; if(count_led>5){ // 5*0.2=1ms cho moi lan cap nguon cho led display_led7seg(); count_led=0; if(f_sec>5) f_sec=0; // chi dung 6 chan cua 595 ++f_sec;
còn đây là hàm điều khiển led 7 thanh, em nghĩ lỗi chắc nằm trong chỗ này ( ban đầu em định dùng từng chân của vdk để điều khiển led nhưng thấy tốn chân quá nên mới chuyển sang dùng 595 )
Code:
while(1) { output_b(sum1); } void display_led7seg(){ //switch(f_sec){ if(f_sec==1){ //case 1: { //rc1=0;rc5=0;rc6=0;rc7=0;rd0=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; //output_b((sec&0xf0)>>4); sum1=((sec&0xf0)|(date&0x0f)); quet(1); //rc0=1; } else if(f_sec==2){ //case 2: { //rc0=0;rc5=0;rc6=0;rc7=0;rd0=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; //output_b(sec&0x0f); sum1=(((sec&0x0f)<<4)|((date&0xf0)>>4)); quet(2); //rc1=1; } else if(f_sec==3){ //case 3: { //rc6=0;rc0=0;rc1=0;rc7=0;rd0=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; //output_b((min&0xf0)>>4); sum1=((min&0xf0)|(month&0x0f)); quet(4); //rc5=1; } else if(f_sec==4){ //case 4: { //rc5=0;rc0=0;rc1=0;rc7=0;rd0=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; sum1=(((min&0x0f)<<4)|((month&0xf0)>>4)); //output_b(min&0x0f); quet(8); //rc6=1; } else if(f_sec==5){ //case 5: { //rc0=0;rc5=0;rc6=0;rc1=0;rd0=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; sum1=((hour&0xf0)|(year&0x0f)); quet(16); //output_b((hour&0xf0)>>4); //rc7=1; } else { //default :{ //case 6: { //rc5=0;rc0=0;rc1=0;rc7=0;rc6=0; //rc2=0;rd3=0;rd4=0;rd5=0;rd6=0;rd7=0; //output_b(hour&0x0f); sum1=(((hour&0x0f)<<4)|((year&0xf0)>>4)); quet(32); //rd0=1; // } }
Code:
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<<=1; //dich bit lay bit trong so thap SCK=0; //tao xung tren chan 11 SCK=1; //1 xung dua vào 1 bit } SCL=0; //xuat du lieu ra output SCL=1; }
dong ho.zip
Comment