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

📄 led.c

📁 周立功开发板
💻 C
字号:
/****************************************Copyright (c)**************************************************/
/**                                
;**                                 西南科技大学计算机科学学院
;**                                   
;**                                http://www.cs.suswt.edu.cn
;**            
;**             日期:   2006.4.1
;**             描述:   DataLedDriver.c 西南科技大学计算机学院CS-II型实验板数码管工作程序,控制
;**                      数码管底层显示功能,负责将数据传输到目标,并控制595对数码管键盘进行扫描,
;**                      完成键盘工作的功能,该文件给DataLed.c提供底层接口
;**             作者:
;**
;**--------------LedDriver.c文件
;**------------------------------------------------------------------------------------------------------*/

/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _LED_C_
#ifdef  _LED_C_

/************************************************
 *          Header File                         * 
 ***********************************************/
#include "config.h"
#include "LED.h"

/************************************************
 *          Globale variable					*
 ***********************************************/
uint8 gc_ledbuffer[LEDSIZE];    //数码管数据缓冲区

//数码管的数字编码(依次为0~f)
const  uint8 LEDNUMCODE[16]=
              {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
               0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
               
//数码管的位数编码(分别为第0~7位)               
const uint8 LEDBITCODE[8]= 
				{0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
				
//数码管当前扫描的位选指针				
//uint8 gc_displaybit = 0;
uint8 gc_displaybit = 0;
				
/*************************************************
名称: LEDInit
功能: 数码初使化(设置端口功能,方向)
**************************************************/
void LEDInit(void) 
{
	PINSEL1 &= 0xfffffc03;   //设置P0.17~P0.20为IO口
	IO0DIR |= LEDRCK;		//设置输出
	IO0DIR |= LEDSI;
	IO0DIR |= LEDSCK;
	
	IO0DIR &= (LEDREKEY ^ 0xffffffff);     //设置输入
}

/*******************************************************
名称: LEDSendData(uint8 leddata,uint8 ledbit)
功能: 把要显示的一位数据及相应的位置通过74HC595送到数码管
********************************************************/
void LEDSendData(uint8 leddata,uint8 ledbit)
{
	uint8 temp;
	uint16 tempdata = 0;
	tempdata = 0x0000 | ledbit;			//实验箱应该是两个74HC595极连,一次可以把串行数据转换成16位的并行数据
	tempdata = tempdata << 8;			//     注:这里是地址在前,数据在后.
	tempdata = tempdata | leddata;
	
	IO0CLR = LEDRCK;			//把LEDRCK清零(P0.20)
	for(temp = 0; temp < 16; temp++)
	{
		IO0CLR = LEDSCK;		//LEDSCK清零(P0.17)
		
		if((tempdata & 0x8000) == 0)  //把数据打入到74HC595中去
		{
			IO0CLR = LEDSI;
		}
		else
		{
			IO0SET = LEDSI;
		}
		
		tempdata = tempdata << 1;
		
		IO0SET = LEDSCK;		//LEDSCK置1,74HC595中的移位寄存器移位一次
	}
	
	IO0SET = LEDRCK;			//LEDRCK置1,把16位的并行数据打入到数码管的相应引脚
}


/**************************************************
名称: LEDScan()
功能: 实现数码管的动态扫描
**************************************************/
void LEDScan(void)
{
	LEDSendData(gc_ledbuffer[gc_displaybit],LEDBITCODE[gc_displaybit]);	//把当前位的数据,地址传给数码管
	
	gc_displaybit ++;
	if(gc_displaybit == LEDSIZE)
	{
		gc_displaybit = 0;
	}
	
}

/*************************************************
名称:LEDPrint(uint32 displaydata)
功能:把要显示的数据放入到缓冲区
*************************************************/
void LEDPrint(uint32 displaydata)
{
	uint8 bufferbit = 0;	//缓冲区数据地址指针
	uint8 numbit = 0;		//数码管编码指针
	
	for(bufferbit =0; bufferbit < LEDSIZE; bufferbit++)
	{
		numbit = displaydata & 0x0f;		//数码管显示的一位是十六进制,以要四位二进制,这里作用是取低四位
		gc_ledbuffer[bufferbit] = LEDNUMCODE[numbit];		//更新数据缓冲区
		
		displaydata = displaydata >> 4;			
	}
}


#endif
/*****************************************************************************
 *                         End of Entire File                                *
 ****************************************************************************/

⌨️ 快捷键说明

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