كود:
/******************************************************
LED Matrix Display
Display multi fixed character : A,B,C,D,E,+,<--->, face , Allah , ......
Using functions
*******************************************************/
#include <16F877A.h> //
#use delay(clock=4000000) // oscillator frequency used for delay function
//1-Define Matrix Character Information as 8 byte array
int8 A[]={0xFF,0x03,0x01,0xEE,0xEE,0x01,0x03,0xFF}; // A , on cathodes , 0 0n , 1 off
int B[]={0XFF,0X91,0X6E,0x6E,0X6E,0X00,0X00,0xFF};
int C[]={0XFF,0X99,0X18,0X3C,0X3C,0X00,0X81,0xFF};
int D[]={0XFF,0X81,0X42,0X3C,0X3C,0X00,0X00,0xFF};
int E[]={0XFF,0X3C,0X24,0X24,0X24,0X00,0X00,0xFF};
int plus[]={0XFF,0XE7,0XE7,0X81,0X81,0XE7,0XE7,0XFF};
int double_arrow[]={0XFF,0XDB,0XBD,0X00,0X00,0XBD,0XDB,0XFF};
int face[]={0XC3,0XBD,0X6A,0X5E,0X5E,0X6A,0XBD,0XC3};
int Allah[]={0X01,0X01,0X7F,0X01,0X7F,0X07,0XB7,0XCF};
int Love[]={0XE3,0XC1,0X81,0X03,0X03,0X81,0XC1,0XE3};
int Arrow[]={0XDF,0XCF,0XC7,0X00,0X00,0XC7,0XCF,0XDF};
//2-******* ROW Selection Function (scanning) using switch(select)************
int select_ROW (int s) // return int , s=0 for ROW 1 , s=1 for ROW 2 ........
{
switch (s)
{
case 0: return(1);break; // 1. ROW 1 ON, AND other ROWs OFF 0b00000001 PIN_D0 = 1 pin 1 0ff Protus LED matrix
case 1: return(2);break; // 2. ROW 2 ON, AND other ROWs OFF 0b00000010 PIN_D1 = 1
case 2: return(4);break; // 3. ROW 3 ON, AND other ROWs OFF 0b00000100 PIN_D2 = 1
case 3: return(8);break; // 4. ROW 4 ON, AND other ROWs OFF 0b00001000 PIN_D3 = 1
case 4: return(16);break; // 5. ROW 5 ON, AND other ROWs OFF 0b00010000 PIN_D4 = 1
case 5: return(32);break; // 6. ROW 6 ON, AND other ROWs OFF 0b00100000 PIN_D5 = 1
case 6: return(64);break; // 7. ROW 7 ON, AND other ROWs OFF 0b01000000 PIN_D6 = 1
case 7: return(128);break;// 8. ROW 8 ON, AND other ROWs OFF 0b10000000 PIN_D7 = 1
}
}
//3-******* Matrix Data sending Function*******
void send_characters_matrix (char character[], int repeat) // return void , 2 arguments : character array and no. of repeat
{
int i,j; // Counter loops Variables
for (i=1;i<repeat;i++) // No. of repeated cycles (loops) to display each character on LED matrix
{
for(j=0;j<8;j++) // 8 Bytes each character display process cycle (loop) is made up of :
{
output_D(select_ROW(j)); //1-For each ROW : select ROW to get function return,and send the value to port D for scanning
output_B(character[j]); //2- For this ROW:Send character data to columns connected to port B to display information
delay_ms(5); // Short delay
}
}
}
/********* main function********/
void main ()
{
while(true)
{
send_characters_matrix (A,25);// Show character "A" : arguments : array A ,25 repeat times
send_characters_matrix (B,25);// Show character "B"
send_characters_matrix (C,25);// Show character "C"
send_characters_matrix (D,25);// Show character "D"
send_characters_matrix (E,25);// Show character "E"
send_characters_matrix (plus,25);//Show character "+"
send_characters_matrix (double_arrow,25);// Show character "<-->" Two-way arrows
send_characters_matrix (face,25);// Show face
send_characters_matrix (Allah,25);// Show Allah
send_characters_matrix (Love,25);// Show Love
send_characters_matrix (Arrow,25);// Show Arrow
}
}