際際滷

際際滷Share a Scribd company logo
Thit k m孫ch logic s竪                                                Phn III: Phn mm 速iu
khin

                                    ch測ng I: Ph息n tch ch測ng trnh
                   Ch測ng trnh 速iu khin 速樽c vit b損ng ng束n ng歎 C, ch孫y trong m束i tr棚ng
    DOS. Y捉u cu c単a ch測ng trnh l袖 ph其i c達 m辿t giao din th息n thin, gi坦p ng棚i d誰ng d d袖ng
    d誰ng m存y tnh 速 nhp c存c k箪 t湛 cn hin th t孫i v tr mong mu竪n tr捉n ma trn LED b捉n
    ngo袖i.
                   Khi th湛c hin, ch測ng trnh ph其i th棚ng xuy捉n trao 速脱i d歎 liu v鱈i m孫ch ngo袖i
    qua c脱ng song song b損ng c存ch truy nhp v袖o ba thanh ghi c単a c脱ng song song l袖: thanh ghi
    d歎 liu, thanh ghi tr孫ng th存i, thanh ghi 速iu khin. Ch測ng trnh mc 速nh l y c脱ng song
    song 谷 速息y l袖 LPT1 v鱈i 速a ch c存c thanh ghi 速樽c cho (tnh 谷 h 速m 16) nh sau:
                                Thanh ghi             則a ch
                                 D歎 liu               378h
                                Tr孫ng th存i             379h
                               則iu khin              37Ah

                    則 thun tin, trong ch測ng trnh ta d誰ng lnh #define 速 速nh ngha
    cho c存c thanh ghi:     #define DataReg 0x378
                    #define StatusReg 0x379
              #define ControlReg 0x37A
    Thanh ghi d歎 liu c達 8 bit (D0 歎 D7) d誰ng 速 速a ra 速a ch v袖 m揃 c単a k箪 t湛 cn ghi v袖o
    RAM 谷 m孫ch ngo袖i. S旦 d担ng lnh: outportb(DataReg, d歎 liu). 則a ch c単a k箪 t湛 cn ghi
    v袖o RAM s x存c 速nh v tr c単a k箪 t湛 tr捉n b其ng qu其ng c存o b捉n ngo袖i, n達 g奪m c達 速a ch
    c辿t (4 bit 速u, t探 D0 速n D3) v袖 速a ch c辿t (3 bit tip theo, t探 D4 速n D6), t淡c l袖 cn
    7 bit 速a ch D0 歎 D6, bit th淡 8 l袖 D7 kh束ng d誰ng. G辰i column l袖 速a ch c辿t v袖 row l袖
    速a ch h袖ng c単a k箪 t湛 cn hin th th 速a ch c単a k箪 t湛 速達 trong RAM l袖 add 速樽c
    tnh nh sau:
                            row << 4; // dch ph其i 4 bit
                            add = row | column; // c辿ng 速孫i s竪 row v袖 column
    M揃 c単a k箪 t湛 d誰ng 6 bit (D0 歎 D5) 速 biu din, t淡c l袖 c達 th biu din 速 樽c 64 k箪 t湛 c達 m揃
    t探 0 速n 63, 速樽c qui 鱈c nh b其ng d鱈i 速息y:
   K箪                M揃                K箪            M揃                K箪              M揃
   t湛        H 10         H 2        t湛    H 10         H 2        t湛         H         H 2
                                                                                  10
   A           0          00000         X     23           010111       ;         46         101110
                             0
   B            1         000001       Y      24           011000       '         47           101111
    C           2         000010        Z     25            011001      "         48        110000
    D           3         000011       0      26            011010      (         49         110001
    E          4          000100        1     27            011011      )         50         110010
    F           5         000101        2     28            011100      [         51          110011
   G            6         000110        3     29            011101      ]         52         110100
   H            7          000111      4      30            011110      !         53          110101
    I           8         001000        5     31             011111     ?         54          110110
    J           9         001001        6     32          100000       @          55           110111
   K           10         001010        7     33           100001      #          56         111000
    L           11         001011       8     34           100010       $         57          111001
   M           12         001100        9     35            100011      %         58          111010
   N           13          001101       +     36           100100       ^         59           111011
   O           14          001110       -     37            100101     &          60          111100
    P          15          001111       *     38            100110               61           111101
   Q           16         010000        /     39            100111      |         62           111110
   R           17         010001        =     40           101000     space       63            111111
    S          18         010010        >     41            101001
    T          19          010011       <     42            101010
   U           20         010100        .     43            101011
   V           21          010101       ,     44            101100
   W           22          010110       :     45            101101

                    Thanh ghi tr孫ng th存i c達 8 bit (S0 歎 S7), d誰ng 速 thu nhn nh歎ng th束ng tin t探
    m孫ch b捉n ngo袖i g旦i 速n qua c存c ch息n: 10 v袖 13. Ch淡c n即ng t探ng ch息n 速樽c n捉u nh b其ng d鱈i 速息y:
                      Bit t測ng 淡ng


                                                                                                         36
Thit k m孫chlogic s竪                                            Phn III: Phn mm速iu
khin

        Ch 息n      tr捉n thanh ghi                           Ch 淡c n 即ng
                   tr孫ng th 存i
                                        M孫ch ngo袖i g旦i m淡c logic 1 速 th束ng b存o l袖 速ang
         10               S6            速辰c RAM. Khi n達 c達 m淡c logic 0 th c達 ngha l袖
                                        RAM 速揃 速樽c 速辰c xong v袖 m存y tnh c達 th ghi d歎
                                        liu l捉n RAM.
         13               S4            谷 m淡c logic 1 khi m孫ch ngo袖i 速揃 速達ng c束ng t他c
                                        ngu奪n (c達 th cha c p ngu奪n cho m孫ch ngo袖i).
    Khi b他t 速u th湛c hin, ch測ng trnh ph其i kim tra xem c束ng t他c ngu奪n 谷 m孫ch ngo袖i 速揃 速樽c
    速達ng cha th束ng qua vic 速辰c d歎 liu t探 thanh ghi tr孫ng th存i v袖 kim tra bit S4 c達 谷 tr孫ng
    th存i 1 kh束ng b損ng c存c lnh:
                             result = inportb(StatusReg);
                       k = result & 16; // Php AND gi歎a result v袖 16
    S竪 16 biu din d鱈i d孫ng nh ph息n l袖: 00010000. Khi6k  0 th S4 = 1.
    Tr鱈c khi ghi d歎 liu l捉n RAM ph其i kim tra xem bit S c達 谷 tr孫ng th存i 0 kh束ng. Qu存 trnh kim
    tra 速樽c th湛c hin 谷 ch 速辿 h叩i vng b損ng c存ch d誰ng lnh for(i=0;i<1000;i++), t淡c l袖 li捉n
    t担c 速辰c thanh ghi tr孫ng th存i, b他t 速u t探 l坦c k箪 t湛 速樽c nhp v袖o t探 b袖n phm. Sau m辿t th棚i
    gian, nu ch息n 10 vn 谷 m淡c logic 1 th s t湛 tho存t ra v袖 qu存 trnh g旦i k箪 t湛 l袖 kh束ng th袖nh
    c束ng.
                  Thanh ghi 速iu khin c達 8 bit (C0 歎 C7) d誰ng 速 g旦i th束ng tin 速iu khin t探
    m存y tnh ra m孫ch b捉n ngo袖i b損ng c存c ch息n: 1, 14, 17. Ch淡c n即ng c存c ch息n 速樽c cho nh b其ng d鱈i
    速息y:




                   Bit t測ng 淡ng
        Ch息n       tr捉n thanh ghi                           Ch淡c n即ng
                   速iu khin
                                        Ch測ng trnh s g旦i m辿t m淡c logic 1 ra ch息n n袖y
          1               C0            速 ch竪t 速a ch c単a k箪 t湛 g旦i ra tr捉n m孫ch
                                        ch竪t 74373, 速奪ng th棚i m谷 b辿 速m 74244 速a
                                        速a ch t鱈i RAM.
                                        Sau khi 速a ch v袖 d歎 liu 速揃 速a t鱈i RAM, ch-
         14               C1            測ng trnh s l袖m cho ch息n n袖y chuyn xu竪ng m淡c
                                        logic 0 速 t孫o ra tn hiu ghi v袖o RAM.
                                        Khi ng棚i d誰ng nh n phm F1 速 bt ch測ng trnh,
         17               C3            nu c束ng t他c ngu奪n m孫ch ngo袖i 速揃 速 樽c 速達ng, ch-
                                        測ng trnh s g旦i m辿t m淡c logic 0 ra ch息n n袖y 速
                                        t孫o ra tn hiu c p ngu奪n cho m孫ch.




                                                                                                   37
Thit k m孫chlogic s竪                        Phn III: Phn mm速iu
khin




                             ch測ng ii: m揃 ngu奪n

    //Chuong trinh dieu khien bang quang cao dung ma tran LED 5x7
    //       (Do an mon hoc: Thiet ke mach Logic)
    //Nguoi viet: Le Minh Hung
    //            Nguyen Duc Linh
    //       Lop DT6-K43-DHBKHN

    #include    <conio.h>
    #include    <stdio.h>
    #include    <stdlib.h>
    #include    <string.h>
    #include    <ctype.h>
    #include    <dos.h>

    #define DataReg 0x378
    #define StatusReg 0x379
    #define ControlReg 0x37A

    void Initialize();
    void Interfacing();
    void Print_Code(int code);
    void ItoSofB(int i,char up[],char down[]);
    void Print_Character(int column,int row,int code);
    void Print_Column(int column);
    void Print_Row(int row);
    void Print_Cell(int column,int row,char value);
    void Print_Matrix(int code);
    int Out_Char(int column,int row,int code);
    void Reset();
    void Power();
    //-------------------------------------------------------------
    ----
    int character[64][6]={
                     //character[x][0-4]: code of character'column
                    //character[x][5]: ASCII code


                                                                      38
Thit k m孫chlogic s竪                            Phn III: Phn mm速iu
khin

                        {126,17,17,17,126,65},   // 0-A
                        {127,73,73,73,54,66},    // 1-B
                        {62,65,65,65,34,67},     // 2-C
                        {127,65,65,34,28,68},    // 3-D
                        {127,73,73,73,65,69},    // 4-E
                        {127,9,9,9,1,70},        // 5-F
                        {62,65,73,73,58,71},     // 6-G
                        {127,8,8,8,127,72},      // 7-H
                        {0,65,127,65,0,73},      // 8-I
                        {32,64,65,63,1,74},      // 9-J
                        {127,8,20,34,65,75},     //10-K
                        {127,64,64,64,64,76},    //11-L
                        {127,2,12,2,127,77},     //12-M
                        {127,4,8,16,127,78},     //13-N
                        {62,65,65,65,62,79},     //14-O
                        {127,9,9,9,6,80},        //15-P
                        {62,65,81,33,94,81},     //16-Q
                        {127,9,25,41,70,82},     //17-R
                        {38,73,73,73,50,83},     //18-S
                        {1,1,127,1,1,84},        //19-T
                        {63,64,64,64,63,85},     //20-U
                        {31,32,64,32,31,86},     //21-V
                        {63,64,48,64,63,87},     //22-W
                        {99,20,8,20,99,88},      //23-X
                        {7,8,120,8,7,89},        //24-Y
                        {97,81,73,69,67,90},     //25-Z
                        {62,81,73,69,62,48},     //26-0
                        {0,66,127,64,0,49},      //27-1
                        {66,97,81,73,70,50},     //28-2
                        {33,65,69,75,49,51},     //29-3
                        {24,20,18,127,16,52},    //30-4
                        {39,69,69,69,57,53},     //31-5
                        {60,74,73,73,48,54},     //32-6
                        {1,113,9,5,3,55},        //33-7
                        {54,73,73,73,54,56},     //34-8
                        {6,73,73,41,30,57},      //35-9
                        {8,8,62,8,8,43},         //36-+
                        {8,8,8,8,8,45},          //37--
                        {20,8,62,8,20,42},       //38-*
                        {32,16,8,4,2,47},        //39-/
                        {20,20,20,20,20,61},     //40-=
                        {0,65,34,20,8,62},       //41->
                        {8,20,34,65,0,60},       //42-<
                        {0,96,96,0,0,46},        //43-.
                        {0,80,48,0,0,44},        //44-,
                        {0,54,54,0,0,58},        //45-:
                        {0,86,54,0,0,59},        //46-;


                                                                          39
Thit k m孫chlogic s竪                        Phn III: Phn mm速iu
khin

                     {0,5,3,0,0,39},        //47-'
                     {0,3,0,3,0,34},        //48-"
                     {0,28,34,65,0,40},     //49-(
                     {0,65,34,28,0,41},     //50-)
                     {0,127,65,65,0,91},    //51-[
                     {0,65,65,127,0,93},    //52-]
                     {0,0,95,0,0,33},       //53-!
                     {2,1,81,9,6,63},       //54-?
                     {50,73,121,65,62,64},  //55-@
                     {20,62,20,62,20,35},   //56-#
                     {36,42,127,42,18,36},  //57-$
                     {35,19,8,100,98,37},   //58-%
                     {4,2,1,2,4,94},        //59-^
                     {54,73,85,34,80,38},   //60-&
                     {2,4,8,16,32,92},      //61-
                     {0,0,127,0,0,124},     //62-|
                     {0,0,0,0,0,32},        //63-
                    };
    int matrix[128];
    int power;
    //-------------------------------------------------------------
    ----
    void main()
      {
         int column=0,row=0,pos=0,i;
        char scan,ch;

         Interfacing();
         Initialize();
         for(i=0;i<128;i++)
           matrix[i]=63;
         for(;;)
          {
          Print_Column(column);
          Print_Row(row);
          Print_Matrix(matrix[pos]);
          Print_Code(matrix[pos]);
          window(5+column*2,2+row*2,5+column*2,2+row*2);
          if((scan=getch())==0)
            {
              ch=getch();
              switch(ch)
                 {
                 case 59: //F1
                   Power();
                   break;
                 case 60: //F2


                                                                      40
Thit k m孫chlogic s竪                 Phn III: Phn mm速iu
khin

                    if(power==1)
                      Reset();
                    break;
                  case 75: //Left Arrow
                    if(power==1)
                    {
                    if(pos>0) pos--;
                    if(column==0)
                      {
                         if(row>0)
                        {
                          column=16;
                          row--;
                        }
                         else column=1;
                      }
                    column--;
                    }
                    break;
                  case 77: //Right Arrow
                    if(power==1)
                    {
                    if(pos<127) pos++;
                    column++;
                    if(column>15)
                      {
                         if(row<7)
                        {
                          column=0;
                          row++;
                        }
                         else column=15;
                      }
                    }
                    break;
                  case 72: //Up Arrow
                    if(power==1)
                    {
                    if(row>0)
                      {
                         pos=pos-16;
                         row--;
                      }
                    }
                    break;
                  case 80: //Down Arrow
                    if(power==1)


                                                                41
Thit k m孫chlogic s竪                        Phn III: Phn mm速iu
khin

                     {
                     if(row<7)
                       {
                         pos=pos+16;
                         row++;
                       }
                     }
                     break;

                 } // for switch(ch)
             } // for if((scan=getch())==0)
           else
             {
               ch=scan;
               switch(ch)
                 {
                 case 27: //ESC
                   //Dua ra tin hieu tat mach ngoai (chan 17,bit3=1)
                   outportb(ControlReg,8); // 8 = 00001000b
                   return;
                 case 13: //Enter
                   if((row<7)&&(power==1))
                     {
                        pos=pos+(16-column);
                        row++;
                        column=0;
                     }
                   break;
                 default:
                   if((isprint(ch))&&(power==1))
                     {
                        ch=toupper(ch);
                        for(i=0;i<64;i++)
                       if(character[i][5]==ch)
                         {
                           Print_Character(column,row,ch);
                           if(Out_Char(column,row,i)==0)
                             {
                            textbackground(LIGHTGRAY);
                            textcolor(RED);
                            window(4,25,30,25);clrscr();
                            cprintf("Khong gui duoc ky tu !");
                             }
                           else
                             {
                            textbackground(LIGHTGRAY);
                            window(4,25,30,25);clrscr();


                                                                       42
Thit k m孫chlogic s竪                       Phn III: Phn mm速iu
khin

                               }
                             matrix[pos]=i;
                             break;
                         }
                        if(pos<127) pos++;
                        if(column==15)
                       {
                         if(row<7)
                           {
                              column=-1;
                              row++;
                           }
                         else column=14;
                       }
                        column++;
                      } // for if(isprint(ch))
                    break;
                  } // for switch(ch)
                } // for else
           }
      }
    //-------------------------------------------------------------
    ----
    void Initialize()
      {
        //Dong mach ngoai: chan 17,bit3=1
         outportb(ControlReg,8); // 8 = 00001000b
         power=0; //Chua cho phep chuong trinh hoat dong
         textbackground(BLACK);
        textcolor(WHITE);
        window(16,20,18,20);clrscr();
        printf("OFF");
      }
    //-------------------------------------------------------------
    ----
    void Power()
      {
        unsigned char result;
        if(power==0)
           {
          //Kiem tra xem chan 13 co o muc cao (bit4=1)
          result=inportb(StatusReg);
          if(result&16 !=0) // 16=10000b
             {
               //Neu bit4=1 (mach ngoai da duoc cap nguon)
               power=1; //Cho phep chuong trinh hoat dong
               textbackground(RED);


                                                                      43
Thit k m孫chlogic s竪                       Phn III: Phn mm速iu
khin

              textcolor(WHITE);
              window(16,20,18,20);clrscr();
              printf("ON");
              //Dua ra tin hieu dong mach ngoai (chan 17,bit3=0)
                //va thiet lap trang thai ban dau: dong bo dem
    74244(chan
              //1,bit0=0),khong cho phep ghi vao RAM(chan 14,bit1=1)
              outportb(ControlReg,2); // 2 = 00000010b
            }
         else
            {
              textbackground(LIGHTGRAY);
              textcolor(RED);
              window(4,25,30,25);clrscr();
              cprintf("Chua dong nguon cho mach!");
            }
          }
        else
          {
         //Khong cho phep chuong trinh hoat dong
         power=0;
         textbackground(BLACK);
         textcolor(WHITE);
         window(16,20,18,20);clrscr();
         printf("OFF");
         //Dua ra tin hieu tat mach ngoai (chan 17,bit3=1)
         outportb(ControlReg,8); // 8 = 00001000b
          }
      }
    //-------------------------------------------------------------
    ----
    void Interfacing()
      {
        textmode(C40);
        textbackground(BLUE);window(0,0,40,25);clrscr();
        textbackground(BLACK);window(5,2,37,25);clrscr();
        textcolor(BLUE);
        textbackground(LIGHTGRAY);window(4,1,36,17);clrscr();
        textcolor(LIGHTGRAY);
        textbackground(BLACK);window(5,2,35,17);clrscr();
        cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
        cprintf("");
        cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
        cprintf("");
        cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
        cprintf("");
        cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");


                                                                       44
Thit k m孫chlogic s竪                        Phn III: Phn mm速iu
khin

         cprintf("");
         cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
         cprintf("");
         cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
         cprintf("");
         cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 ");
         cprintf("");
         cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 r");
         textbackground(LIGHTGRAY);window(5,17,35,17);clrscr();
         window(19,18,36,25);clrscr();
         textbackground(BLACK);window(31,18,35,24);clrscr();
         textcolor(BLUE);textbackground(LIGHTGRAY);
         window(20,19,30,19);clrscr();cprintf("Column:");
         window(20,21,30,21);clrscr();cprintf("Row:");
         window(20,23,30,23);clrscr();cprintf("Code:");
         window(4,19,17,23);clrscr();
         window(4,25,30,25);clrscr();
         window(6,20,17,21);clrscr();cprintf("F1 - Power");
         window(6,21,17,22);clrscr();cprintf("F2 - Reset");
         window(5,22,17,23);clrscr();cprintf("ESC - Exit");
      }
    //-------------------------------------------------------------
    ----
    void ItoSofB(int i,char up[],char down[])//Chuyen so nguyen
                                           // sang chuoi cac so nhi
    phan
      {
        int j=0,k=0;
        do
          {
            if(i%2==0) up[j]='0';
            else up[j]='1';
            j++;
            i=i/2;
          } while(i!=0);
        up[j]='0';
        do
          {
            down[k]=up[j-1];
            k++;j--;
          } while(j>=0);
        down[k-1]='0';
      }
    //-------------------------------------------------------------
    ----
    void Print_Code(int code)
      {


                                                                      45
Thit k m孫chlogic s竪                        Phn III: Phn mm速iu
khin

         char up[7];
         char down[7];
         textcolor(RED);textbackground(LIGHTGRAY);
         window(27,23,30,23);clrscr();
         itoa(code,up,10);cprintf("%s",up);
         window(22,24,30,24);clrscr();
         ItoSofB(code,up,down);cprintf("%sB",down);
      }
    //-------------------------------------------------------------
    ----
    void Print_Column(int column)
      {
        char up[7],down[7];
        textcolor(RED);textbackground(LIGHTGRAY);
        window(27,19,30,19);clrscr();
        itoa(column,up,10);cprintf("%s",up);
        window(22,20,30,20);clrscr();
        ItoSofB(column,up,down);cprintf("%sB",down);
      }
    //-------------------------------------------------------------
    ----
    void Print_Row(int row)
      {
        char up[7],down[7];
        textcolor(RED);textbackground(LIGHTGRAY);
        window(27,21,30,21);clrscr();
        itoa(row,up,10);cprintf("%s",up);
        window(22,22,30,22);clrscr();
        ItoSofB(row,up,down);cprintf("%sB",down);
      }
    //-------------------------------------------------------------
    ----
    void Print_Cell(int column,int row,char value)
      {
        if(value=='0')
          textbackground(BLACK);
        else
          textbackground(RED);
        textcolor(WHITE);
        window(31+column,18+row,31+column,18+row);clrscr();
        printf("%c",value);
      }
    //-------------------------------------------------------------
    ----
    void Print_Matrix(int code)
      {
        int i,j,k,len;


                                                                      46
Thit k m孫chlogic s竪                          Phn III: Phn mm速iu
khin

         char up[9];
         char down[9];
         for(i=0;i<5;i++)
           {
              k=0;
             ItoSofB(character[code][i],up,down);
             len=strlen(up);
             while(k<8-len)
               {
                 up[len+k]='0';
                 k++;
               }
             for(j=0;j<7;j++)
               Print_Cell(i,j,up[j]);
           }
      }
    //-------------------------------------------------------------
    ----
    void Print_Character(int column,int row,int code)
      {
        textcolor(RED);textbackground(BLACK);
        window(5+column*2,2+row*2,5+column*2,2+row*2);clrscr();
        printf("%c",code);
      }
    //-------------------------------------------------------------
    ----
    int Out_Char(int column,int row,int code) //Dua ky tu co ma
                                                // code ra cong song
    song
      {
        int i;
        unsigned char result;
        int add;
         row=row<<4;
        add=row|column; //Dia chi o nho cua RAM
         for(i=0;i<1000;i++) //Hoi vong
           {
          result=inportb(StatusReg); //Doc trang thai vao
          if(result&64==0) //Kiem tra xem chan 10 co o muc thap
                             //(bit7=0)
              {              //64 = 01000000b
                //Dua dia chi ra cong song song
              outportb(DataReg,add);//Ghi du lieu vao thanh ghi du
    lieu
                //Dua ra tin hieu chot dia chi 74373
                //va mo bo dem 74244 (chan 1,bit0=1)
             outportb(ControlReg,3);//Ghi du lieu vao thanh ghi dieu


                                                                        47
Thit k m孫chlogic s竪                                          Phn III: Phn mm速iu
khin

                                        // khien
                                       // 3 = 00000011b
                 //Dua ma ky tu ra cong song song
              outportb(DataReg,code);
                 //Dua ra tin hieu ghi vao RAM (chan 14,bit1=0);
              outportb(ControlReg,1); // 1 = 00000001b
                 //Dua ra tin hieu dong bo dem 74244 (bit0=0)
                 // va khong cho ghi vao RAM (bit1=1)
              outportb(ControlReg,2); // 2 = 00000010b
              return 1; // Ket thuc ghi vao RAM
              }
           }
         return 0;
      }
    //-------------------------------------------------------------
    ----
    void Reset()
      {
        int i;
        //Dua ra tin hieu dong mach (chan 17, bit3=1)
         outportb(ControlReg,10); // 10 = 00001010b
         delay(500); // Tre 0.5s
           //Thiet lap lai trang thai ban dau: bit0=0(dong bo dem
    74244),
        //bit1=1(khong cho ghi vao RAM), bit3=0(mo mach)
         outportb(ControlReg,2); // 2 = 00000010b
         for(i=0;i<128;i++) //Xoa mang chua cac ky tu ve ky tu trong
           matrix[i]=63;
        Interfacing(); //Ve lai giao dien
      }
    //--------------------------------------------------------------------------




                      ch測ng III: H鱈ng dn s旦 d担ng ch測ng trnh
                   Ch 測ng trnh 速iu khin ch ch淡a trong m辿t file t捉n l袖: Quangcao.exe, ch孫y
    trong m束i tr 棚ng MSDOS.Khi kch ho孫t file 速達 th giao din c単a ch測ng trnh s xut hin nh
    hnh III.1.




                                                                                             48

                         Hnh III.1 Giao din c単a ch足測ng t rnh 速iu
                         khin
Thit k m孫chlogic s竪                                           Phn III: Phn mm速iu
khin




                    Phn chnh c単a giao din l袖 m辿t ma trn c存c 束 g奪m 8 h袖ng x 16 c辿t m束
    ph叩ng ma trn 速n qu其ng c存o c単a m孫ch th湛c. M巽i 束 l袖 n測i 速 hin th k箪 t湛 m袖 ng棚i d誰ng
    nhp v袖o. 谷 g達c d鱈i b捉n ph其i giao din l袖 c存c th束ng s竪 c単a 束 ch歎 t孫i v tr con tr叩 m袖n hnh
    xut hin g奪mc達:
                + Column(c辿t): ch s竪 th淡 t湛 c単a c辿t (t探 0 速n 15) m袖 con tr叩 m袖n hnh xut
    hin.
                    + Row (h袖ng): ch s竪 th淡 t湛 c単a h袖ng (t探 0 速n 7) m袖 con tr叩 m袖n hnh
    xut hin.
                    + Code(m揃): ch m揃 c単a k箪 t湛 (theo b其ng m揃 qui 鱈c c単a ch坦ng t束i 速揃 速樽c 速a
    ra 谷 ch測ng I c単a phn n袖y) xuthin t孫i v tr con tr叩 m袖nhnh.
    B捉n c孫nh 速達 l袖 ma trn 5x7 c存c 束 vu束ng biu th c存c bit 1(速n LEDs存ng) v袖 bit 0 (速n LED
    t他t) c単a ma trn 5x7 LED淡ng v鱈i k箪 t湛 hin th.
                    谷 g達c d鱈i b捉n tr存i giao din l袖 b其ng ch dn c存c phmch淡c n即ng:
                    + F1 Power: Bt / t他t ch測ng trnh. L坦c n袖y, ch測ng trnh cha 速樽c bt n捉n
    b捉n c孫nh 速達 l袖 ch歎 OFF(t他t). Khi nhnF1, ch測ng trnh s kim tra qua c脱ng song song xem
    m孫chngo袖i 速揃 速樽c cpngu奪n hay cha. Nu m孫chngo袖i 速揃 速樽c cpngu奪n th ch測ng trnh s g旦i
    tn hiu ra c脱ng song song cho php m孫ch ngo袖i ho孫t 速辿ng, 速奪ng th棚i cho php ch測ng
    trnh ho孫t 速辿ng. L坦c 速達, ch歎 OFF s chuyn th袖nh ON. Nu m孫ch ngo袖i cha 速樽c cpngu奪n
    th ch測ng trnh s hin ra th束ng b存o l袖: "Cha 速達ng ngu奪n cho m孫ch ngo袖i !". Khi ch測ng
    trnh 速ang 速樽c bt m袖 nhnF1 th ch測ng trnh s g旦i tn hiu ra c脱ng song song kh束ng
    cho php m孫chngo袖i ho孫t 速辿ng, 速奪ng th棚i t他t ch測ng trnh.
                    + F2  Reset: Thit lp l孫i. Khi ch測ng trnh 速ang 速樽c bt m袖 nhnF2 th ch-
    測ng trnh s g旦i tn hiu ra c脱ng song song c他t ngu奪n cpcho m孫chngo袖i kho其ng 0.5 s, sau
    速達 速達ng l孫i nh損mthit lp l孫i h th竪ng tr谷 v tr孫ng th存i ban 速u. 則奪ng th棚i s xo存 to袖n b辿
    ma trn c存c 束 k箪 t湛 th袖nh k箪 t湛 tr他ng (m揃 63).
                    + ESC exit: Tho存t. Khi nhnphmESCs tho存t kh叩i ch測ng trnh 速iu khin.
    Tr鱈c khi tho存t, ch測ng trnh s g旦i tn hiu ra c脱ng song song 速 c他t c他t ngu奪n cpcho
    m孫chngo袖i.
                   Khi ch測ng trnh 速揃 速樽c bt, ta c達 th d誰ng c存c phmm嘆i t捉n (, , , )
    速 di chuyn con tr叩 速n v tr bt k炭 tr捉n trang m袖n hnh 速 nhp k箪 t湛 cn hin
    th. Khi k箪 t湛 速樽c nhp v袖o, n達 hin th t孫i v tr con tr叩 m袖n hnh v探a 速淡ng, sau 速達,
    con tr叩 t湛 速辿ng nh其y sang v tr b捉n c孫nh. Ch測ng trnh s g旦i th束ng tin v k箪 t湛 v探a
    nhp ra c脱ng song song 速 m孫chngo袖i hin th, nu kh束ng th袖nh c束ng th s c達 th束ng b存o:
    "Kh束ng g旦i 速樽c k箪 t湛 !".
                   Hnh III.2 l袖 hnh 其nh c単a ch測ng trnh khi 速揃 速樽c bt v袖 nhp c存c k箪 t湛. L坦c
    n袖y, con tr叩 m袖nhnh 速揃 速樽c dch chuyn 速n c辿t 2, h袖ng 2, k箪 t湛 t孫i 束 n袖y l袖 "L", c達 m揃
    l袖 11.Th束ng tin c単a k箪 t湛 速達 c達 th thy 谷 g達c d鱈i b捉n ph其i b損ng c其 s竪 thp ph息n v袖 s竪 nh
    ph息n.



                                                                                               49
Thit k m孫chlogic s竪                                          Phn III: Phn mm速iu
khin




                      Hnh III.2  Hnh 其nh c単a ch足測ng t rnh khi 速足樽c bt



                                                                                        50
Ad

Recommended

Header
Header
Hi畛p Phan Vn
KM Middle East 2015 Dr. Ghada Amer
KM Middle East 2015 Dr. Ghada Amer
KMMiddleEast
Yoga und vodka
Von B端ren Yves
Phan i
Phan i
Hi畛p Phan Vn
Chuongiv
Chuongiv
Hi畛p Phan Vn
448 cong nghe_cnc_5745
448 cong nghe_cnc_5745
Hi畛p Phan Vn
GR2ADS
GR2ADS
jibulee
LIFEISSPEED
LIFEISSPEED
jibulee
Samasource: A solution for your data projects
Samasource: A solution for your data projects
Leila Toplic
RAM SURVEY
RAM SURVEY
jibulee
Linh kien dien tu can tho uni
Linh kien dien tu can tho uni
Hi畛p Phan Vn
Trang bi dien thang may
Trang bi dien thang may
Hi畛p Phan Vn
Q gx developer_e
Q gx developer_e
Hi畛p Phan Vn
Replicacao e transcri巽ao DNA procariotos
UERGS
Ngs intro_v6_public
Ngs intro_v6_public
Fran巽ois PAILLIER
Yoga und vodka
Von B端ren Yves
Yoga und vodka
Von B端ren Yves
Google apps
Diana Rodriguez
Khinen
Khinen
Hi畛p Phan Vn
Huong dan lap_rap_cac_mach_vi_xu_ly_(noi_dung_hoan_chinh_final_2005_)
Huong dan lap_rap_cac_mach_vi_xu_ly_(noi_dung_hoan_chinh_final_2005_)
Hi畛p Phan Vn
Loi noi dau
Loi noi dau
Hi畛p Phan Vn
Phan iv
Phan iv
Hi畛p Phan Vn
Sua chuathietbidien dientugiadung
Sua chuathietbidien dientugiadung
Hi畛p Phan Vn
pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
Ifa Nofalia
Flashcards Animais brasileiros Ilustrado Verde.pdf
Flashcards Animais brasileiros Ilustrado Verde.pdf
PriscilaRibeiro803210

More Related Content

Viewers also liked (11)

Samasource: A solution for your data projects
Samasource: A solution for your data projects
Leila Toplic
RAM SURVEY
RAM SURVEY
jibulee
Linh kien dien tu can tho uni
Linh kien dien tu can tho uni
Hi畛p Phan Vn
Trang bi dien thang may
Trang bi dien thang may
Hi畛p Phan Vn
Q gx developer_e
Q gx developer_e
Hi畛p Phan Vn
Replicacao e transcri巽ao DNA procariotos
UERGS
Ngs intro_v6_public
Ngs intro_v6_public
Fran巽ois PAILLIER
Yoga und vodka
Von B端ren Yves
Yoga und vodka
Von B端ren Yves
Google apps
Diana Rodriguez
Samasource: A solution for your data projects
Samasource: A solution for your data projects
Leila Toplic
RAM SURVEY
RAM SURVEY
jibulee
Linh kien dien tu can tho uni
Linh kien dien tu can tho uni
Hi畛p Phan Vn
Trang bi dien thang may
Trang bi dien thang may
Hi畛p Phan Vn
Replicacao e transcri巽ao DNA procariotos
UERGS
Yoga und vodka
Von B端ren Yves
Yoga und vodka
Von B端ren Yves
Google apps
Diana Rodriguez

More from Hi畛p Phan Vn (9)

Khinen
Khinen
Hi畛p Phan Vn
Huong dan lap_rap_cac_mach_vi_xu_ly_(noi_dung_hoan_chinh_final_2005_)
Huong dan lap_rap_cac_mach_vi_xu_ly_(noi_dung_hoan_chinh_final_2005_)
Hi畛p Phan Vn
Loi noi dau
Loi noi dau
Hi畛p Phan Vn
Phan iv
Phan iv
Hi畛p Phan Vn
Sua chuathietbidien dientugiadung
Sua chuathietbidien dientugiadung
Hi畛p Phan Vn
Ad

Recently uploaded (9)

pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
Ifa Nofalia
Flashcards Animais brasileiros Ilustrado Verde.pdf
Flashcards Animais brasileiros Ilustrado Verde.pdf
PriscilaRibeiro803210
Reportge on Kaliningrad LEMONDE.3PAG.pdf
Reportge on Kaliningrad LEMONDE.3PAG.pdf
Stefano Lariccia
仆舒从舒亰 仗仂 亰舒舒于舒仆仆磲仂 1 从仍舒 kg72 2025
仆舒从舒亰 仗仂 亰舒舒于舒仆仆磲仂 1 从仍舒 kg72 2025
AleksSaf
Gazetteer of Russia. Part: Populated places A-F.pdf
Gazetteer of Russia. Part: Populated places A-F.pdf
peivhau
15 June 2025 PS - 15 June 2025 PS - 15 June 2025 PS -
15 June 2025 PS - 15 June 2025 PS - 15 June 2025 PS -
ssuser787edf
cambios_emocionales en los traumas presentes en adolescentes
cambios_emocionales en los traumas presentes en adolescentes
vivianyarenivallecil
Aylanmadan olinadigan soliq.2025 yil.pdf
Aylanmadan olinadigan soliq.2025 yil.pdf
ilxomislomov2020
Gazetteer of Russia. Part: Populated places G-Krasno.pdf
Gazetteer of Russia. Part: Populated places G-Krasno.pdf
peivhau
pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
pdf-p-classtruncatedtext-module-lineclamped-85ulhh-style-max-lines5topik-tema...
Ifa Nofalia
Flashcards Animais brasileiros Ilustrado Verde.pdf
Flashcards Animais brasileiros Ilustrado Verde.pdf
PriscilaRibeiro803210
Reportge on Kaliningrad LEMONDE.3PAG.pdf
Reportge on Kaliningrad LEMONDE.3PAG.pdf
Stefano Lariccia
仆舒从舒亰 仗仂 亰舒舒于舒仆仆磲仂 1 从仍舒 kg72 2025
仆舒从舒亰 仗仂 亰舒舒于舒仆仆磲仂 1 从仍舒 kg72 2025
AleksSaf
Gazetteer of Russia. Part: Populated places A-F.pdf
Gazetteer of Russia. Part: Populated places A-F.pdf
peivhau
15 June 2025 PS - 15 June 2025 PS - 15 June 2025 PS -
15 June 2025 PS - 15 June 2025 PS - 15 June 2025 PS -
ssuser787edf
cambios_emocionales en los traumas presentes en adolescentes
cambios_emocionales en los traumas presentes en adolescentes
vivianyarenivallecil
Aylanmadan olinadigan soliq.2025 yil.pdf
Aylanmadan olinadigan soliq.2025 yil.pdf
ilxomislomov2020
Gazetteer of Russia. Part: Populated places G-Krasno.pdf
Gazetteer of Russia. Part: Populated places G-Krasno.pdf
peivhau
Ad

Phan iii

  • 1. Thit k m孫ch logic s竪 Phn III: Phn mm 速iu khin ch測ng I: Ph息n tch ch測ng trnh Ch測ng trnh 速iu khin 速樽c vit b損ng ng束n ng歎 C, ch孫y trong m束i tr棚ng DOS. Y捉u cu c単a ch測ng trnh l袖 ph其i c達 m辿t giao din th息n thin, gi坦p ng棚i d誰ng d d袖ng d誰ng m存y tnh 速 nhp c存c k箪 t湛 cn hin th t孫i v tr mong mu竪n tr捉n ma trn LED b捉n ngo袖i. Khi th湛c hin, ch測ng trnh ph其i th棚ng xuy捉n trao 速脱i d歎 liu v鱈i m孫ch ngo袖i qua c脱ng song song b損ng c存ch truy nhp v袖o ba thanh ghi c単a c脱ng song song l袖: thanh ghi d歎 liu, thanh ghi tr孫ng th存i, thanh ghi 速iu khin. Ch測ng trnh mc 速nh l y c脱ng song song 谷 速息y l袖 LPT1 v鱈i 速a ch c存c thanh ghi 速樽c cho (tnh 谷 h 速m 16) nh sau: Thanh ghi 則a ch D歎 liu 378h Tr孫ng th存i 379h 則iu khin 37Ah 則 thun tin, trong ch測ng trnh ta d誰ng lnh #define 速 速nh ngha cho c存c thanh ghi: #define DataReg 0x378 #define StatusReg 0x379 #define ControlReg 0x37A Thanh ghi d歎 liu c達 8 bit (D0 歎 D7) d誰ng 速 速a ra 速a ch v袖 m揃 c単a k箪 t湛 cn ghi v袖o RAM 谷 m孫ch ngo袖i. S旦 d担ng lnh: outportb(DataReg, d歎 liu). 則a ch c単a k箪 t湛 cn ghi v袖o RAM s x存c 速nh v tr c単a k箪 t湛 tr捉n b其ng qu其ng c存o b捉n ngo袖i, n達 g奪m c達 速a ch c辿t (4 bit 速u, t探 D0 速n D3) v袖 速a ch c辿t (3 bit tip theo, t探 D4 速n D6), t淡c l袖 cn 7 bit 速a ch D0 歎 D6, bit th淡 8 l袖 D7 kh束ng d誰ng. G辰i column l袖 速a ch c辿t v袖 row l袖 速a ch h袖ng c単a k箪 t湛 cn hin th th 速a ch c単a k箪 t湛 速達 trong RAM l袖 add 速樽c tnh nh sau: row << 4; // dch ph其i 4 bit add = row | column; // c辿ng 速孫i s竪 row v袖 column M揃 c単a k箪 t湛 d誰ng 6 bit (D0 歎 D5) 速 biu din, t淡c l袖 c達 th biu din 速 樽c 64 k箪 t湛 c達 m揃 t探 0 速n 63, 速樽c qui 鱈c nh b其ng d鱈i 速息y: K箪 M揃 K箪 M揃 K箪 M揃 t湛 H 10 H 2 t湛 H 10 H 2 t湛 H H 2 10 A 0 00000 X 23 010111 ; 46 101110 0 B 1 000001 Y 24 011000 ' 47 101111 C 2 000010 Z 25 011001 " 48 110000 D 3 000011 0 26 011010 ( 49 110001 E 4 000100 1 27 011011 ) 50 110010 F 5 000101 2 28 011100 [ 51 110011 G 6 000110 3 29 011101 ] 52 110100 H 7 000111 4 30 011110 ! 53 110101 I 8 001000 5 31 011111 ? 54 110110 J 9 001001 6 32 100000 @ 55 110111 K 10 001010 7 33 100001 # 56 111000 L 11 001011 8 34 100010 $ 57 111001 M 12 001100 9 35 100011 % 58 111010 N 13 001101 + 36 100100 ^ 59 111011 O 14 001110 - 37 100101 & 60 111100 P 15 001111 * 38 100110 61 111101 Q 16 010000 / 39 100111 | 62 111110 R 17 010001 = 40 101000 space 63 111111 S 18 010010 > 41 101001 T 19 010011 < 42 101010 U 20 010100 . 43 101011 V 21 010101 , 44 101100 W 22 010110 : 45 101101 Thanh ghi tr孫ng th存i c達 8 bit (S0 歎 S7), d誰ng 速 thu nhn nh歎ng th束ng tin t探 m孫ch b捉n ngo袖i g旦i 速n qua c存c ch息n: 10 v袖 13. Ch淡c n即ng t探ng ch息n 速樽c n捉u nh b其ng d鱈i 速息y: Bit t測ng 淡ng 36
  • 2. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin Ch 息n tr捉n thanh ghi Ch 淡c n 即ng tr孫ng th 存i M孫ch ngo袖i g旦i m淡c logic 1 速 th束ng b存o l袖 速ang 10 S6 速辰c RAM. Khi n達 c達 m淡c logic 0 th c達 ngha l袖 RAM 速揃 速樽c 速辰c xong v袖 m存y tnh c達 th ghi d歎 liu l捉n RAM. 13 S4 谷 m淡c logic 1 khi m孫ch ngo袖i 速揃 速達ng c束ng t他c ngu奪n (c達 th cha c p ngu奪n cho m孫ch ngo袖i). Khi b他t 速u th湛c hin, ch測ng trnh ph其i kim tra xem c束ng t他c ngu奪n 谷 m孫ch ngo袖i 速揃 速樽c 速達ng cha th束ng qua vic 速辰c d歎 liu t探 thanh ghi tr孫ng th存i v袖 kim tra bit S4 c達 谷 tr孫ng th存i 1 kh束ng b損ng c存c lnh: result = inportb(StatusReg); k = result & 16; // Php AND gi歎a result v袖 16 S竪 16 biu din d鱈i d孫ng nh ph息n l袖: 00010000. Khi6k 0 th S4 = 1. Tr鱈c khi ghi d歎 liu l捉n RAM ph其i kim tra xem bit S c達 谷 tr孫ng th存i 0 kh束ng. Qu存 trnh kim tra 速樽c th湛c hin 谷 ch 速辿 h叩i vng b損ng c存ch d誰ng lnh for(i=0;i<1000;i++), t淡c l袖 li捉n t担c 速辰c thanh ghi tr孫ng th存i, b他t 速u t探 l坦c k箪 t湛 速樽c nhp v袖o t探 b袖n phm. Sau m辿t th棚i gian, nu ch息n 10 vn 谷 m淡c logic 1 th s t湛 tho存t ra v袖 qu存 trnh g旦i k箪 t湛 l袖 kh束ng th袖nh c束ng. Thanh ghi 速iu khin c達 8 bit (C0 歎 C7) d誰ng 速 g旦i th束ng tin 速iu khin t探 m存y tnh ra m孫ch b捉n ngo袖i b損ng c存c ch息n: 1, 14, 17. Ch淡c n即ng c存c ch息n 速樽c cho nh b其ng d鱈i 速息y: Bit t測ng 淡ng Ch息n tr捉n thanh ghi Ch淡c n即ng 速iu khin Ch測ng trnh s g旦i m辿t m淡c logic 1 ra ch息n n袖y 1 C0 速 ch竪t 速a ch c単a k箪 t湛 g旦i ra tr捉n m孫ch ch竪t 74373, 速奪ng th棚i m谷 b辿 速m 74244 速a 速a ch t鱈i RAM. Sau khi 速a ch v袖 d歎 liu 速揃 速a t鱈i RAM, ch- 14 C1 測ng trnh s l袖m cho ch息n n袖y chuyn xu竪ng m淡c logic 0 速 t孫o ra tn hiu ghi v袖o RAM. Khi ng棚i d誰ng nh n phm F1 速 bt ch測ng trnh, 17 C3 nu c束ng t他c ngu奪n m孫ch ngo袖i 速揃 速 樽c 速達ng, ch- 測ng trnh s g旦i m辿t m淡c logic 0 ra ch息n n袖y 速 t孫o ra tn hiu c p ngu奪n cho m孫ch. 37
  • 3. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin ch測ng ii: m揃 ngu奪n //Chuong trinh dieu khien bang quang cao dung ma tran LED 5x7 // (Do an mon hoc: Thiet ke mach Logic) //Nguoi viet: Le Minh Hung // Nguyen Duc Linh // Lop DT6-K43-DHBKHN #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <dos.h> #define DataReg 0x378 #define StatusReg 0x379 #define ControlReg 0x37A void Initialize(); void Interfacing(); void Print_Code(int code); void ItoSofB(int i,char up[],char down[]); void Print_Character(int column,int row,int code); void Print_Column(int column); void Print_Row(int row); void Print_Cell(int column,int row,char value); void Print_Matrix(int code); int Out_Char(int column,int row,int code); void Reset(); void Power(); //------------------------------------------------------------- ---- int character[64][6]={ //character[x][0-4]: code of character'column //character[x][5]: ASCII code 38
  • 4. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin {126,17,17,17,126,65}, // 0-A {127,73,73,73,54,66}, // 1-B {62,65,65,65,34,67}, // 2-C {127,65,65,34,28,68}, // 3-D {127,73,73,73,65,69}, // 4-E {127,9,9,9,1,70}, // 5-F {62,65,73,73,58,71}, // 6-G {127,8,8,8,127,72}, // 7-H {0,65,127,65,0,73}, // 8-I {32,64,65,63,1,74}, // 9-J {127,8,20,34,65,75}, //10-K {127,64,64,64,64,76}, //11-L {127,2,12,2,127,77}, //12-M {127,4,8,16,127,78}, //13-N {62,65,65,65,62,79}, //14-O {127,9,9,9,6,80}, //15-P {62,65,81,33,94,81}, //16-Q {127,9,25,41,70,82}, //17-R {38,73,73,73,50,83}, //18-S {1,1,127,1,1,84}, //19-T {63,64,64,64,63,85}, //20-U {31,32,64,32,31,86}, //21-V {63,64,48,64,63,87}, //22-W {99,20,8,20,99,88}, //23-X {7,8,120,8,7,89}, //24-Y {97,81,73,69,67,90}, //25-Z {62,81,73,69,62,48}, //26-0 {0,66,127,64,0,49}, //27-1 {66,97,81,73,70,50}, //28-2 {33,65,69,75,49,51}, //29-3 {24,20,18,127,16,52}, //30-4 {39,69,69,69,57,53}, //31-5 {60,74,73,73,48,54}, //32-6 {1,113,9,5,3,55}, //33-7 {54,73,73,73,54,56}, //34-8 {6,73,73,41,30,57}, //35-9 {8,8,62,8,8,43}, //36-+ {8,8,8,8,8,45}, //37-- {20,8,62,8,20,42}, //38-* {32,16,8,4,2,47}, //39-/ {20,20,20,20,20,61}, //40-= {0,65,34,20,8,62}, //41-> {8,20,34,65,0,60}, //42-< {0,96,96,0,0,46}, //43-. {0,80,48,0,0,44}, //44-, {0,54,54,0,0,58}, //45-: {0,86,54,0,0,59}, //46-; 39
  • 5. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin {0,5,3,0,0,39}, //47-' {0,3,0,3,0,34}, //48-" {0,28,34,65,0,40}, //49-( {0,65,34,28,0,41}, //50-) {0,127,65,65,0,91}, //51-[ {0,65,65,127,0,93}, //52-] {0,0,95,0,0,33}, //53-! {2,1,81,9,6,63}, //54-? {50,73,121,65,62,64}, //55-@ {20,62,20,62,20,35}, //56-# {36,42,127,42,18,36}, //57-$ {35,19,8,100,98,37}, //58-% {4,2,1,2,4,94}, //59-^ {54,73,85,34,80,38}, //60-& {2,4,8,16,32,92}, //61- {0,0,127,0,0,124}, //62-| {0,0,0,0,0,32}, //63- }; int matrix[128]; int power; //------------------------------------------------------------- ---- void main() { int column=0,row=0,pos=0,i; char scan,ch; Interfacing(); Initialize(); for(i=0;i<128;i++) matrix[i]=63; for(;;) { Print_Column(column); Print_Row(row); Print_Matrix(matrix[pos]); Print_Code(matrix[pos]); window(5+column*2,2+row*2,5+column*2,2+row*2); if((scan=getch())==0) { ch=getch(); switch(ch) { case 59: //F1 Power(); break; case 60: //F2 40
  • 6. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin if(power==1) Reset(); break; case 75: //Left Arrow if(power==1) { if(pos>0) pos--; if(column==0) { if(row>0) { column=16; row--; } else column=1; } column--; } break; case 77: //Right Arrow if(power==1) { if(pos<127) pos++; column++; if(column>15) { if(row<7) { column=0; row++; } else column=15; } } break; case 72: //Up Arrow if(power==1) { if(row>0) { pos=pos-16; row--; } } break; case 80: //Down Arrow if(power==1) 41
  • 7. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin { if(row<7) { pos=pos+16; row++; } } break; } // for switch(ch) } // for if((scan=getch())==0) else { ch=scan; switch(ch) { case 27: //ESC //Dua ra tin hieu tat mach ngoai (chan 17,bit3=1) outportb(ControlReg,8); // 8 = 00001000b return; case 13: //Enter if((row<7)&&(power==1)) { pos=pos+(16-column); row++; column=0; } break; default: if((isprint(ch))&&(power==1)) { ch=toupper(ch); for(i=0;i<64;i++) if(character[i][5]==ch) { Print_Character(column,row,ch); if(Out_Char(column,row,i)==0) { textbackground(LIGHTGRAY); textcolor(RED); window(4,25,30,25);clrscr(); cprintf("Khong gui duoc ky tu !"); } else { textbackground(LIGHTGRAY); window(4,25,30,25);clrscr(); 42
  • 8. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin } matrix[pos]=i; break; } if(pos<127) pos++; if(column==15) { if(row<7) { column=-1; row++; } else column=14; } column++; } // for if(isprint(ch)) break; } // for switch(ch) } // for else } } //------------------------------------------------------------- ---- void Initialize() { //Dong mach ngoai: chan 17,bit3=1 outportb(ControlReg,8); // 8 = 00001000b power=0; //Chua cho phep chuong trinh hoat dong textbackground(BLACK); textcolor(WHITE); window(16,20,18,20);clrscr(); printf("OFF"); } //------------------------------------------------------------- ---- void Power() { unsigned char result; if(power==0) { //Kiem tra xem chan 13 co o muc cao (bit4=1) result=inportb(StatusReg); if(result&16 !=0) // 16=10000b { //Neu bit4=1 (mach ngoai da duoc cap nguon) power=1; //Cho phep chuong trinh hoat dong textbackground(RED); 43
  • 9. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin textcolor(WHITE); window(16,20,18,20);clrscr(); printf("ON"); //Dua ra tin hieu dong mach ngoai (chan 17,bit3=0) //va thiet lap trang thai ban dau: dong bo dem 74244(chan //1,bit0=0),khong cho phep ghi vao RAM(chan 14,bit1=1) outportb(ControlReg,2); // 2 = 00000010b } else { textbackground(LIGHTGRAY); textcolor(RED); window(4,25,30,25);clrscr(); cprintf("Chua dong nguon cho mach!"); } } else { //Khong cho phep chuong trinh hoat dong power=0; textbackground(BLACK); textcolor(WHITE); window(16,20,18,20);clrscr(); printf("OFF"); //Dua ra tin hieu tat mach ngoai (chan 17,bit3=1) outportb(ControlReg,8); // 8 = 00001000b } } //------------------------------------------------------------- ---- void Interfacing() { textmode(C40); textbackground(BLUE);window(0,0,40,25);clrscr(); textbackground(BLACK);window(5,2,37,25);clrscr(); textcolor(BLUE); textbackground(LIGHTGRAY);window(4,1,36,17);clrscr(); textcolor(LIGHTGRAY); textbackground(BLACK);window(5,2,35,17);clrscr(); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); 44
  • 10. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 "); cprintf(""); cprintf(" 続 続 続 続 続 続 続 続 続 続 続 続 続 続 続 r"); textbackground(LIGHTGRAY);window(5,17,35,17);clrscr(); window(19,18,36,25);clrscr(); textbackground(BLACK);window(31,18,35,24);clrscr(); textcolor(BLUE);textbackground(LIGHTGRAY); window(20,19,30,19);clrscr();cprintf("Column:"); window(20,21,30,21);clrscr();cprintf("Row:"); window(20,23,30,23);clrscr();cprintf("Code:"); window(4,19,17,23);clrscr(); window(4,25,30,25);clrscr(); window(6,20,17,21);clrscr();cprintf("F1 - Power"); window(6,21,17,22);clrscr();cprintf("F2 - Reset"); window(5,22,17,23);clrscr();cprintf("ESC - Exit"); } //------------------------------------------------------------- ---- void ItoSofB(int i,char up[],char down[])//Chuyen so nguyen // sang chuoi cac so nhi phan { int j=0,k=0; do { if(i%2==0) up[j]='0'; else up[j]='1'; j++; i=i/2; } while(i!=0); up[j]='0'; do { down[k]=up[j-1]; k++;j--; } while(j>=0); down[k-1]='0'; } //------------------------------------------------------------- ---- void Print_Code(int code) { 45
  • 11. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin char up[7]; char down[7]; textcolor(RED);textbackground(LIGHTGRAY); window(27,23,30,23);clrscr(); itoa(code,up,10);cprintf("%s",up); window(22,24,30,24);clrscr(); ItoSofB(code,up,down);cprintf("%sB",down); } //------------------------------------------------------------- ---- void Print_Column(int column) { char up[7],down[7]; textcolor(RED);textbackground(LIGHTGRAY); window(27,19,30,19);clrscr(); itoa(column,up,10);cprintf("%s",up); window(22,20,30,20);clrscr(); ItoSofB(column,up,down);cprintf("%sB",down); } //------------------------------------------------------------- ---- void Print_Row(int row) { char up[7],down[7]; textcolor(RED);textbackground(LIGHTGRAY); window(27,21,30,21);clrscr(); itoa(row,up,10);cprintf("%s",up); window(22,22,30,22);clrscr(); ItoSofB(row,up,down);cprintf("%sB",down); } //------------------------------------------------------------- ---- void Print_Cell(int column,int row,char value) { if(value=='0') textbackground(BLACK); else textbackground(RED); textcolor(WHITE); window(31+column,18+row,31+column,18+row);clrscr(); printf("%c",value); } //------------------------------------------------------------- ---- void Print_Matrix(int code) { int i,j,k,len; 46
  • 12. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin char up[9]; char down[9]; for(i=0;i<5;i++) { k=0; ItoSofB(character[code][i],up,down); len=strlen(up); while(k<8-len) { up[len+k]='0'; k++; } for(j=0;j<7;j++) Print_Cell(i,j,up[j]); } } //------------------------------------------------------------- ---- void Print_Character(int column,int row,int code) { textcolor(RED);textbackground(BLACK); window(5+column*2,2+row*2,5+column*2,2+row*2);clrscr(); printf("%c",code); } //------------------------------------------------------------- ---- int Out_Char(int column,int row,int code) //Dua ky tu co ma // code ra cong song song { int i; unsigned char result; int add; row=row<<4; add=row|column; //Dia chi o nho cua RAM for(i=0;i<1000;i++) //Hoi vong { result=inportb(StatusReg); //Doc trang thai vao if(result&64==0) //Kiem tra xem chan 10 co o muc thap //(bit7=0) { //64 = 01000000b //Dua dia chi ra cong song song outportb(DataReg,add);//Ghi du lieu vao thanh ghi du lieu //Dua ra tin hieu chot dia chi 74373 //va mo bo dem 74244 (chan 1,bit0=1) outportb(ControlReg,3);//Ghi du lieu vao thanh ghi dieu 47
  • 13. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin // khien // 3 = 00000011b //Dua ma ky tu ra cong song song outportb(DataReg,code); //Dua ra tin hieu ghi vao RAM (chan 14,bit1=0); outportb(ControlReg,1); // 1 = 00000001b //Dua ra tin hieu dong bo dem 74244 (bit0=0) // va khong cho ghi vao RAM (bit1=1) outportb(ControlReg,2); // 2 = 00000010b return 1; // Ket thuc ghi vao RAM } } return 0; } //------------------------------------------------------------- ---- void Reset() { int i; //Dua ra tin hieu dong mach (chan 17, bit3=1) outportb(ControlReg,10); // 10 = 00001010b delay(500); // Tre 0.5s //Thiet lap lai trang thai ban dau: bit0=0(dong bo dem 74244), //bit1=1(khong cho ghi vao RAM), bit3=0(mo mach) outportb(ControlReg,2); // 2 = 00000010b for(i=0;i<128;i++) //Xoa mang chua cac ky tu ve ky tu trong matrix[i]=63; Interfacing(); //Ve lai giao dien } //-------------------------------------------------------------------------- ch測ng III: H鱈ng dn s旦 d担ng ch測ng trnh Ch 測ng trnh 速iu khin ch ch淡a trong m辿t file t捉n l袖: Quangcao.exe, ch孫y trong m束i tr 棚ng MSDOS.Khi kch ho孫t file 速達 th giao din c単a ch測ng trnh s xut hin nh hnh III.1. 48 Hnh III.1 Giao din c単a ch足測ng t rnh 速iu khin
  • 14. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin Phn chnh c単a giao din l袖 m辿t ma trn c存c 束 g奪m 8 h袖ng x 16 c辿t m束 ph叩ng ma trn 速n qu其ng c存o c単a m孫ch th湛c. M巽i 束 l袖 n測i 速 hin th k箪 t湛 m袖 ng棚i d誰ng nhp v袖o. 谷 g達c d鱈i b捉n ph其i giao din l袖 c存c th束ng s竪 c単a 束 ch歎 t孫i v tr con tr叩 m袖n hnh xut hin g奪mc達: + Column(c辿t): ch s竪 th淡 t湛 c単a c辿t (t探 0 速n 15) m袖 con tr叩 m袖n hnh xut hin. + Row (h袖ng): ch s竪 th淡 t湛 c単a h袖ng (t探 0 速n 7) m袖 con tr叩 m袖n hnh xut hin. + Code(m揃): ch m揃 c単a k箪 t湛 (theo b其ng m揃 qui 鱈c c単a ch坦ng t束i 速揃 速樽c 速a ra 谷 ch測ng I c単a phn n袖y) xuthin t孫i v tr con tr叩 m袖nhnh. B捉n c孫nh 速達 l袖 ma trn 5x7 c存c 束 vu束ng biu th c存c bit 1(速n LEDs存ng) v袖 bit 0 (速n LED t他t) c単a ma trn 5x7 LED淡ng v鱈i k箪 t湛 hin th. 谷 g達c d鱈i b捉n tr存i giao din l袖 b其ng ch dn c存c phmch淡c n即ng: + F1 Power: Bt / t他t ch測ng trnh. L坦c n袖y, ch測ng trnh cha 速樽c bt n捉n b捉n c孫nh 速達 l袖 ch歎 OFF(t他t). Khi nhnF1, ch測ng trnh s kim tra qua c脱ng song song xem m孫chngo袖i 速揃 速樽c cpngu奪n hay cha. Nu m孫chngo袖i 速揃 速樽c cpngu奪n th ch測ng trnh s g旦i tn hiu ra c脱ng song song cho php m孫ch ngo袖i ho孫t 速辿ng, 速奪ng th棚i cho php ch測ng trnh ho孫t 速辿ng. L坦c 速達, ch歎 OFF s chuyn th袖nh ON. Nu m孫ch ngo袖i cha 速樽c cpngu奪n th ch測ng trnh s hin ra th束ng b存o l袖: "Cha 速達ng ngu奪n cho m孫ch ngo袖i !". Khi ch測ng trnh 速ang 速樽c bt m袖 nhnF1 th ch測ng trnh s g旦i tn hiu ra c脱ng song song kh束ng cho php m孫chngo袖i ho孫t 速辿ng, 速奪ng th棚i t他t ch測ng trnh. + F2 Reset: Thit lp l孫i. Khi ch測ng trnh 速ang 速樽c bt m袖 nhnF2 th ch- 測ng trnh s g旦i tn hiu ra c脱ng song song c他t ngu奪n cpcho m孫chngo袖i kho其ng 0.5 s, sau 速達 速達ng l孫i nh損mthit lp l孫i h th竪ng tr谷 v tr孫ng th存i ban 速u. 則奪ng th棚i s xo存 to袖n b辿 ma trn c存c 束 k箪 t湛 th袖nh k箪 t湛 tr他ng (m揃 63). + ESC exit: Tho存t. Khi nhnphmESCs tho存t kh叩i ch測ng trnh 速iu khin. Tr鱈c khi tho存t, ch測ng trnh s g旦i tn hiu ra c脱ng song song 速 c他t c他t ngu奪n cpcho m孫chngo袖i. Khi ch測ng trnh 速揃 速樽c bt, ta c達 th d誰ng c存c phmm嘆i t捉n (, , , ) 速 di chuyn con tr叩 速n v tr bt k炭 tr捉n trang m袖n hnh 速 nhp k箪 t湛 cn hin th. Khi k箪 t湛 速樽c nhp v袖o, n達 hin th t孫i v tr con tr叩 m袖n hnh v探a 速淡ng, sau 速達, con tr叩 t湛 速辿ng nh其y sang v tr b捉n c孫nh. Ch測ng trnh s g旦i th束ng tin v k箪 t湛 v探a nhp ra c脱ng song song 速 m孫chngo袖i hin th, nu kh束ng th袖nh c束ng th s c達 th束ng b存o: "Kh束ng g旦i 速樽c k箪 t湛 !". Hnh III.2 l袖 hnh 其nh c単a ch測ng trnh khi 速揃 速樽c bt v袖 nhp c存c k箪 t湛. L坦c n袖y, con tr叩 m袖nhnh 速揃 速樽c dch chuyn 速n c辿t 2, h袖ng 2, k箪 t湛 t孫i 束 n袖y l袖 "L", c達 m揃 l袖 11.Th束ng tin c単a k箪 t湛 速達 c達 th thy 谷 g達c d鱈i b捉n ph其i b損ng c其 s竪 thp ph息n v袖 s竪 nh ph息n. 49
  • 15. Thit k m孫chlogic s竪 Phn III: Phn mm速iu khin Hnh III.2 Hnh 其nh c単a ch足測ng t rnh khi 速足樽c bt 50