⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 数码管.c

📁 74LS138及用74HC165 74HC595串行方式实现的数码管显示.rar
💻 C
字号:
/*******************************************************************************
*  标题:                  试验数码管上如何显示数字                             *
*  功能:																			   *
********************************************************************************
* 通过本例程了解 74HC595(串入并出)LS138(译码器)的基本原理和使用  		   *
*                         	       *										   *
* 请学员认真消化本例程,懂74C595 LS138 在C语言中的操作                         *
********************************************************************************/
 #include <reg52.H>
 extern void HC595SendData(unsigned int SendVal);  /*声明引用外部函数*/
 unsigned int LedNumVal;	     /*定义变量,作计数器*/	   
 unsigned int LedOut[5];	     /*定义数组*/
 //unsigned int w;
 //else IO/*位声明*/
sbit    LS138A=P2^2;  	   /*74LS138译码器的A端口接单片机的P2.2口*/
sbit    LS138B=P2^3;
sbit    LS138C=P2^4;  
/*---------------------74LS138在开发板中的连接方式:-----------------------------------
**1.G1接BVCC:--------||当选通端(G1)为高电平,另外两个选通端(/(G2A)/(G2B))为低电平时  
**2./G2A和/GAB都接地:||可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出.
**3.A端口接单片机的P2.2口:
**4.B端口接单片机的P2.3口:
**5.C端口接单片机的P2.4口:
** 说明:由开发板的电路连接可知,74LS138已经一直处于准备就绪状态,可以执行译码工作.
** A、B、C这三个端口组合形成一个0~7取值范围的10进制数,然后在Y0--Y7这8个端口选择
一个对应的端口输出低电平,即实现译码。
**举例:(A、B、C)==010,则Y2端口输出低电平,其余的7个端口输出全为高电平.
---------------------------------------------------------------------------------------*/
/*此表为 LED 的字模--            -- 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E    -    L   P    U    Hidden  _ (20)*/
unsigned char code  Disp_Tab[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0xbf,0xc7,0x8c,0xc1, 0xff,  0xf7 }; 
 
 
 void delay(unsigned int i)       /*延时函数*/
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}

 
 main()							  /*主函数*/
{   
  while(1)
  { 
     unsigned int  HC595SendVal;	  /*定义变量*/
     char i;
  	 LedNumVal++;	      		 	  /*程序大循环计数*/
	 LedOut[0]=Disp_Tab[LedNumVal%10000/1000];    /*千位的数码管显示字模存入数组LedOut[0]中*/
     LedOut[1]=Disp_Tab[LedNumVal%1000/100]&0x7f; /*百位  0X7F是数码管的小数点的值*/
     LedOut[2]=Disp_Tab[LedNumVal%100/10]&0x7f;   /*十位数码管显示字模存入数组LedOut[2]中*/
     LedOut[3]=Disp_Tab[LedNumVal%10];            /*个位数码管显示字模存入数组LedOut[3]中*/

	  for (i=0;i<4;i++) 			
	  { 
	  /*------------------------将数码管显示的段码发送给74HC595----------------------*/
	    HC595SendVal=LedOut[i];	   /*将数码管显示的千位数据,百位数据..依次保存到
									74HC595要发送的数据变量中*/

	  	HC595SendVal<<=8;          /*将HC595SendVal中数据移到高8位,数码管输出在低8位*/
	   //  HC595SendVal|=Output;
	    HC595SendData(HC595SendVal);/*发送数码管显示的段码给74HC595,使其控制数码管和发光管*/
									/*74HC595的输出接4个数码管的段码和8个发光管*/
	 /*------------------------------------------------------------------------------*/

     /*-------------------------开数码管显示位选-------------------------------------*/
		switch(i)		    /*i就定义了第0个数码管显示千位数,其它位以此类推*/			  
          {	    
			case 0:LS138A=0; LS138B=0; LS138C=0; break;  /*数码管第一位显示*/      
            case 1:LS138A=1; LS138B=0; LS138C=0; break;  /*数码管第二位显示*/            	
            case 2:LS138A=0; LS138B=1; LS138C=0; break;  /*数码管第三位显示*/ 
            case 3:LS138A=1; LS138B=1; LS138C=0; break;  /*数码管第四位显示*/ 
			case 4:LS138A=0; LS138B=0; LS138C=1; break;	 /*数码管下面的LED*/
           }
	 /*------------------------------------------------------------------------------*/
	     delay(200);
	   }
        LS138A=1; LS138B=1; LS138C=1; 
   }    
         
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -