官术网_书友最值得收藏!

3.6 單只數碼管循環顯示0~9

本例運行時,電路中的單只數碼管會循環顯示0,1,2,…,9。

本例電路如圖3-6所示。

圖3-6 單只數碼管循環顯示0~9電路

程序設計調試與實訓:

本例的單只共陰數碼管連接在P0端口,電路中必須添加上拉電阻。當P0端口相應引腳為1時,對應數碼管段點亮。程序中預設了數字0~9的段碼,0~9的段碼按固定時間間隔循環發送到P0端口,產生數字循環顯示效果。

本例源程序預設的數字段碼表存放在數組DSY_CODE中,由于段碼表是固定的,因此存儲類型可設為code。由于本例給出的段碼表是針對共陽數碼管的,但電路中使用的卻是共陰數碼管,因此在段碼送至P0端口顯示時要將其取反。

讀者可將本例段碼表改為共陰數碼管段碼表,使程序實現相同功能。

源程序代碼:

        //-----------------------------------------------------------------
        //  名稱: 單只數碼管循環顯示0~9
        //-----------------------------------------------------------------
        //  說明: 主程序中的循環語句反復將0~9的段碼送至P0端口,使數字0~9
        //       循環顯示。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //0~9的數碼管段碼,最后一個為關閉
        uchar  code  DSY_CODE[]  =  {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
    0xff};
        //-----------------------------------------------------------------
        // 延時
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar t;
          while(x--) for(t = 0; t < 120; t++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar i = 0;
          P0 = 0x00;
          while(1)
          {
            P0 = ~DSY_CODE[i];
            i = (i+1) % 10;
            DelayMS(180);
          }
        }
主站蜘蛛池模板: 长阳| 通化市| 乐都县| 南川市| 遂宁市| 桂阳县| 凤冈县| 宁河县| 明溪县| 阜平县| 米易县| 玉林市| 喀什市| 广河县| 合水县| 繁昌县| 赞皇县| 越西县| 浦城县| 岳阳市| 丹寨县| 呼图壁县| 南投市| 靖江市| 安康市| 天长市| 新干县| 图们市| 镇沅| 白玉县| 绥德县| 桐梓县| 景洪市| 义乌市| 东源县| 交口县| 慈溪市| 孟连| 松滋市| 紫金县| 盈江县|