📄 dataled.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2007.09.21
;** 描述: dataled.c 西南科技大学计算机学院CS-II型实验板数码管工作程序,控制
;** 数码管底层显示功能,负责将数据传输到目标
;** 作者: miracle
;**
;**--------------dataled.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _DATALED_C_
#ifdef _DATALED_C_
/************************************************
* Header File *
***********************************************/
#include "dataled.h"
#include "config.h"
/************************************************
* Globale variable *
***********************************************/
const uint8 gc_display_code[LEDCODENUMBER]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
uint8 gc_dataled_buffer[8];
//uint8 Ret_Ledkey = 0xff;
uint8 gc_ptr_bit = 0x00;
uint8 gc_dis_bit = 0x7f;
/******************************************************************************
* Function Name: LEDDelayNS *
* Description : 延时函数 *
*****************************************************************************/
void LEDDelayNS(uint32 dly)
{
for(; dly > 0; dly--)
{
uint32 i;
for(i = 0; i < 5000; i++)
{
;
}
}
}
/******************************************************************************
* Function Name: LEDInit
* Description : 初始化数码管模块
*****************************************************************************/
void LEDInit(void)
{
PINSEL1 &= DATALED_SMAT;
IO0DIR |= DATALED_SCK;
IO0DIR |= DATALED_RCK;
IO0DIR |= DATALED_SI;
//IO0DIR &= (DataLed_KEY^0XFFFFFFFF);
}
/******************************************************************************
* Function Name: LEDPrint
* Description : 显示函数,将显示代码放入缓冲区。
*****************************************************************************/
void LEDPrint(uint32 display_msg)
{
uint8 temp = 0x00;
while(temp <= (7 * 0x04))
{
gc_dataled_buffer[temp / 4] = gc_display_code[(display_msg >> temp) & 0x0f];
temp += 4;
}
}
/******************************************************************************
* Function Name: LEDSendDisplay
* Description : 通过595分别把片选码送给片选端,把缓冲区的显示码送给显示端 *
*****************************************************************************/
void LEDSendDisplay(uint8 display_data,uint8 display_number)
{
uint8 send_count;
IO0CLR = DATALED_RCK;
for(send_count = 0x00;send_count < 0x08;send_count++)
{
IO0CLR = DATALED_SCK;
if((display_number&(0x01<<send_count)) == 0x00)//注意运算符号的优先级
{
IO0CLR = DATALED_SI;
}
else
{
IO0SET = DATALED_SI;
}
//DataLed_SI=DisplayNumber&(0x01<<send_count);
IO0SET = DATALED_SCK;
}
for(send_count = 0x00;send_count < 0x08;send_count++)
{
IO0CLR = DATALED_SCK;
if((display_data & (0x80 >> send_count)) == 0x00)
{
IO0CLR = DATALED_SI;
}
else
{
IO0SET = DATALED_SI;
}
IO0SET = DATALED_SCK;
}
IO0SET = DATALED_RCK;
}
/******************************************************************************
* Function Name: LEDScan
* Description : 扫描数码管。以达到看上去8个数码管同时亮 *
*****************************************************************************/
void LEDScan(void)
{
LEDSendDisplay(gc_dataled_buffer[7-gc_ptr_bit],gc_dis_bit);
/*if((IO0PIN&DataLed_KEY)==DataLed_KEY)
{
//speak();
ret_ledkey=ptr_bit;
}*/
//ret_ledkey=led_keyscan();
gc_dis_bit = ((gc_dis_bit >> 1) | 0x80);
//Ret_Ledkey = Led_Keyscan();
gc_ptr_bit++;
if(gc_ptr_bit == 0x08)
{
gc_ptr_bit = 0x00;
gc_dis_bit = 0x7f;
}
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -