74HC595 + 2segment ขอคำแนะนำด้วยครับ

Started by kira, August 20, 2014, 10:22:27 PM

Previous topic - Next topic

kira




จากรูปผมเลือกใช้ 12f683 แทนไมโครในภาพ
และนี่คือโค๊ด ใช้กับ 74HC595 แค่ตัวเดียว ถ้าเกิดผมจะใช้ 2ตัว แบบในรูปผมตรงแก้ไขตรงไหนครับ
unsigned char count=0;
unsigned char segment[10] = {
  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
/////////////////////////Phototype Function/////////////////////////////////
void delay(int time);
void send_data(unsigned char data);
main()
{
  CMCON0 = 7;
  ANSEL = 0;
  TRISIO = 0b00001000;
  GP0=0;
  GP1=0;
  GP2=0;
  while (1)
  {
    if(count<10)
    {
      send_data(segment[count]);
      count++;
      delay(5);
    }
    else
    {
      count=0;
    }
  }
}
void send_data(unsigned char data)
{
  unsigned char k;
  GP0 = 0; // low
  GP1 = 0; // clock low
  for (k=0;k<8;k++)
  {
    GP2 = (data&0x80); // send data MSB before
    GP1 = 1; // clock high
    data<<=1; // shift data
    GP1 = 0; // clock low
  }
  GP0 = 1; //Latch high
}
void delay(int time)
{
  unsigned char i;
  for(i=0;i<time;i++)
  {
    __delay_ms(100);
  }
}
รับดีดบ้าน สร้างบ้าน ยกบ้าน ด้วยช่างมืออาชีพกว่า20ปีในราคาชาวบ้าน
http://www.d-karnchang.com

JENG


void send_data(unsigned int data)
{
  unsigned char k;
  GP0 = 0; // low
  GP1 = 0; // clock low
  for (k=0;k<16;k++)
  {
    GP2 = (data&0x80); // send data MSB before
    GP1 = 1;    // clock high
    data<<=1; // shift data
    GP1 = 0; // clock low
  }
  GP0 = 1; //Latch high
}
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

kira


แล้วตรงนี้ผมต้องเปลี่ยนค่าเป็นหลัก10ได้ยังไงครับ

if(count<10)
    {
      send_data(segment[count]);
      count++;
      delay(5);
    }
รับดีดบ้าน สร้างบ้าน ยกบ้าน ด้วยช่างมืออาชีพกว่า20ปีในราคาชาวบ้าน
http://www.d-karnchang.com


JENG

Quote from: kira on August 24, 2014, 12:18:01 AM

แล้วตรงนี้ผมต้องเปลี่ยนค่าเป็นหลัก10ได้ยังไงครับ

if(count<10)
    {
      send_data(segment[count]);
      count++;
      delay(5);
    }



union
{
    unsigned int xint16;
    struct
    {
        unsigned char xint8lsb;
        unsigned char xint8msb;
    };
}data;

if(count<10)
    {
      data.xint8msb = segment[count/10];
      data.xint8lsb = segment[count%10];
      send_data(data.xint16);
      count++;
      delay(5);
    }
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺