2、ain(void){P1=0xfe;while(1){if(k1==0){P1=_crol_(P1,1);Delay(200);}else{P1=_cror_(P1,1);Delay(200);}}}随时响应按键手动计数器按键控制数码管显示控制手动计数器PROTEUS仿真PROTEUS仿真项目三手动计数器--------单片机控制数码管静态显示知识目标:1.掌握数码管的动态、静态显示不同、电路连接2.掌握查表指令3.掌握按键的编程4.掌握单片机的外部中断技能目标:1.掌握PROTEUS中数码管的
3、共阴、共阳的不同2.掌握数码管和单片机的连接方法1.LED数码管简介(1)结构、工作原理由LED发光二极管组合显示字符的显示器件。它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通常称之为7段(也有称作8段)发光二极管数码显示器。abcdefgdpabcdefgdp“8”字型LED数码管结构及原理abcdefgdp共阴极+5V共阳极D7D6D5D4D3D2D1D0abcdefgdpD7D6D5D4D3D2D1D0abcdefgdp字型码的定义共阴极共阳极11011010
4、5BH00100101COMCOM(2)LED的编码方式表十六进制数及空白字符与P的显示段码(3)LED数码管的显示方式a.静态LED显示器电路数码管的COM端接不变的高/低电平,每位数码管的a~g和h端与一个8位的I/O相连。要在某一位数码管上显示字符时,只要从对应的I/O口输出其显示代码即可特点为:数码管恒定地亮,显示某个数值,直到显示字符改变为止适用场合:由于太占据I/O线,所以用于1个或较少数码管显示的场合。b.动态LED显示器电路每个数码管的COM端和不同的I/O口相连,每位数码管的a
5、~g和h端接在一起,与一个8位的I/O相连。要在某一位数码管上显示字符时,首先和该数码管COM端相连的I/O口有效,然后从对应的I/O口输出其显示代码即可特点为:数码管轮流点亮适用场合:由于可以节省I/O线,所以用于多个数码管显示的场合。2.应用例1:设计电路,程序,使1位数码管(共阳)依次显示0~F,每个数字的显示时间是1s.电路:程序清单:#includeunsignedcharcodesz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x
6、f8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedinta){unsignedchari;while(a--){for(i=0;i<120;i++);}}voidmain(){unsignedcharj;while(1){for(j=0;j<16;j++){P2=sz1[j];delay(1000);}}}看仿真效果例2:用开关控制LED显示设计电路程序,用8个开关作为输入,8个发光二极管作为输出,显示8位开关的二进制数。
7、#includevoiddelay(unsignedinta){unsignedchari;while(a--){for(i=0;i<120;i++);}}voidmain(){unsignedcharm;while(1){m=P2;P1=m;delay(1000);}}例3:用开关控制数码管显示设计电路和程序,用开关作为输入元件,用数码管显示4位开关的二进制数。(例如4个开关都闭合,则4个开关状态0000,则数码管显示0。以此类推)程序清单:#include
8、unsignedcharcodesz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelay(unsignedinta){unsignedchari;while(a--){for(i=0;i<120;i++);}}voidmain(){unsignedcharm;P1=0xff;while(1){m=P1;m=m&0x0f;P2=sz1[m];delay(1000