📄 led.c
字号:
/******************************************************************************
* File Name: KeyLed.c *
* Create Time: 2007/08/09 *
* Description: *
* Author : *
* Version : *
*****************************************************************************/
#define _LED_C
#ifdef _LED_C
/******************************
* Head File *
*****************************/
#include"led.h"
/******************************
* Global Variable *
*****************************/
/******************************
* Const Segment *
*****************************/
//0 1 2 3 4 5 6 7 8 9
const uint8 led_dis_content[0x10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xe6,
//a b c d e f
0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
uint8 led_dis_mem[LED_NUMBER] ;
uint8 led_dis_bit = 0x00;
uint8 led_dis_pos = 0xfe;
/******************************
* Function Implement *
*****************************/
/*******************************************************************************
Function Name: void LEDInit(void) *
Description : LED初始化设置,主要设置引脚连接模块和输入输出方向 *
*******************************************************************************/
void LEDInit(void)
{
PINSEL1 &= LED_MAT;
IO0DIR |= LED_SRCLK;
IO0DIR |= LED_RCLK;
IO0DIR |= LED_SER;
IO0DIR &= LED_KEY^0xffffffff; //方向为输入
}
/*******************************************************************************
Function Name: void LEDSendData(uint8 disdata,uint8 dispos) *
Description : LED数据传输,包括8位片选位和8位显示数据位。采用串行传输,其中 *
硬件连接中涉及到了74HC595芯片,编程中涉及到RCK,SRCK,SI。 *
*******************************************************************************/
void LEDSendData(uint8 disdata,uint8 dispos)
{
uint16 datatmp = 0x0000;
uint8 tmp = 0x00;
datatmp = ((datatmp|disdata)<<8)|dispos;
IO0CLR = LED_RCLK ;
for(tmp = 0x00;tmp<0x10;tmp++)
{
IO0CLR = LED_SRCLK;
if(datatmp&0x01==0x01)
{
IO0SET = LED_SER;
}
else
{
IO0CLR = LED_SER;
}
datatmp = datatmp>>1;
IO0SET = LED_SRCLK;
}
IO0SET = LED_RCLK;
}
/*******************************************************************************
Function Name: void LEDScan(void) *
Description : LED扫描函数,常规的数码管扫描方法。 *
*******************************************************************************/
void LEDScan(void)
{
LEDSendData(led_dis_mem[led_dis_bit],led_dis_pos);
led_dis_bit++;
led_dis_pos = (led_dis_pos<<1)|0x01;
if(led_dis_bit == LED_NUMBER)
{
led_dis_bit = 0x00;
led_dis_pos = 0xfe;
}
}
/*******************************************************************************
Function Name: void LEDPrint(uint32 disdata) *
Description : LED显示函数。形参为32位的disdata。在使用实参时用0x的方式进行输 *
入,如0x2007f1fa可得到2007f1fa的直接显示。根据前面设置的显示范 *
围为0-9,a-f,这里可以直接输出存在缓存中的这些数字。
*******************************************************************************/
void LEDPrint(uint32 disdata)
{
uint8 tmp;
for(tmp=0x00;tmp<0x08;tmp++)
{
led_dis_mem[tmp] = led_dis_content[disdata&0x0000000f];
disdata = disdata>>4;
}
}
#endif
/*******************************************************************************
* The end of the entire file *
******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -