新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 咱們的ADC0809電壓表

        咱們的ADC0809電壓表

        作者: 時間:2016-11-28 來源:網絡 收藏
        第一次和同學合作的學校課題:表,以實物失敗,仿真成功告終。相信以后回頭看,會發現許多地方非常的不專業,特發此博文,以后當笑話看。不過因為是第一次接觸AD相關知識,也學到了挺多。
        系統軟件設計要求:
        (1) 鍵盤管理程序(包括鍵掃描、鍵處理程序)。
        (2) LED動態顯示程序,包括:
        (3) 各通道輪流顯示,共顯示2個通道,每通道顯示1s;
        (4) 單通道顯示,僅顯示指定通道電壓,并保持到其他功能鍵按下。
        先上原理圖:
        原理圖連線比較亂,主要是為了滿足盡量少外圍元件的要求,有一個明顯奇怪的地方就是38譯碼器輸出口沒用完,但是單片機口接得滿滿的,因為當時想用38譯碼器的其中三個輸出口來控制ADC0809的ABC,結果發現38譯碼器輸出口一次只能有一個低電,從而導致ADC的選址ABC兩個以上低電的情況無法實現,測量電壓輸入口切換的功能也無法實現。這個原理圖的錯誤直到編程時才發現,結果只能大膽參考網絡言論,把ADC0809的STARTALE共接,OEEOC共接,雖然總感覺會帶來潛在問題,還好,仿真成功了。
        看到網上一些仿真圖,有模有樣,比如紅綠交通燈,還真畫出紅綠燈外形,還有馬路斑馬線等等,而不是只用LED燈,真佩服,不過覺得把心思都用在表面的東西,還不如優化一下方案和程序。(注意:如參考此程序AD0809和C52的兩個OUT網絡標號高低位順序是相反的)
        說到程序,原本是本著dont share your code的原則(來自最近剛看了斯坦福的公開課,真是重視知識產權),不打算公開,不過想想,自己編得這么幼稚低級,就當做交流和以后借鑒吧:
        ///12MHZ/////
        //////頭文件及宏定義////////
        #include
        #define uint unsigned int
        #define uchar unsigned char
        ///////相關變量定義///////
        static uchar keynum;
        bit shift;
        float temp;
        uchar val_int;
        uchar val_decimal;
        ///////I/O口定義/////////
        sbit STA_ALE = P3^0;
        sbit OE_EOC = P3^1;
        sbit CLK = P3^2;
        sbit ADD_A = P3^3;
        sbit ADD_B = P3^4;
        sbit ADD_C = P3^5;
        sbit ADC_B = P3^6;
        sbit ADC_A = P3^7;
        ////////帶小數點數碼管顯示編碼///////////
        uchar data numtable_DE[] =
        {
        0xbf,0x86,0xdb,0xcf,
        0xe6,0xed,0xfd,0x87,
        0xff,0xef
        };
        ////////不帶小數點數碼管顯示編碼///////////
        uchar data numtable[] =
        {
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f
        };
        ///////數碼管動態顯示函數聲明///////
        void disp();
        ///////延時函數///////
        void delay(uint x)
        {
        uint a,b;
        for ( a = x; a > 0; a--)
        for ( b = 125; b > 0; b--);
        }
        ///////矩陣鍵盤掃描及賦值函數///////(這個部分自己改造得比較喜歡,想記下來,作為自己的風格)
        int keyscan()
        {
        uchar temp1,temp2,keycod;
        P1 = 0xf0;
        if ( (P1 & 0xf0) != 0xf0 )
        {
        temp1 = P1;
        }
        P1 = 0x0f;
        temp2 = P1;
        keycod = temp1 | temp2;
        switch(keycod)
        {
        case 0x7e:
        keynum = 1;
        break;
        case 0xbe:
        keynum = 2;
        break;
        case 0xde:
        keynum = 3;
        break;
        default :
        keynum = keynum;
        break;
        }
        }
        ///////數碼管動態顯示函數///////
        void disp()
        {
        ADD_A = 1;
        ADD_B = 0;
        ADD_C = 0;
        P0 = numtable_DE[val_int];
        delay(1);
        ADD_A = 0;
        ADD_B = 1;
        ADD_C = 0;
        P0 = numtable[(val_decimal/10)];
        delay(1);
        ADD_A = 1;
        ADD_B = 1;
        ADD_C = 0;
        P0 = numtable[(val_decimal)];
        delay(1);
        }
        上一頁 1 2 下一頁

        關鍵詞: ADC0809電壓

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 开鲁县| 新安县| 马尔康县| 福建省| 丰都县| 绥化市| 惠州市| 正宁县| 平阴县| 榕江县| 容城县| 蚌埠市| 阿尔山市| 英吉沙县| 常山县| 淄博市| 吴桥县| 河西区| 凤山市| 澄迈县| 正阳县| 平湖市| 临潭县| 开平市| 彰化县| 长葛市| 吕梁市| 贞丰县| 尚志市| 小金县| 张家口市| 长沙县| 班玛县| 克山县| 无棣县| 夏津县| 井冈山市| 沙洋县| 沁阳市| 晋江市| 内乡县|