Thông báo

Collapse
No announcement yet.

Xin giúp đỡ về dùng 74hc595 điều khiển led trong mạch đồng hồ thời gian thực

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Xin giúp đỡ về dùng 74hc595 điều khiển led trong mạch đồng hồ thời gian thực

    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.
    Click image for larger version

Name:	1.jpg
Views:	1
Size:	126.1 KB
ID:	1416147
    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)
    Click image for larger version

Name:	U.jpg
Views:	1
Size:	109.6 KB
ID:	1416149
    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;
    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 )
    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;
    //         }
       }
    và hàm điều khiển 595
    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;
             }
    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

  • #2
    các bác giúp em với!

    Comment

    Về tác giả

    Collapse

    nqtpro Tìm hiểu thêm về nqtpro

    Bài viết mới nhất

    Collapse

    Đang tải...
    X