?? led.c
字號(hào):
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大學(xué)計(jì)算機(jī)科學(xué)學(xué)院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2007/08/09
;** 描述: 西南科技大學(xué)計(jì)算機(jī)學(xué)院CS-II型實(shí)驗(yàn)板LED燈驅(qū)動(dòng)工作程序
;** 作者:
;**
;**--------------led.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#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; //掃描函數(shù)中用于顯示哪一個(gè)數(shù)據(jù),做led_dis_content[]的參數(shù)
uint8 led_dis_pos = 0xfe; //片選位
/******************************
* Function Implement *
*****************************/
/*******************************************************************************
Function Name: void LEDInit(void) *
Description : LED初始化設(shè)置,主要設(shè)置引腳連接模塊和輸入輸出方向 *
*******************************************************************************/
void LEDInit(void)
{
PINSEL1 &= LED_MAT; //引腳連接模塊設(shè)置,選擇P0.17 P0.18 P0.20做GPIO
IO0DIR |= LED_SRCLK; //方向輸出
IO0DIR |= LED_RCLK;
IO0DIR |= LED_SER;
IO0DIR &= LED_KEY^0xffffffff; //方向?yàn)檩斎?
}
/*******************************************************************************
Function Name: void LEDSendData(uint8 disdata,uint8 dispos) *
Description : LED數(shù)據(jù)傳輸,包括8位片選位和8位顯示數(shù)據(jù)位。采用串行傳輸,其中 *
硬件連接中涉及到了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; // 通過(guò)SI口接收每位數(shù)據(jù)
}
else
{
IO0CLR = LED_SER;
}
datatmp = datatmp>>1;
IO0SET = LED_SRCLK; //SCK的高電平發(fā)出移位信號(hào),每位數(shù)據(jù)都移動(dòng)到下一個(gè)移位寄存器中
}
IO0SET = LED_RCLK; //遇到同步發(fā)送脈沖RCK時(shí),將多位數(shù)據(jù)一次發(fā)送到寄存器中,形成一多位的并行數(shù)據(jù)。
}
/*******************************************************************************
Function Name: void LEDScan(void) *
Description : LED掃描函數(shù),常規(guī)的數(shù)碼管掃描方法。 *
*******************************************************************************/
void LEDScan(void)
{
LEDSendData(led_dis_mem[led_dis_bit],led_dis_pos); //某一行顯示某種數(shù)據(jù)
led_dis_bit++; //下一行需要的數(shù)據(jù)
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顯示函數(shù)。形參為32位的disdata。在使用實(shí)參時(shí)用0x的方式進(jìn)行輸 *
入,如0x2007f1fa可得到2007f1fa的直接顯示。根據(jù)前面設(shè)置的顯示范 *
圍為0-9,a-f,這里可以直接輸出存在緩存中的這些數(shù)字。
*******************************************************************************/
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 *
******************************************************************************/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -