单片机原理及应用:数码管的循环显示

数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备,通常一位数码管的引脚是有10 个,其中7个用来组成数字(a,b,c,d,e,f,g),此外还有一个小数点(dp),所以数码管内部共有 8 个发光二极管,剩下两个引脚是公共端,如图所示第 3 和第 8 引脚连接在一起组成公共端。根据公共端所接电平的不同,分为共阴极和共阳极接法,中间图为共阴极接法内部原理图,右图为共阳极接法内部原理图。要点亮共阳极数码管,要在发光引脚提供低电平;反之点亮共阴极数码管,则要提供高电平。

单片机原理及应用:数码管的循环显示_第1张图片

下面展示了三种数码管显示情况。

#include      

unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  //共阴极接法的数码管段码
//unsigned char code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};  //共阳极接法的数码管段码

void  Delay()            
{
  unsigned char i, j;
      for (i=0;i<255;i++)
      for (j=0;j<255;j++);
}
//以上不变,以下有三种代码

//第一种0-9,9-0循环点亮
void  main()
{
   signed char k;
   //char k;
   
   while(1)
    {
	   for(k=0;k<10;k++)		//0-9循环点亮
	   {
          P2 = tab[k];          // P1.0=0,LED点亮
          Delay(); Delay();         //延时
       }
	   	   for(k=9;k>=0;k--)	//9-0循环点亮
	   {
          P2 = tab[k];          // P1.0=0,LED点亮
          Delay(); Delay();         //延时
       }
	}     
}

//第二种,奇数点亮,偶数返回,即13579,86420

void  main()
{
   char k;					    //一定要注意k是有符号字符型,不然0-2=-2会使仿真报错
   while(1)
    {
	   for(k=1;k<10;k=k+2)
	   {
          P2 = tab[k];          //1,3,5,7,9
          Delay();  Delay();     
       }
   	   
	   for(k=8;k>=0;k=k-2)
	   //for(k=0;k<10;k=k+2)	//用这种表示方法可以采用无符号字符型
	   {
          P2 = tab[k];          //8,6,4,2,0
		  //P2 = tab[8-k]; 		//减法放在了数组索引里且=10就退出,不易报错
          Delay();  Delay();         //延时
       }
    }
}
//第三种,偶数倒计时,奇数正计时。

void  main()
{
   unsigned char k;					    
   while(1)
    {
	   for(k=0;k<5;k++)  			//注意把乘2放在索引里了,for循环只有5次
	   {
          P2 = tab[8-2*k];          //8,6,4,2,0
          Delay(); Delay();        
       } 

	   	for(k=0;k<5;k++)   
	   {
         P2 = tab[2*k+1];           //1,3,5,7,9
		 //P2 = tab[9-2*k];			//奇数倒计时
          Delay(); Delay();       
       }
    }
} 
  

单片机原理及应用:数码管的循环显示_第2张图片

代码中用到了code标识,这里对51单片机的存储方式做一个补充。在51单片机中,RAM(Random Access Memory,随机存取存储器)和 ROM(Read-Only Memory,只读存储器)是两种不同的存储器类型,有以下区别:

1. 功能不同:RAM是用来存储程序执行时产生的临时数据和变量,具有读写功能;而ROM是用来存储程序代码和常量数据,只能读取,不能写入。

2. 存储方式不同:RAM采用易失性存储方式,即断电后数据会丢失;而ROM采用非易失性存储方式,断电后数据会保持不变。

3. 容量和速度不同:RAM一般容量较大,可以存储大量数据;而ROM容量较小,主要用来存储程序代码。RAM的读写速度较快,可以实时读写数据;而ROM的读取速度较慢,仅限于程序代码的读取。

为了在断电后还能保存数组里的段码,要在变量类型和变量名之间加入“code”,代表该数据被写入ROM。

上述代码对于奇偶位变换实际上给出了三类写法,第一种就是最常见的for循环,赋初值i,i+2或-2;第二种是无符号字符型循环变量i,减法运算放在索引了,不用担心数组溢出;第三种是在第二种的基础上把i值变换的计算都放在索引里了,for循环只承担一个自增的作用。

单片机原理及应用:数码管的循环显示_第3张图片

数码管顺序循环及奇偶位演示

 

以上就是单个数码管的循环演示,下面我们会介绍多只数码管的静态显示和动态演示。谢谢大家。

你可能感兴趣的:(单片机原理及应用,单片机,嵌入式硬件,经验分享,51单片机,c语言)