📄 led.c
字号:
#include "..\inc\led.h"
#include "..\inc\console.h"
#define ESC_KEY 0x1b
//声明总线地址
volatile U16 * LedDBuffer = (volatile U16 *)(0x2000000);
volatile U16 * LedSBuffer = (volatile U16 *)(0x2000000);
static U8 SHOWDATA[21]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x01,0x40,0x08,0x73}; //共阴
void Clr_led(void);
/* W(0) W(1) W(2) .(3) T(4) X(5) M(6)
C(7) U(8) .(9) C(10) O(11) M(12)*/
U8 ZI_MO[]=
{
0xF8,0x07,0x3C,0xF0,0x3C,0x07,0xF8,0x00,/*"W",0*/
0xF8,0x07,0x3C,0xF0,0x3C,0x07,0xF8,0x00,/*"W",1*/
0xF8,0x07,0x3C,0xF0,0x3C,0x07,0xF8,0x00,/*"W",2*/
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*".",3*/
0x80,0x80,0x80,0xFF,0x80,0x80,0x80,0x00,/*"T",4*/
0x81,0xC3,0x24,0x18,0x24,0xC3,0x81,0x00,/*"X",5*/
0xFF,0x70,0x0E,0x03,0x1E,0x60,0xFF,0x00,/*"M",6*/
0x3C,0x42,0x81,0x81,0x81,0xC3,0x66,0x00,/*"C",7*/
0xFE,0x01,0x01,0x01,0x01,0x01,0xFE,0x00,/*"U",8*/
0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,/*".",9*/
0x3C,0x42,0x81,0x81,0x81,0xC3,0x66,0x00,/*"C",10*/
0x00,0x7E,0xC3,0x81,0x81,0xC3,0x7E,0x00,/*"O",11*/
0xFF,0x70,0x0E,0x03,0x1E,0x60,0xFF,0x00,/*"M",12*/
};
/***************************************************
函数名:void Test_led(void)
****************************************************/
void Test_Pled(void)
{
U8 i;
for(i=1;i<9;i++)
{
sysUtilsLightLed(i,TRUE);
sysUtilsUSecDelay(500000);
}
for(i=1;i<9;i++)
{
sysUtilsLightLed(i,FALSE);
sysUtilsUSecDelay(500000);
}
/*
sysUtilsLightLed(LED1,TRUE);
sysUtilsLightLed(LED2,TRUE);
sysUtilsLightLed(LED3,TRUE);
sysUtilsLightLed(LED4,TRUE);
sysUtilsLightLed(LED5,TRUE);
sysUtilsLightLed(LED6,TRUE);
sysUtilsLightLed(LED7,TRUE);
sysUtilsLightLed(LED8,TRUE);
sysUtilsLightLed(LED1,FALSE);
sysUtilsLightLed(LED2,FALSE);
sysUtilsLightLed(LED3,FALSE);
sysUtilsLightLed(LED4,FALSE);
sysUtilsLightLed(LED5,FALSE);
sysUtilsLightLed(LED6,FALSE);
sysUtilsLightLed(LED7,FALSE);
sysUtilsLightLed(LED8,FALSE);*/
}
//测试数码管
void Test_led(void)
{
U8 j;
while(!( kbhit() && (getkey()==ESC_KEY)))
{
//点阵屏测试
for(j=0;j<6;j++)
{
//*LedSBuffer=~(1<<j); //打开第j个数码管显示
*LedDBuffer=((~(1<<j))<<8)+SHOWDATA[j]; //点亮第j段
sysUtilsUSecDelay(2000); //延时1ms
}
}
Clr_led(); //关闭数码管显示
}
//x 第几个数码管
//data 要显示的数据
//P 是否加小数点
void Show_Led(U8 x,U8 data,U8 P)
{
*LedDBuffer=((~(1<<x))<<8)+SHOWDATA[data]+P*0x80; //点亮第j段
}
//关闭跑马灯显示
void Clr_Pled(void)
{
sysUtilsLightLed(LED_ALL,FALSE);
}
//数码管关闭
void Clr_led(void)
{
*LedSBuffer=0xffff; //关闭数码管显示
}
//点阵清屏
void Clr_DZ(void)
{
Send_595(0xffff); //点阵清屏
}
/******************************************
函数:void Test_DZ(void)
功能:点阵屏测试
*******************************************/
void Test_DZ(void)
{
U8 i,j;
for(j=0;j<8;j++)
{
*LedDBuffer=((1<<j)|0xff00); //点亮第j段
for(i=0;i<8;i++)
{
Send_595(~(1<<i)); //
sysUtilsUSecDelay(100000);//延时100ms
}
Clr_DZ(); //清屏
}
}
//循环显示"WWW.TXMCU.COM"
void Show_WWW(void)
{
U8 i=0,j=0,t;
for(i=0;i<104;i++)
{
for(t=0;t<10;t++)
{
for(j=0;j<8;j++)
{
*LedDBuffer=(ZI_MO[j+i]|0xff00);
//Send_595(~(1<<i));//低电平点亮
//取字模时取反码
Send_595(~(1<<(7-j)));
sysUtilsUSecDelay(500); //延时10ms
Clr_DZ(); //清屏
}
}
}
}
//继电器测试
void Test_Relay(void)
{
U8 i;
for (i=0;i<5;i++)
{
rPDATC |=MASK_BIT(12);
sysUtilsUSecDelay(500000);
rPDATC &=~MASK_BIT(12);
sysUtilsUSecDelay(500000);
}
}
/***************************************************
参数:dwLedNo 指定对哪个LED操作
:bLight 指定点亮或者熄灭.TRUE 点亮,FALSE熄灭
****************************************************/
void sysUtilsLightLed (U32 dwLedNo, BOOL bLight)
{
if(dwLedNo==LED_ALL)
{
if(bLight==TRUE)
rPDATD&=~(0xff);
else
rPDATD|=0xff;
}
else
{
if(bLight==TRUE)
rPDATD&=~(1<<(dwLedNo-1));
else
rPDATD|=(1<<(dwLedNo-1));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -