• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于stc51單片機的電子時鐘設(shè)計

    基于stc51單片機的電子時鐘設(shè)計

    作者: 時間:2012-10-17 來源:網(wǎng)絡(luò) 收藏

    硬件資源

    焊接電路板中使用STC系列單片機,一個四位一體數(shù)碼管、一個二極管,以及一些必要輔助子電路。數(shù)碼管的位選端口為P3^0、P3^1、P3^2、P3^3,段選端口為P1的8個端口;調(diào)節(jié)小時、分鐘端口分別為P0^0、P0^4,二極管指示燈接P2^2口。

    由于使用的數(shù)碼管為共陽極數(shù)碼管,因此根據(jù)數(shù)碼管結(jié)構(gòu)圖可知,P3口必須置高電平選通其中一位,P0口低電平點亮相應(yīng)的斷碼,這和共陰極數(shù)碼管0x3f代表0不一樣,這里表示為0xc0,編程時應(yīng)該注意。

    在數(shù)碼管的段碼連接上,我用的是a、b、c、d、e、f、g、h所對應(yīng)的管腳11、7、4、2、1、10、5、3分別接P1^0、P1^1、P1^2、P1^3、P1^4、P1^5、P1^6、P1^7。因此,如果要顯示一個數(shù)字3的話,由排列 hgfe dcba 得到 1011 0000 就是0xb0,但是不太確定P1口高低位是如何的,因此必須經(jīng)過測試程序進行確定。

    #include reg52.h>
    #define uint unsigned int
    void delay(uint cnt) //延時(cnt)ms
    {
    uint i;
    while(cnt--)
    {
    for(i=0;i 110;i++);
    }
    }

    main()
    {
    while(1)
    {
    P2=0x00;
    P3=0xaa; //選通其中的兩位
    P1=0xc0; //段碼賦值1100 0000
    delay(20);
    }

    }


    通過測試,得到的結(jié)果為0000,且指示燈亮。由于段碼:h、g、f、e、d、c、b、a對應(yīng)著斷碼之P3=hgfedcba,所以低位對低位,a、b、c、d、e、f、g、h分別接P1^0、P1^1、P1^2、P1^3、P1^4、P1^5、P1^6、P1^7是正確的。

    當(dāng)P1=0xc0時,P1=1100 0000,也就對應(yīng)著a=b=c=d=e=f=0點亮(低電平),g=h=1熄滅(高電平)。兩外對于選位P3=0xaa,實際只接了P3的前4個端口,即低4位端口,也就是1010,其中P3^0=P3^2=0,而P3^1=P3^3=1。再根據(jù)數(shù)碼管選位端口12—9—8—6,我把12接P3^0、9接P3^1、8接P3^2、6接P3^3。

    12

    ------------------------------------------------------------------------

    A B C D E F G H

    11 7 4 2 1 10 5 3

    ------------------------------------------------------------------------

    9

    ------------------------------------------------------------------------

    A B C D E F G H

    11 7 4 2 1 10 5 3

    ------------------------------------------------------------------------

    8

    ------------------------------------------------------------------------

    A B C D E F G H

    11 7 4 2 1 10 5 3

    ------------------------------------------------------------------------

    6

    ------------------------------------------------------------------------

    A B C D E F G H

    11 7 4 2 1 10 5 3

    ------------------------------------------------------------------------

    選位這里和硬件的連接方式有關(guān),這里不再多說,不過做時鐘的時候只可能一次掃描一個位的段碼值,這里為了直觀起見,可以采用一一映射方式對選位的四個值進行編碼。

    tab[4]={0x01,0x02,0x04,0x8}; //從左至右第n個數(shù)碼管點亮需要向P3口送入的值;

    tab1[4]={tab[0],tab[1],tab[2],tab[3]}; //從左至右選通第幾個數(shù)碼管?

    這樣,只需要關(guān)注第幾個點亮就可以,不需要關(guān)注點亮?xí)r具體該向P3口輸出的值。我使用的數(shù)碼管并非標(biāo)注的四位一體七段數(shù)碼管,中間含有兩個連體的二極管組成的兩點,可以做時鐘的小時同分鐘的分隔符,它由8號管腳選通,由h管腳也就是3號管腳置低電平點亮。

    小結(jié):
    選段選位怎么選不用太多關(guān)注,因為這和硬件的鏈接方式有關(guān),再設(shè)計硬件的時候,盡量直觀。根據(jù)寄存器P1 的值,比如01111111,這里有個高位低位的問題,當(dāng)把這個值送至寄存器P1時,是按照高地位匹配的方式進行分配的,當(dāng)然要知道P1^0時低位,而P1^7是高位,于是有P1^7=0。

    51單片機相關(guān)文章:51單片機教程




    關(guān)鍵詞: stc51單片機 電子時鐘

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 孙吴县| 大英县| 九寨沟县| 象山县| 晋州市| 铜梁县| 七台河市| 泰州市| 诏安县| 邯郸市| 库车县| 莒南县| 福州市| 景宁| 故城县| 旬邑县| 天镇县| 通山县| 崇礼县| 南阳市| 绥芬河市| 盐津县| 台前县| 延吉市| 安新县| 英吉沙县| 新巴尔虎右旗| 遂宁市| 榆中县| 宁都县| 格尔木市| 西昌市| 泗阳县| 资兴市| 塔河县| 肇东市| 太和县| 绩溪县| 台安县| 称多县| 广东省|