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

📄 led7disp.c

📁 四位数码管显示的数码管用的51单片机的C语言时钟程序
💻 C
字号:
/*****************************************************************************
						MCS8051-III学习板演示程序
							
				(c) Copyright 2007-2007,广州恒芯电子
						All Rights Reserved
*****************************************************************************/

/*****************************************************************************
程序说明
名称: MCS8051-III学习板演示程序(数码管显示)
功能: 实现数码管显示,并实现数值递增
版本:2007-03-01
*****************************************************************************/

/*****************************************************************************
硬件说明
单片机:   兼容MCS-51单片机/STC89C51
晶振频率: 12MHz
*****************************************************************************/

#include <reg51.h>
#include <stdio.h>

/****************************************************************************
说明: 程序预定义
*****************************************************************************/
sbit LED7A_STATUS=P1^7;/*数码管第一位控制引脚(0为有效,1为无效)*/
sbit LED7B_STATUS=P1^6;/*数码管第二位控制引脚(0为有效,1为无效)*/
sbit LED7C_STATUS=P1^5;/*数码管第三位控制引脚(0为有效,1为无效)*/
sbit LED7D_STATUS=P1^4;/*数码管第四位控制引脚(0为有效,1为无效)*/
sbit dot=P0^7;/*数码管中间点控制*/

sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P01=P0^1;




unsigned int cout_time=0;
bit dot_state=1;
/****************************************************************************
说明: 变量定义
*****************************************************************************/
code unsigned char m_ucLedTab[]=
{
   //0x3f  , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
 //0x7d , 0x07 , 0x7f  , 0x6f , 0x77 , 0x7c ,
// 0x39 , 0x5e , 0x79 , 0x71 , 0x00
	0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
	0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
};/*数码管十六进制编码表*/

unsigned char m_ucLedBuf[4];/*七段数码管显示值缓存*/
		

/****************************************************************************
名称: Led7Scan()-
说明: 数码管动态扫描处理程序	
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan();

/*****************************************************************************
程序开始
*****************************************************************************/
void main()
{	
    
	unsigned int uiNumber=0;/*计数值置0*/

	/*T0中断设定*/
  	TMOD=0x01;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
	TH0=0xec;/*定时时间5ms*/
	TL0=0x78;
	ET0=1;/*允许T0中断*/
	TR0=1;/*使T0工作*/
	EA=1;/*总中断开启*/
    P10=0;
    P11=1;
    P12=0;
    P13=1;
    P14=0;
    P01=0;
uiNumber=5;
	while(1)
	{
		if(uiNumber>3599)/*若数值大于3599,则置为0*/
		{
			uiNumber=0;
		}	
	
		m_ucLedBuf[0]=(uiNumber/60)/10;/*取出分钟十位数*/
   		m_ucLedBuf[1]=(uiNumber/60)%10;/*取出分钟个位数*/
		m_ucLedBuf[2]=(uiNumber%60)/10;/*取出秒钟十位数*/
	   	m_ucLedBuf[3]=(uiNumber%60)%10;/*取出秒钟个位数*/

		if(cout_time<102&&cout_time>98)
		{
		  P11=0;
        }
		if(cout_time==200)
		{
         uiNumber++;/*数值加1*/
			cout_time=0;/*复位计时器计数*/

         P11=1;
	    }

	 
	}
}

/*****************************************************************************
名称: Interrupt1Handler
说明: T0中断入口
参数: 无
返回 :无
*****************************************************************************/
void Interrupt1Handler() interrupt 1
{
	
	TH0=0xec;/*重新设置T0定时值*/
	TL0=0x78;
	cout_time++;
   Led7Scan();/*数码管动态扫描处理程序*/
   
   
}


/****************************************************************************
名称: Led7Scan()
说明: 数码管动态扫描处理程序
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan()
{	
	static unsigned char a=0;

	switch(a)/*判断数码管动态扫描值*/
	{
	case 0:/*处理数码管第一位*/
		LED7D_STATUS=1;/*设置数码管第四位为无效*/
		LED7A_STATUS=0;/*设置数码管第一位位有效*/
		break; 

	case 1:/*处理数码管第二位*/
		LED7A_STATUS=1;/*设置数码管第一位为无效*/
		LED7B_STATUS=0;/*设置数码管第二位位有效*/
      
		break; 

	case 2:/*处理数码管第三位*/
		LED7B_STATUS=1;/*设置数码管第二位为无效*/
		LED7C_STATUS=0;/*设置数码管第三位位有效*/
		break; 

	case 3:/*处理数码管第四位*/
		LED7C_STATUS=1;/*设置数码管第三位为无效*/
		LED7D_STATUS=0;/*设置数码管第四位位有效*/
		break; 
	}

	P0=m_ucLedTab[m_ucLedBuf[a]];/*将显示码送数码管状态引脚*/
	if(a==2||a==3)
	{ 
	  dot=dot_state;/*取反,使之一秒钟闪烁一次*/
	}
	
	a++;/*数码管动态扫描值加1,若该值4则置为0*/
	if(a>3)
		a=0;
}
					   

⌨️ 快捷键说明

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