?? spidisp.c
字號(hào):
/*************************************** Copyright (c) *************************************************
*
* POLAR STAR
* 北天星國(guó)際貿(mào)易(深圳)有限公司
* http://www.po-star.com
*
* 文 件 名: SPIDisp.C
* 文件描述:使用硬件SPI接口輸出顯示。(硬件:74HC595輸出控制數(shù)碼管SMG1、SMG2顯示)
*
* 說 明:分別將跳線器JP7的中間管腳與SCK、MISO、MOSI、CS短接;
*
********************************************************************************************************/
#include "config.h"
#define SPI_CS 1<<7 /* P0.7 595的片選引腳,不作SPI的SSEL功能*/
/********************************************************************************************************
*
* 函數(shù)名稱:Delay(uint32 count)
*
* 功能描述:軟件延時(shí)。
*
* 入口參數(shù):count
* 出口參數(shù):無
*
* 全局變量: 無
* 調(diào)用模塊: 無
*
********************************************************************************************************/
void Delay(uint32 count)
{
uint32 tmp;
for(; count>0; count--)
for(tmp=0; tmp<50000; tmp++);
}
/********************************************************************************************************
*
* 函數(shù)名稱:MasterSpiInit()
*
* 功能描述:初始化SPI接口,設(shè)置為主機(jī)。
*
* 入口參數(shù):無
* 出口參數(shù):無
*
* 全局變量: 無
* 調(diào)用模塊: 無
*
********************************************************************************************************/
void MasterSpiInit(void)
{
//PINSEL0 = (PINSEL0 & 0xFFFF00FF) | 0x00005500; // 設(shè)置管腳連接SPI
//PINSEL0 = (PINSEL0 & (~(0xFF << 8))) | (0x15 << 8) ; // SSEL0當(dāng)作595片選
S0SPCCR = 0x52; // 設(shè)置SPI時(shí)鐘分頻
S0SPCR = (0 << 3) | // CPHA = 0, 數(shù)據(jù)在SCK 的第一個(gè)時(shí)鐘沿采樣
(1 << 4) | // CPOL = 1, SCK 為低有效
(1 << 5) | // MSTR = 1, SPI 處于主模式
(0 << 6) | // LSBF = 0, SPI 數(shù)據(jù)傳輸MSB (位7)在先
(0 << 7); // SPIE = 0, SPI 中斷被禁止
}
/********************************************************************************************************
*
* 函數(shù)名稱:MasterSendData()
*
* 功能描述:向SPI總線發(fā)送數(shù)據(jù)。
*
* 入口參數(shù):無
* 出口參數(shù):無
*
* 全局變量: 無
* 調(diào)用模塊: 無
*
********************************************************************************************************/
uint8 MasterSendData(uint8 data)
{
IOCLR = SPI_CS; // 片選
S0SPDR = data;
while(0 == (S0SPSR & 0x80)); // 等待SPIF置位,即等待數(shù)據(jù)發(fā)送完畢
IOSET = SPI_CS;
return(S0SPDR);
}
/* 數(shù)據(jù)碼顯示控制對(duì)應(yīng)表,如下:
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
--注:請(qǐng)根據(jù)硬件的原理修改對(duì)應(yīng)關(guān)系(Q0~Q7與a~h的關(guān)系)及輸出值(OUT)
*/
const uint8 DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E };
/********************************************************************************************************
*
* 函數(shù)名稱:main()
*
* 功能描述:使用硬件SPI接口輸出00-FF的數(shù)據(jù),控制LED顯示。
*
* 入口參數(shù):無
* 出口參數(shù):無
*
* 說 明:
*
********************************************************************************************************/
//uint8 rcv_data;
int main(void)
{
uint8 tmp;
PINSEL0 = 0x00001500; // 設(shè)置SPI管腳連接-SSEL0當(dāng)作595片選,故不作SPI管腳
PINSEL1 = 0x00000000;
IODIR = SPI_CS;
IOSET = SPI_CS;
MasterSpiInit(); // 初始化SPI接口
while(1)
{
for(tmp = 0; tmp < 0x100; tmp++)
{
MasterSendData(DISP_TAB[tmp >> 4]); // 發(fā)送顯示高位數(shù)據(jù)
MasterSendData(DISP_TAB[tmp & 0x0f]); // 發(fā)送顯示低位數(shù)據(jù)
Delay(80);
}
}
return(0);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -