单片机C语言程序设计实训100例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.20 数码管显示拨码开关编码

拨码开关常用于编码设置或状态设置,例如,多媒体教室常用的硬件广播卡就是用拨码开关来设置编码的。本例用数码管显示当前拨码开关所设定的编码,系统运行过程中如果改动拨码设置,新的编码会立即显示在数码管上。

本例电路如图3-17所示。

图3-17 数码管显示拨码开关编码电路

程序设计调试与实训:

本例直接读取连接在P1端口的拨码开关编码值,然后将其分解为3个数位并显示在数码管上。语句m = 0xFE用于设置数码管位码初值,即11111110,在for循环内会进行3次循环左移,m依次为11111101,11111011,11110111,这3个位码中,0分别位于1,2,3位,这分别与4位数码管的2,3,4位对应,因此所读取的值会显示在数码管右3位上。

如果在系统运行时调整拨码开关,新的编码会立即显示在数码管上。

读者可修改本例,使3个数位从数码管左边开始显示,同时将高位无效的0屏蔽。

源程序代码:

        //-----------------------------------------------------------------
        //  名称: 数码管显示拨码开关编码
        //-----------------------------------------------------------------
        //  说明: 系统显示拨码开关所设置的编码000~255。
        //-----------------------------------------------------------------
        #include <reg51.h>
        #include <intrins.h>
        #define uchar unsigned char
        #define uint  unsigned int
        //各数字的数码管段码
        uchar code DSY_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
        //显示缓冲
        uchar DSY_Buffer[3] = {0,0,0};
        //-----------------------------------------------------------------
        // 延时
        //-----------------------------------------------------------------
        void DelayMS(uint x)
        {
          uchar i;
          while(x--) for(i = 0; i < 120; i++);
        }
        //-----------------------------------------------------------------
        // 主程序
        //-----------------------------------------------------------------
        void main()
        {
          uchar i,m,Num;
          P0 = 0xFF;
          P2 = 0xFF;
          while(1)
          {
            m = 0xFE;
            //读取拨码开关的值
            Num = P1;
            DSY_Buffer[0] = Num /100;
            DSY_Buffer[1] = Num /10 % 10;
            DSY_Buffer[2] = Num % 10;
            //刷新显示在数码管上
            for(i = 0; i < 3; i++)
            {
                m = _crol_(m,1);
                P2 = m;
                P0 = DSY_CODE[ DSY_Buffer[i] ];
                DelayMS(10);
            }
          }
        }