📄 led_display.c
字号:
/*==========================================
LED显示驱动程序
文件名:LED_Display.c
作者 YOUJJYY
时间:2007.4.6
============================================*/
#include <at89x52.h>
#include <LED_Display.h>
#define uchar unsigned char
//***********显示数据的转换***************//
uchar TO_DATA(bit n_s,uchar I,uchar led_data)
{
uchar x[3],y;
if(n_s==1)
{
switch(I)
{
case 0:if(led_data!=y){P0=P0^0x20;y=led_data;}
break;
case 1: {x[2]=(led_data>>4)+1;x[3]=(led_data&0x0f)+1;}
break;
case 2: {x[0]=(led_data>>4)+1;x[1]=(led_data&0x0f)+1;}
break;
default:break;
}
return x[I];
}
else
{
if(led_data<46)led_data=0;
else led_data-=47;
return led_data;
}
}
/*****************LED显示程序***************/
void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data)//N_S是数字和字符串显示选择,
//data_size显示多少位
//S_D是显示方式(0x00:静态,0x01:半动态,0x02:全动态)
//LED_data是要显示的数据
{
uchar t,y,i,x,z,a,k=20,size=0;
//*****************显示方式S_D***************//
switch(S_D)
{
case 0:a=0;
break;
case 1:a=4,k=80,size/=4;
break;
case 2:a=1;//size-=4;
break;
default:break;
}
//*************显示个数data_size***********//
for(i=0;i<data_size;i++) //BCD码转换成LED码
{
if(N_S==1)size=0;
else size+=1;
}
//****************显示程序**************//
for(t=0;t<=size;t++) //要显示的位数
{
for(y=0;y<=k;y++) //循环20显示
{
z=0x7f;
for(i=0;i<=3;i++) //一次显示
{
P2=z;
z>>=1;
z+=0x80;
x=TO_DATA(N_S,i,LED_data[i+t*a]);
P0=BCD_ASCII[x];
Delay_1ms(3);//延时时间
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -