Thông báo

Collapse
No announcement yet.

thắc mắc về code 7seg HELP!

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

  • thắc mắc về code 7seg HELP!

    Tình hình là e đã tạo được code cho 4 led 7 đoạn, quét số từ bàn phím rồi hiện thị số trên 4 led 7seg 4 con số được nhập từ phím. e có thắc mắc là khi đã nhập xog 4 chữ số (vd: 0123) thì khi nhập tiếp số 4 led 7 đoạn sẽ quay về giá trị 0000 và led thứ nhất(hàng nghìn) nhận giá trị số vừa nạp từ bàn phím. e muốn hỏi phải làm sao khi đã nhập 4 giá trị cho 4 led 7 đoạn và khi nhập tiếp 1 chữ số từ bàn phím thì led 7seg "hàng nghìn" sẽ lấy giá trị của led "hàng trăm" trc đó, tương tự cho led "hàng trăm và chục", còn led 7seg hàng đơn vị sẽ nhận giá trị vừa nhập.
    VD: nhập 4 giá trị từ bàn phím là "1, 2, 3, 4" ,trên 4 led 7seg sẽ là "1234" thì sau đó nhập thêm số 5 từ phím thì 4 led 7 seg sẽ hiện thị là "2345" tương tự nhập tiếp số 7 thì sẽ là "3457" ... và khi nhập chữ từ bàn phím thì sẽ hiện chữ "err".
    Mong mọi người giúp đỡ, e xin chân thành cám ơn!

  • #2
    post code len moi nguoi moi giup dc chu pro

    Comment


    • #3
      đây bạn:
      #include <reg51.h>
      #include <absacc.h>
      #define Data_LED 0x4000
      #define LED0 0x6000
      #define LED1 0x6001
      #define LED2 0x6002
      #define LED3 0x6003


      sbit h1 = P1^0;
      sbit h2 = P1^1;
      sbit h3 = P1^2;
      sbit h4 = P1^3;
      sbit C1 = P1^4;
      sbit C2 = P1^5;
      sbit C3 = P1^6;
      sbit C4 = P1^7;



      void kiemtra(void);

      //#define Chot_LED 0x6000;
      //--------------------------
      //ham delay
      /*void delay(unsigned long x)
      {
      unsigned long i, j;
      for(i=0;i<x;i++);
      {
      for(j=0;j<125;j++);
      }
      } */
      void delay(unsigned long x)
      {
      TL0=(65535-x)%256;
      TH0=(65535-x)/256;
      TR0=1; //bat timer0
      while(!TF0)
      {

      }
      TR0=0; //tat timer0
      TF0=0; //tat co ngat

      }
      //--------------------------
      //ham tra ma bcd

      unsigned char bcd(unsigned char x)
      {
      unsigned char y[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0,0xFF};
      return y[x];
      }
      //doc phim
      unsigned char Read_key(void)
      {
      P1=0xFF;
      C1=0;
      if(h1==0)
      {
      return 0;
      }
      if(h2==0)
      {
      return 4;
      }
      if(h3==0)
      {
      return 8;
      }
      if(h4==0)
      {
      return 0x0C;
      }
      //-----------------
      P1=0xFF;
      C2=0;
      if(h1==0)
      {
      return 1;
      }
      if(h2==0)
      {
      return 5;
      }
      if(h3==0)
      {
      return 9;
      }
      if(h4==0)
      {
      return 0x0D;
      }
      //-------------------------
      P1=0xFF;
      C3=0;
      if(h1==0)
      {
      return 2;
      }
      if(h2==0)
      {
      return 6;
      }
      if(h3==0)
      {
      return 0x0A;
      }
      if(h4==0)
      {
      return 0x0E;
      }
      //-----------------------------
      P1=0xFF;
      C4=0;
      if(h1==0)
      {
      return 3;
      }
      if(h2==0)
      {
      return 7;
      }
      if(h3==0)
      {
      return 0x0B;
      }
      if(h4==0)
      {
      return 0x0F;
      }
      return 0xFF;
      }

      //--------------------------
      //hien thi LEd
      void screen(unsigned long x)
      {
      unsigned long z;
      unsigned char temp0,temp1,temp2,temp3;
      z=x;
      temp0=x%10; //so hang don vi
      x=x/10;
      temp1=x%10; //so hang chuc
      x=x/10;
      temp2=x%10; //so hang tram
      temp3=x/10; //so hang nghin
      if(z<1000)
      {
      temp3=10; // m xoa lED
      }
      if(z<100)
      {
      temp3=10; // m xoa lED
      temp2=10;
      }
      if(z<10)
      {
      temp3=10; // m xoa lED
      temp2=10;
      temp1=10;
      }
      //tat LED0,LED1,LED2,LED3
      /* XBYTE[Data_LED]=0xFF;
      XBYTE[LED0]=0x00;
      XBYTE[LED1]=0x00;
      XBYTE[LED2]=0x00;
      XBYTE[LED3]=0x00; */
      //hien thi LED0
      XBYTE[Data_LED]=bcd(temp0);
      XBYTE[LED3]=1;
      delay(50000);
      XBYTE[LED3]=0x00;
      //hien thi LED1
      XBYTE[Data_LED]=bcd(temp1);
      XBYTE[LED2]=1;
      delay(50000);
      XBYTE[LED2]=0x00;
      //hien thi LED2
      XBYTE[Data_LED]=bcd(temp2);
      XBYTE[LED1]=1;
      delay(50000);
      XBYTE[LED1]=0x00;
      //hien thi LED3
      XBYTE[Data_LED]=bcd(temp3);
      XBYTE[LED0]=1;
      delay(50000);
      XBYTE[LED0]=0x00;
      }
      //============================================
      //doc ban phim don gian
      unsigned long read_data_1(void)
      {

      unsigned char i,key,x0,x1,x2,x3;
      //nhap hang nghin
      do
      {
      key=Read_key();
      x3=key;
      }while(key==255);
      for(i=0;i<20;i++)
      {
      screen(x3*1000);
      }
      //nhap hang tram
      do
      {
      key=Read_key();
      x2=key;
      }while(key==255);
      for(i=0;i<20;i++)
      {
      screen(x3*1000+x2*100);
      }
      //nhap hang chuc
      do
      {
      key=Read_key();
      x1=key;
      }while(key==255);
      for(i=0;i<20;i++)
      {
      screen(x3*1000+x2*100+x1*10);
      }
      //nhap hang don vi
      do
      {
      key=Read_key();
      x0=key;
      }while(key==255);
      for(i=0;i<20;i++)
      {
      screen(x3*1000+x2*100+x1*10+x0);
      }
      return (x3*1000+x2*100+x1*10+x0);
      }

      //--------------------------
      void main(void)
      {
      TMOD = 0x01;
      while(1)
      {
      kiemtra();
      }
      }

      Comment


      • #4
        Chào bạn
        Bạn khai báo x0, x1, x2, x3 là biến static hoặc global, Khởi tạo ban đầu tất cả đều = 0;
        mỗi khi nhập một số bạn thực hiện đoạn code sau:
        key = Read_key();
        if(key >= 0 && key <= 9)
        {
        x3 = x2;
        x2 = x1 ;
        x1 = x0;
        x0 = key;
        screen(x3*1000+x2*100+x1*10+x0) để hiển thị
        }else
        {
        err_display();
        }

        ví dụ:
        nhập 1 => x3 = x2 = 0; x2 = x1 = 0; x1 = x0 = 0; x0 = key = 1; screen(x3*1000+x2*100+x1*10+x0) <=> screen(1);
        nhập 2 => x3 = x2 = 0; x2 = x1 = 0; x1 = x0 = 1; x0 = key = 2; screen(x3*1000+x2*100+x1*10+x0) <=> screen(12);
        nhập 3 => x3 = x2 = 0; x2 = x1 = 1; x1 = x0 = 2; x0 = key = 3; screen(x3*1000+x2*100+x1*10+x0) <=> screen(123);
        nhập 4 => x3 = x2 = 1; x2 = x1 = 2; x1 = x0 = 3; x0 = key = 4; screen(x3*1000+x2*100+x1*10+x0) <=> screen(1234);
        nhập 5 => x3 = x2 = 2; x2 = x1 = 3; x1 = x0 = 4; x0 = key = 5; screen(x3*1000+x2*100+x1*10+x0) <=> screen(2345);
        .
        .
        .
        .
        .
        .
        Chúc bạn thành công
        0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
        ||
        PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X