?? spidisp.c
字號:
/*************************************** Copyright (c) ***************************************
POLAR STAR
北天星國際貿易(深圳)有限公司
http://www.po-star.com
* 文件名:SPIDISP.C
* 功 能:使用硬件SPI接口輸出顯示。(硬件:74HC595輸出控制數碼管D1顯示)
* 說 明:將跳線器JP7短接。
****************************************************************************/
#include "..\inc\config.h"
/* 數據碼顯示控制對應表,如下:
a
-------
| |
f| |b
| g |
-------
| |
e| |c
| d |
------- 。h
Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 DAT HEX OUT
h f g e d c b a
0 0 1 1 1 1 1 1 0 3f C0
0 0 0 0 0 1 1 0 1 06 F9
0 1 0 1 1 0 1 1 2 5b A4
0 1 0 0 1 1 1 1 3 4f B0
0 1 1 0 0 1 1 0 4 66 99
0 1 1 0 1 1 0 1 5 6d 92
0 1 1 1 1 1 0 1 6 7d 82
0 0 0 0 0 1 1 1 7 07 F8
0 1 1 1 1 1 1 1 8 7f 80
0 1 1 0 1 1 1 1 9 6f 90
0 1 1 1 0 1 1 1 A 77 88
0 1 1 1 1 1 0 0 B 7c 83
0 0 1 1 1 0 0 1 C 39 C6
0 1 0 1 1 1 1 0 D 5e A1
0 1 1 1 1 0 0 1 E 79 86
0 1 1 1 0 0 0 1 F 71 8E
--注:請根據硬件的原理修改對應關系(Q0~Q7與a~h的關系)及輸出值(OUT)*/
const U8 SEGMENT_DATA[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E };
/****************************************************************************
* 名稱:Delay()
* 功能:長軟件延時
* 入口參數:dly 延時參數,值越大,延時越久
* 出口參數:無
****************************************************************************/
void Delay(U32 dly)
{
U32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/****************************************************************************
* 名稱:MSpiIni()
* 功能:初始化SPI接口,設置為主機。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void MSpiIni(void)
{ SPI_SPCCR = 0x52; // 設置SPI時鐘分頻
SPI_SPCR = (0<<3)|
(1<<4)|
(1<<5)|
(0<<6)|
(0<<7); // 設置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0
}
/****************************************************************************
* 名稱:MSendData()
* 功能:向SPI總線發送數據。
* 入口參數:data 待發送的數據
* 出口參數:返回值為讀取的數據
****************************************************************************/
void MSendData(U8 data)
{
IO0CLR = RCK|SCLK|MOSI; // 片選
SPI_SPDR = data;
while( 0==(SPI_SPSR&0x80) ); // 等待SPIF置位,即等待數據發送完畢
}
/****************************************************************************
* 名稱:Display()
* 功能:把發送到SPI總線的數據在數碼管上顯示。
* 入口參數:data 待發送的數據
* 出口參數:返回值為讀取的數據
****************************************************************************/
void Display( U8 j)
{
MSendData(SEGMENT_DATA[j/10]);
MSendData(SEGMENT_DATA[j%10]);
IO0SET = RCK;
IO0CLR = RCK;
}
void PLL_Init()
{
PLLCON = 1;
#if ((Fcclk / 4) / Fpclk) == 1
VPBDIV = 0;
#endif
#if ((Fcclk / 4) / Fpclk) == 2
VPBDIV = 2;
#endif
#if ((Fcclk / 4) / Fpclk) == 4
VPBDIV = 1;
#endif
#if (Fcco / Fcclk) == 2
PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
PLLFEED = 0xaa;
PLLFEED = 0x55;
while((PLLSTAT & (1 << 10)) == 0);
PLLCON = 3;
PLLFEED = 0xaa;
PLLFEED = 0x55;
}
/****************************************************************************
* 名稱:main()
* 功能:使用硬件SPI接口輸出0-F的數據,控制LED顯示。
****************************************************************************/
void main(void)
{ U8 i;
PINSEL0 = (PINSEL0&0xFFFF00FF)|0x00001500; // 設置SPI管腳連接
PINSEL1 = 0x00000000;
IO0DIR = RCK|SCLK|MOSI; //設置為輸出
PLL_Init();
MSpiIni(); // 初始化SPI接口
while(1)
{
for(i=0;i<99; i++)
{
Display(i); // 顯示數據
Delay(10);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -