您当前的位置:五五电子网电子知识电子制作自动控制-单片机单片机I/0口控制数码管显示的实验 正文
单片机I/0口控制数码管显示的实验

单片机I/0口控制数码管显示的实验

点击数:7748 次   录入时间:03-04 11:44:59   整理:http://www.55dianzi.com   自动控制-单片机

  数码管是一种常见的显示器件,广泛应用在家用电器、仪器仪表、自动控制领域。下图是数码管的实物照片。
  
  下图(a)中是各种各样的数码管,(b)中是常用的7段式数码管,由7个发光二极管组成7段,形成一个日字形,还有一个发光二极管显示小数点。点亮若干段发光二极管,能够组合出阿拉伯数字0-9。

  下图(a)中将7段数码管的每段分别命名为A-G,小数点命名为DP;下图(b)是P1口8条口线控制数码管的等效图,图中8个发光二极管分别对应(a)中的7段和小数点。每个发光二极管分别由单片机P1口8条口线控制,P1.7控制小数点DP、P1.6控制G段发光二极管,以此类推P1.0控制A段发光二极管。
  
  从下图中可以看出,如果让数码管显示数字“1”,只需要点亮数码管的B、C两段发光二极管,熄灭其它段发光二极管即可,见下图(a)。结合上一讲的知识,单片机P1.1和P1.2写出“0”点亮B、C两段发光二极管,同时P1口其它口线写出“1”熄灭其它各段就可实现。这时,P1口从P1.7-P1.0的状态为“11111001”,换算成十六进制数为OxF9,OxF9就是显示数字“1”的显示码,也就是说向P1口写入十六进制数Oxf9数码管就可以显示数字“1”。
  
  下表给出了依次点亮其它数字的显示码。

数字 DP(P1.7) G(P1.6) F(P1.5) E(P1.4) D(P1.3) C(P1.2) B(P1.1) A(Pl.0) 显示码 0 灭 (1) 灭 (1) 亮(0) 亮(0) 亮(0) 亮(0) 亮(0) 亮(0) OxC0 1 灭 (1) 灭 (1) 灭 (1) 灭(1) 灭(1) 亮(0) 亮(0) 灭(1) Ox F9 2 火 (1) 亮(0) 灭 (1) 亮(0) 亮(0) 灭(1) 亮(0) 亮(0) Ox A4 3 灭 (1) 亮 (0) 灭 (1) 灭(1) 亮(0) 亮(0) 亮(0) 亮(0) 0xB0 4 灭 (1) 亮(0) 亮(0) 灭(1) 灭(1) 亮(0) 亮(0) 灭(1) 0x99 5 灭 (1) 亮 (0) 亮(0) 灭(1) 亮(0) 亮(0) 灭(1) 亮(0) Ox92 6 灭 (1) 亮 (0) 亮(0) 亮(0) 亮(0) 亮(0) 灭(1) 亮(0) Ox92 7 灭 (1) 灭 (1) 灭 (1) 灭(1) 灭(1) 亮(0) 亮(0) 亮(0) Ox F8 8 灭 (1) 亮(0) 亮(0) 亮(0) 亮(0) 亮(0) 亮(0) 亮(0) Ox80 9 灭 (1) 亮(0) 亮(0) 灭(1) 亮(0) 亮(0) 亮(0) 亮(0) Ox90

  根据下图(b)中的电路写一个程序,要求循环显示数字0-9。程序如下:
  
  #include<reg52.h>
  
  //存储数码管显示码的一维数组【注1】
  
  unsignedcharShowCode[]={OxCO,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox80,Ox90};//主程序voiDMAin(void){unsignedchari;For(;;){

  for( i =0;i<10;i++){ //执行10次,依次显示0-9十个数字

  delay();1/延时0.5秒
  
  delay();//延时0.5秒
  
  P1=ShowCode[i];//【注2】
  
  }
  
  }
  
  注1;将下表中计算出的显示码存入一维数组ShowCode[]中,调用显示数字“0”的显示码时,只需调用ShowCode[0]=OxcO,将ShowCode[0]写出P1口,数码管就可以显示“0”;类似地,将ShowCode[9]写出P1口,就相当于将“9”的显示码Ox90写出了P1口,数码管就可以显示数字“9”。
  
  注2:在每次循环中,i从0到9不断循环,调用ShowCode[i]从而依次调用ShowCode[0]--ShowCode[9],将它们写出P1口,就可以达到循环显示数字“0”到“9”的效果。




本文关键字:单片机  数码管  自动控制-单片机电子制作 - 自动控制-单片机