Network clock using 7 segment.

Dependencies:   SNTPClient WIZnetInterface mbed

Fork of mbed_blinky by Mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers segment.cpp Source File

segment.cpp

00001 #include "mbed.h"
00002 #include "segment.h"
00003 Serial pc1(USBTX,USBRX);
00004 
00005 BusOut Seg_num(D0,D1,D2,D3,D4,D5,D6,D7);
00006 BusOut Seg_Sel(D8,D9,D10,D11,D12,D13,D14,D15);
00007 
00008 uint8_t SEGMENTS[37] = {
00009         //*********************************************************
00010         // 7segment pattern,
00011         //*********************************************************
00012         //      seg: g f e  d c b a
00013         //      bit: 6 5 4  3 2 1 0
00014         //      --------------------
00015         0xC0,        // 0         1 0 0  0 0 0 0
00016         0xF9,        // 1         1 1 1  1 0 0 1
00017         0xA4,        // 2         0 1 0  0 1 0 0
00018         0xB0,        // 3         0 1 1  0 0 0 0
00019         0x99,        // 4         0 0 1  1 0 0 1
00020         0x92,        // 5         0 0 1  0 0 1 0
00021         0x82,        // 6         0 0 0  0 0 1 0
00022         0xD8,        // 7         1 0 1  1 0 0 0
00023         0x80,        // 8         0 0 0  0 0 0 0
00024         0x90,        // 9         0 0 1  0 0 0 0
00025         0x88,        // A         0 0 0  1 0 0 0
00026         0x83,        // B         0 0 0  0 0 1 1
00027         0xC6,        // C         1 0 0  0 1 1 0
00028         0xA1,        // D         0 1 0  0 0 0 1
00029         0x86,        // E         0 0 0  0 1 1 0
00030         0x8E,        // F         0 0 0  1 1 1 0
00031         0xC2,        // G         1 0 0  0 0 1 0
00032         0x8B,        // H         0 0 0  1 0 1 1
00033         0xCF,        // I         1 0 0  1 1 1 1
00034         0xE1,        // J         1 1 0  0 0 0 1
00035         0x8A,        // K         0 0 0  1 0 1 0
00036         0xC7,        // L         1 0 0  0 1 1 1
00037         0xEA,        // M         1 1 0  1 0 1 0
00038         0xAB,        // N         0 1 0  1 0 1 1
00039         0xA3,        // O         0 1 0  0 0 1 1
00040         0x8C,        // P         0 0 0  1 1 0 0
00041         0x98,        // Q         0 0 1  1 0 0 0
00042         0xCC,        // R         1 0 0  1 1 0 0
00043         0x96,        // S         0 0 1  0 1 1 0
00044         0x87,        // T         0 0 0  0 1 1 1
00045         0xE3,        // U         1 1 0  0 0 1 1
00046         0xC1,        // V         1 0 0  0 0 0 1
00047         0xD5,        // W         1 0 1  0 1 0 1
00048         0x89,        // X         0 0 0  1 0 0 1
00049         0x91,        // Y         0 0 1  0 0 0 1
00050         0xB4,        // Z         0 1 1  0 1 0 0
00051         0xFF         //           1 1 1  1 1 1 1
00052         };
00053 
00054 uint8_t SEGMENT_SEL[9] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
00055 
00056 void Seg_Drive(int seg, int num, int dot)
00057 {
00058     Seg_num = 0xff;
00059     Seg_Sel = SEGMENT_SEL[seg];
00060     if(dot == 1)
00061     {
00062         Seg_num = SEGMENTS[num] & 0x7F;
00063     }
00064     else
00065     {
00066         Seg_num = SEGMENTS[num];
00067     }
00068     wait_ms(1);
00069 }
00070 
00071 void Seg_Test()
00072 {
00073     for(int j = 1 ; j <9 ; j++)
00074     {            
00075         pc1.printf("SEGMENT_SEL : %x\r\n",SEGMENT_SEL[j]);           
00076         for(int i = 0; i<10 ; i++)
00077         {
00078             Seg_Drive(j,i,1);
00079             pc1.printf("Seg Num : %d\r\n",i);
00080             wait(0.05);
00081         }
00082     }
00083     Seg_num = 0xff;
00084 }
00085 
00086 void Seg_Reset()
00087 {
00088     Seg_num = 0xff;
00089     Seg_Sel = 0x00;
00090 }
00091 
00092 void display_ymd(char buffer[])
00093 {
00094     int dot = 0;
00095     for(int i = 0 ; i <= 7 ; i++)
00096     {
00097         if(i == 3)      dot = 1;
00098         else if(i == 5) dot = 1;
00099         else if(i == 7) dot = 1;
00100         else            dot = 0;
00101         buffer[i] -= 48;
00102         Seg_Drive(i+1,buffer[i],dot);
00103     }
00104     
00105 }
00106 
00107 void display_hms(char buffer[])
00108 {
00109     int dot = 0;
00110     for(int i = 0 ; i < 6 ; i++)
00111     {
00112         if(i == 1)      dot = 1;
00113         else if(i == 3) dot = 1;
00114         else if(i == 5) dot = 1;
00115         else            dot = 0;
00116         buffer[i] -= 48;
00117         Seg_Drive(i+2,buffer[i],dot);
00118     }
00119 }