8255A(使用C語言)

第 1 頁,共 2 頁 1 2 末頁末頁
顯示結果從第 1 筆 到 10 筆,共計 12 筆
  1. #1
    會員
    註冊日期
    2002-07-25
    討論區文章
    468

    8255A(使用C語言)

    ...................
    #define PA 0x00
    #define PB 0x01
    #define PC 0x02
    #define Ctrl 0x03
    WR_Port(Ctrl,0x81) /*定義PA,PB為輸出PC4~PC7為輸出
    PC0~PC3為輸入*/
    main()
    {
    ........
    WR_Port(PC,0x7f); /*寫出去PC為0x7f的資料*/
    x=RD_Port(PC); /*讀入PC的資料設定到x*/

    請問
    照我定義那樣設定,那這句WR_Port(PC,0x7f)
    1.還可以寫出0x7f嗎??
    2.如果是的話,那讀入應該就是0x7f囉??



  2. #2
    會員 gwochern 的大頭照
    註冊日期
    2002-02-15
    討論區文章
    785
    這要看WR_Port這個function內容如何寫...
    你這是要由x86系統去控制8255嗎?
    如果是你必須要#include<dos.h>和#include<conio.h>
    用outportb()和inportb()控制io

  3. #3
    會員
    註冊日期
    2001-01-17
    討論區文章
    241
    一般輸出/輸入共用時, 輸入的bit都拉為High.
    在你的情況下, Low Nibble 必須為 0x0F 才可以.
    所以 WR_Port(PC, 0x7F) 是正確的.

  4. #4
    會員
    註冊日期
    2002-07-25
    討論區文章
    468
    最初由 gwochern 發表
    這要看WR_Port這個function內容如何寫...
    你這是要由x86系統去控制8255嗎?
    如果是你必須要#include<dos.h>和#include<conio.h>
    用outportb()和inportb()控制io
    我ㄉ程式如下:可是會就會發生沒有按按鍵就會執行LED左移位ㄉ動作

    #include <stdio.h>
    #include <dos.h>
    #include<conio.h>
    #include<stdlib.h>
    #include "lpt.c"
    #define PA 0x00
    #define PB 0x01
    #define PC 0x02
    #define Ctrl 0x03
    main()
    {
    int seg7[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
    0x88,0x83,0xc6,0xa1,0x86,0x96};
    int buf[4]={0xff,0xff,0xff,0xff};
    int scan[4]={0x0e,0x0d,0x0b,0x07};
    int scanpc[4]={0x7f,0xbf,0xdf,0xef};
    int i,j,k,m;
    int value,tmp;
    int sum;
    int count=5;
    WR_Port(Ctrl,0x81);
    WR_Port(PB,0x0f);
    printf("push keypad\n");
    start:
    do
    {
    count--;
    if(count==0)
    {
    k=0;
    for(m=0;m<4;m++)
    {
    WR_Port(PC,scanpc[m]);
    tmp=RD_Port(PC);
    value=(tmp|0xf0);
    if(m==0)
    {
    if(value==0xfe) { sum=1; }
    if(value==0xfd) { sum=2; }
    if(value==0xfb) { sum=3; }
    if(value==0xf7) { sum=10; }
    }
    if(m==1)
    {
    if(value==0xfe) { sum=4; }
    if(value==0xfd) { sum=5; }
    if(value==0xfb) { sum=6; }
    if(value==0xf7) { sum=11; }
    }
    if(m==2)
    {
    if(value==0xfe) { sum=7; }
    if(value==0xfd) { sum=8; }
    if(value==0xfb) { sum=9; }
    if(value==0xf7) { sum=12; }
    }
    if(m==3)
    {
    if(value==0xfe) { sum=14; }
    if(value==0xfd) { sum=0; }
    if(value==0xfb) { sum=15; }
    if(value==0xf7) { sum=13; }
    }
    }
    }
    while(k==0)
    {
    k=-1;
    count=5;
    for(i=0;i<3;i++)
    {
    buf[i]=buf[i+1];
    }
    buf[3]=seg7[sum];
    break;
    }
    goto end;
    }while(1);
    end:
    for(j=3;j>=0;j--)
    {
    WR_Port(PA,buf[j]);
    WR_Port(PB,scan[j]);
    delay(4);
    WR_Port(PB,0x0f);
    }
    goto start;
    }

  5. #5
    會員
    註冊日期
    2002-07-25
    討論區文章
    468
    副程式如下:

    #define LPT_Data 0x378
    #define LPT_Ctrl 0x37a

    WR_Port(int Port,int Data)
    {
    Port=(~Port) & (0x03);
    outportb(LPT_Ctrl,0x04+Port);
    outportb(LPT_Data,Data);
    outportb(LPT_Ctrl,0x0c+Port);
    delay(1);
    outportb(LPT_Ctrl,0x04+Port);
    }

    RD_Port(int Port)
    {
    int Data;
    Port=(~Port) & (0x03);
    outportb(LPT_Data,0xff);
    outportb(LPT_Ctrl,0x24+Port);
    outportb(LPT_Ctrl,0x20+Port);
    outportb(LPT_Data,0xff);
    delay(1);
    Data=inportb(LPT_Data);
    outportb(LPT_Ctrl,0x24+Port);
    return(Data);
    }



  6. #6
    會員
    註冊日期
    2002-07-25
    討論區文章
    468
    電路我用口述ㄉ

    [共陽]七段顯示器是四顆ㄉ接在一起ㄉ接腳A~G DP是內部共接ㄉ
    PA0~PA7接七段顯示器A~G DP
    七段顯示器由一ㄍ9012BJT控制
    BJT射極接VCC(5V),基極接PB0~PB3,集極接七段ㄉcommon端
    當PB0送出High時七段顯示器關閉
    PC0~PC3為input,PC4~PC7為output
    PC4~PC7為keypad的行掃描碼
    PC0~PC3為讀入列掃描碼
    當有按按鍵時,PC0~PC3有一ㄍbit為Low
    否則為High

  7. #7
    會員 gwochern 的大頭照
    註冊日期
    2002-02-15
    討論區文章
    785
    抱歉我時在沒時間幫你改程式,我只大概看了一下,一開你讓count-- 還沒減到零會跳開do{}while(1);去執行end:之後程式在跳回start:程式這樣寫有點亂,這樣可編譯嗎?可以的話,你想一下end那段程式是做什麼,之後count=0程式會去執行if(count==0){}這段,你想一下這段程式是做什麼,到m<4時,k為0去執行while(k==0){},你想一下這段程式是做什麼,總結,這是你這段程式的跑法,想一下這是你要的嗎???希望有用...還有你那個do{}while(1);有像沒什麼用處,被你用goto跳來跳去...如果我說錯請見諒


    start:
    do
    {
    count--;
    if(count==0)
    {
    k=0;
    for(m=0;m<4;m++)
    {
    WR_Port(PC,scanpc[m]);
    tmp=RD_Port(PC);
    value=(tmp|0xf0);
    if(m==0)
    {
    if(value==0xfe) { sum=1; }
    if(value==0xfd) { sum=2; }
    if(value==0xfb) { sum=3; }
    if(value==0xf7) { sum=10; }
    }
    if(m==1)
    {
    if(value==0xfe) { sum=4; }
    if(value==0xfd) { sum=5; }
    if(value==0xfb) { sum=6; }
    if(value==0xf7) { sum=11; }
    }
    if(m==2)
    {
    if(value==0xfe) { sum=7; }
    if(value==0xfd) { sum=8; }
    if(value==0xfb) { sum=9; }
    if(value==0xf7) { sum=12; }
    }
    if(m==3)
    {
    if(value==0xfe) { sum=14; }
    if(value==0xfd) { sum=0; }
    if(value==0xfb) { sum=15; }
    if(value==0xf7) { sum=13; }
    }
    }
    }
    while(k==0)
    {
    k=-1;
    count=5;
    for(i=0;i<3;i++)
    {
    buf[i]=buf[i+1];
    }
    buf[3]=seg7[sum];
    break;
    }
    goto end;
    }while(1);
    end:
    for(j=3;j>=0;j--)
    {
    WR_Port(PA,buf[j]);
    WR_Port(PB,scan[j]);
    delay(4);
    WR_Port(PB,0x0f);
    }
    goto start;
    }

  8. #8
    會員
    註冊日期
    2002-07-25
    討論區文章
    468
    最初由 gwochern 發表
    抱歉我時在沒時間幫你改程式,我只大概看了一下,一開你讓count-- 還沒減到零會跳開do{}while(1);去執行end:之後程式在跳回start:程式這樣寫有點亂,這樣可編譯嗎?可以的話,你想一下end那段程式是做什麼,之後count=0程?..
    可以編譯沒有問題
    end下面的內容式多工掃描目的是在掃描七段顯示器
    我設count--的目的是為了防止機械彈跳當count減到0時
    才讓8255A的PC去掃描keypad按鍵
    掃描如果有按鍵的話
    就會進入while迴圈
    所以我設k=0
    我知道do while迴圈好像沒有用
    可是這樣用應該不是影響到主程式ㄉ問題吧

    還是謝謝你

  9. #9
    會員
    註冊日期
    2002-07-25
    討論區文章
    468
    謝謝大家
    我解開ㄌ

  10. #10
    等待愛情來臨 gorack 的大頭照
    註冊日期
    2001-10-22
    討論區文章
    64
    好厲害喔!! 在下也是讀電子ㄉ..............



類似的主題

  1. 求救c語言
    作者:puice 所在討論版:-- 其 他 軟 體 討 論 版
    回覆: 6
    最後發表: 2009-04-07, 07:15 PM
  2. 關於C語言中的char
    作者:流浪者~MIT 所在討論版:-- 其 他 軟 體 討 論 版
    回覆: 8
    最後發表: 2002-11-23, 10:07 PM
  3. c語言中的if敘述
    作者:流浪者~MIT 所在討論版:-- 其 他 軟 體 討 論 版
    回覆: 1
    最後發表: 2002-11-03, 01:02 PM
  4. CorelDraw10無法用ps2語言列印??????
    作者:kitty388 所在討論版:-- 繪 圖 軟 體 討 論 版
    回覆: 5
    最後發表: 2001-12-17, 10:14 AM

 

8255卡 and EPP模式

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •