led_hardware2.c

来自「自己的平时一些制作 现在整理一下 与大家一起分享」· C语言 代码 · 共 85 行

C
85
字号
#include <reg51.h>

/******led 接口描述******/
//P0--->(a-g,dot) 显示
//选择使能控制段
//P2^3--->使能左第一个数码管  P2^2--->左第二个数码管  
//P2^1--->左第三个数码管  P2^0--->左第四个数码管


/*********显示数据表************/ 
//前16个对应0-9 ,a-f,后面三个0x73 0x40,0x00分别对应字符P,-,空

unsigned char code table[19]={0x3f,6,0x5b,0x4f,
                  0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,
				  0x7c,0x58,0x5e,0x79,0x71,0x73,0x40,0x00};
/**********显示选择表***********************/
unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};

/*****定义一个数组用于存放将要显示的值*******/
unsigned char d[4]={16,17,17,17};
/*****定义一个全局变量 number******/
unsigned char number;   //number 表示第几个显示 0-3 
/******定义一个全局变量 flag*******/
unsigned char flag;		//指示当前状态的变量 <100 显示 >100 灭.用于闪烁
/****软件延时 DELAY ms****/
void Software_Delay(const unsigned int DELAY)   
   {
   unsigned int x, y;

   for (x = 0; x <= DELAY; x++)
      {
      for (y = 0; y <= 120; y++);
      }
   }

/********定时器0中断服务程序***************/
void timer0(void) interrupt 1 
{
 TR0=0;					 //停止定时器0
 TH0=(65536-1000)/256;	 //通过定时器定时延时大约1ms左右
 TL0=(65536-1000)%256;
 if (flag<100) 
 {
 	for(number=0;number<=3;number++)
 	{//number=(number+1)%4;
  	P2=digit[number];       //选择第number个数码管显示
  	P0=table[d[number]];    //查表显示要显示的值
  	Software_Delay(1);
 	}
 }
 else
 {
  	for(number=0;number<=3;number++)
 	{//number=(number+1)%4;
  	P2=digit[number];       //选择第number个数码管显示
  	P0=0x00;    //查表显示要显示的值
  	Software_Delay(1);
 	}

 }
 flag=(flag+1)%200;
 TR0=1;				     //启动定时器0
  
}

/******定时器初始化函数**********/
void Init_Timer (void)
{
TMOD=0x01;   			 //
TH0=(65536-1000)/256;	 //通过定时器定时延时大约1ms左右
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}


/********主函数************/
//效果就是用定时器服务程序的实现数码管动态显示P---且有闪烁
/*************************/
void main (void)
{
Init_Timer();
while(1);		  
}

⌨️ 快捷键说明

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