新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51的簡易00-99計數器的設計與仿真

        基于51的簡易00-99計數器的設計與仿真

        作者: 時間:2014-03-13 來源:網絡 收藏

        1 系統描述

        本文引用地址:http://www.104case.com/article/234714.htm

        本系統利用 單片機來制作一個手動,在 單片機的P3.2 管腳和P3.3 管腳各接一個輕觸開關K1和K2,作為手動計數的按鈕,用單片機的P0.0 - P0.7 接一個兩位綠色共陰極數碼管(7SEG-COM-CAT-GRN),作為00 - 99 計數的個位數和十位數顯示。系統正常運行后顯示00,按一次K1 鍵,數字加1,當計數到 99 時,再按一次 K1 鍵,又從00 開始計數。當計數到 99 時,按一次K2,計數為98,繼續按K2,直到計數為00,由此實現正計數和倒計數的功能。本系統可用于競技比賽中的計分,或者用于重要事件將要到來的倒計時。

        2 硬件電路設計

        硬件電路的設計是本系統能否實現所需功能的關鍵環節,在設計過程中須注意電路的整體布局、元器件的擺放、元器件的參數選擇及電路的優化,具體電路圖如1-1 所示。其中,X1 為12MHZ 的晶體振蕩器,RX8 為排阻。

        圖1-1 電路原理圖:

         

         

        3 軟件設計

        根據硬件電路的結構及功能要求,在分析所需算法和功能模塊的基礎上編寫本系統的代碼,要求代碼盡可能的簡潔易懂,并有在必要的地方寫明注釋。具體代碼如下所示:

        #include// 導入頭文件

        unsigned b[10]={0x3f,0×06,0x5b,0x4f,0×66,0x6d,0x7d,0×07,0x7f,0x6f};//0-9 的編碼

        void delay(void)// 延時子程序,延時1 秒

        {

        unsigned char i,j,k;for(i=20;i>0;i- )

        for(j=2;j>0;j-)

        for( k=250; k>0; k-);

        }

        void Inc_CNT ( void )// 按K1 鍵正計數,可從0 計到99

        {

        unsigned char x, y, z;

        for( x=0; x<10; x++){

        for( y=0; y<10; y++){

        if( (P3|0xfb)==0xfb ){

        for( z=0; z<22; z++){

        P2=0xf2;

        P0=b[x];

        delay( );// 調用延時子程序

        P2=0xf1;

        P0=b[y];

        delay( );

        }

        }

        else{

        P0 = 0x3f;

        P2 = 0×00;

        break;}}}}

        void Dec_CNT( void )// 按k2 鍵倒計數,可從99 計到00

        {

        unsigned char x, y, z;

        for( x=10; x>0; x-){

        for( y=10; y>0; y-){

        if((P3|0xf7)==0xf7){

        for(z=0; z<22;z++){

        P2=0xf2;

        P0=b[x-1];

        delay( );

        P2=0xf1;

        P0=b[y-1];

        delay( );}// 調用延時子程序

        }

        else {

        P0=0x3f;

        P2=0×00;

        break;}}}}

        void main( void )// 主函數

        {

        unsigned char key;

        P2=0×00;

        P0=0x3f;

        for(;;){

        P3|=0xf3;

        key=P3;

        if(key==0xfb)Inc_CNT();// 調用正計數函數

        else if(key==0xf7 )Dec_CNT();// 調用倒計數函數

        else{

        P2=0×00;

        P0=0x3f;}}}

        4 軟硬件聯調

        單片機系統的硬件調試和軟件調試是不能分開的,許多硬件錯誤是在軟件調試過程中被發現和糾正的。但通常是先排除明顯的硬件故障以后,再和軟件結合起來調試以進一步排除故障。可見硬件的調試時基礎,如果硬件調試不通過,軟件設計則無從談起。硬件的調試主要是把電路各種參數調整到符合設計要求。先排除硬件電路故障,包括設計性錯誤和公益性故障。一般原則是先靜態后動態。利用萬用表或邏輯測試儀器,檢查電路中的各器件以及引腳是否連接正確,是否有短路故障。運行正確的仿真電路圖如下所示。

         

         

        5 結語

        本系統利用 單片機來制作一個手動,在AT89C51 單片機的P3.2 管腳和P3.3 管腳各接一個輕觸開關K1和K2,作為手動計數的按鈕, 通過使用專業繪制電路圖的軟件和程序編譯軟件,不斷進行測試和調試,從而證明了本系統可用于競技比賽中的計分,或者用于重要事件將要到來的倒計時。

        塵埃粒子計數器相關文章:塵埃粒子計數器原理


        關鍵詞: AT89C51 計數器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 休宁县| 建阳市| 神木县| 南安市| 四会市| 江西省| 金乡县| 周口市| 苍梧县| 侯马市| 屯门区| 深州市| 泸定县| 景洪市| 泰来县| 依安县| 奉节县| 临澧县| 东乡族自治县| 临桂县| 广南县| 翁牛特旗| 宁都县| 汶川县| 南陵县| 福鼎市| 大埔区| 扎兰屯市| 冀州市| 承德县| 石屏县| 腾冲县| 平湖市| 扎兰屯市| 麻江县| 桂阳县| 施秉县| 梧州市| 时尚| 西昌市| 攀枝花市|