
上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); } } }