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

📄 led8.c

📁 自己单片机板c程序
💻 C
字号:

/*01数码管的显示,动态显示,数码管显示两位以上,从这个例子我们可以学习多位数码管的显示技术,
这里也可以让我们知道为什么P2的输出用74HC245,而不用销存器的原因了*/

#include "reg51.h"
#include <intrins.h>

/********************/
unsigned char table[]=
			{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
			//共阴数码管 0-9 表
/********************/		
sbit LHJ_A = P1^0;	//管脚定义 74HC138(3-8)译码器输入控制信号线
sbit LHJ_B = P1^1;
sbit LHJ_C = P1^2;
/********************/	 //宏定义 	,定义数码管显示第几位
#define 	SMG_1 	LHJ_C=0;LHJ_B=0;LHJ_A=0			//译码器的输入脚,全0选择第一位数码管。
#define 	SMG_2 	LHJ_C=0;LHJ_B=0;LHJ_A=1			//译码器的输入脚,001选择第二位数码管。
#define 	SMG_3 	LHJ_C=0;LHJ_B=1;LHJ_A=0			//同上类推
#define 	SMG_4 	LHJ_C=0;LHJ_B=1;LHJ_A=1
#define 	SMG_5 	LHJ_C=1;LHJ_B=0;LHJ_A=0
#define 	SMG_6 	LHJ_C=1;LHJ_B=0;LHJ_A=1
#define 	SMG_7 	LHJ_C=1;LHJ_B=1;LHJ_A=0
#define 	SMG_8 	LHJ_C=1;LHJ_B=1;LHJ_A=1

/******************************/
void delay(void); 
					//延时子函时,
/***************/		
void main(void)  
{
	unsigned char i;		//定义循环变量
	unsigned int j;
	while(1)
	{		
		for(i=0;i<10;i++)	//一位数码管循环显示0-9
		{
		j=5000;		//这个是用来显示一次数的时间长短
		while(j--){
			SMG_8;			//选择第八位数码管
			P2=table[i];	//P2,查表输出定义好的数码管段时,显示相应的0-9			
			delay();	//延时
			P2=0;		//显示一位时,这里可要可不要,
		}
		}
		//显示完一位,接着显示两位
		for(i=0;i<10;i++)	//两位数码管循环显示0-9
		{
		j=3500;			//这个怎么跟上面的少了,是的,因为这里显示两位,要保持时间差不多,所以把显示量相应减去
		while(j--){
			SMG_8;			//选择第八位数码管
			P2=table[i];	//P2,查表输出定义好的数码管段时,显示相应的0-9			
			delay();	//延时
			P2=0;		//这里先关闭数码管不显示,为下一位显示做准备,否则就会有拖影像现,
						//因此这里不用锁存器的原因就在此了,以下都类同。
			SMG_7;
			P2=table[i];
			delay();
			P2=0;
		}
		}
		////显示完两位,接着显示三位
		for(i=0;i<10;i++)	//三位数码管循环显示0-9
		{
		j=2800;			//以上面相同
		while(j--){
			SMG_8;			//选择第八位数码管
			P2=table[i];	//P2,查表输出定义好的数码管段时,显示相应的0-9			
			delay();	//延时
			P2=0;
			SMG_7;
			P2=table[i];
			delay();
			P2=0;
			SMG_6;
			P2=table[i];
			delay();
			P2=0;
		}
		}
		////显示完三位,接着显示四位
		for(i=0;i<10;i++)	//四位数码管循环显示0-9
		{
		j=2500;			//以上面相同
		while(j--){
			SMG_8;			//选择第八位数码管
			P2=table[i];	//P2,查表输出定义好的数码管段时,显示相应的0-9			
			delay();	//延时
			P2=0;
			SMG_7;
			P2=table[i];
			delay();
			P2=0;
			SMG_6;
			P2=table[i];
			delay();
			P2=0;
			SMG_5;
			P2=table[i];
			delay();
			P2=0;
		}
		}
		////显示完四位,接着隔位显示四位
		for(i=0;i<10;i++)	//四位数码管循环显示0-9
		{
		j=2500;			//以上面相同
		while(j--){
			SMG_8;			//选择第八位数码管
			P2=table[i];	//P2,查表输出定义好的数码管段时,显示相应的0-9			
			delay();	//延时
			P2=0;
			SMG_6;			//隔位,不用7,跳到6
			P2=table[i];
			delay();
			P2=0;
			SMG_4;
			P2=table[i];
			delay();
			P2=0;
			SMG_2;
			P2=table[i];
			delay();
			P2=0;
		}
		}
	}
}
/*******************************/
//延时子函数 
//参数范围 0-65536
void delay(void)								//延时子函数
{
	_nop_();_nop_();_nop_();_nop_();_nop_();
}

⌨️ 快捷键说明

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