📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.zyinside.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: main.c
** Last modified Date: 2006-09-22
** Last Version: v1.0
** Description: MagicARM270实验箱的基础实验---LED数码管显示实验。
** 通过I/O模拟SPI控制74HC595(驱动LED数码管),实现'0'-'F'符号的显示。
**------------------------------------------------------------------------------------------------------
** Created By: 黄绍斌
** Created date: 2006-09-22
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#include "config.h"
// 74HC595控制引脚宏定义
#define SPI_CS (1<<24) /* GP24 */
#define SPI_DATA (1<<25) /* GP25 */
#define SPI_CLK (1<<23) /* GP23 */
// 定义I/O操作函数
#define SSCLK() GPSR0 = SPI_CLK
#define CSCLK() GPCR0 = SPI_CLK
#define SDATA() GPSR0 = SPI_DATA
#define CDATA() GPCR0 = SPI_DATA
#define SCS_SPI() GPSR0 = SPI_CS
#define CCS_SPI() GPCR0 = SPI_CS
/*********************************************************************************************************
** Function name: _NOP
** Descriptions: 短软件延时。
** 延时时间与系统时钟有关。
** Input: 无
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-09-22
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void _NOP(void)
{
uint32 i;
for(i=0; i<100; i++);
}
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时。
** 延时时间与系统时钟有关。
** Input: dly 延时参数,值越大,延时越久
** Output: 无
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
/*********************************************************************************************************
** Function name: HC595_SendDat
** Descriptions: 向74HC595发送2字节数据。发送数据时,高位先发送。
** Input: dat 要发送的数据(2个字节,对应于2个LED数码管)
** Output: 无
** Created by: 黄绍斌
** Created Date: 2006-09-22
**-------------------------------------------------------------------------------------------------------
** Modified by:
** Modified Date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void HC595_SendDat(uint16 dat)
{
uint8 i;
CCS_SPI(); // SPI_CS = 0
_NOP();
for(i=0; i<16; i++) // 发送8位数据
{
CSCLK(); // SPI_CLK = 0
_NOP();
/* 设置SPI的DATA输出值 */
if((dat&0x8000) != 0) SDATA();
else CDATA();
dat <<= 1;
SSCLK(); // SPI_CLK = 1
_NOP();
}
SCS_SPI(); // SPI_CS = 1,输出显示数据
_NOP();
}
// LED数码管字模表
const uint8 DISP_TAB[16] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E };
/*********************************************************************************************************
** Function name: main
** Descriptions: 通过I/O模拟SPI控制74HC595(驱动LED数码管),实现'0'-'F'符号的显示。
** Input: 无
** Output: 系统返回值0
** Created by: 黄绍斌
** Created Date: 2005-12-31
**-------------------------------------------------------------------------------------------------------
** Modified by: 黄绍斌
** Modified Date: 2006-09-22
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main(void)
{
int i;
uint16 dat;
// 初始化I/O
GPDR0 = GPDR0 | SPI_CS | SPI_DATA | SPI_CLK;
GAFR0_U = GAFR0_U & ( ~(0x3F<<14) );
GPSR0 = SPI_CS;
while(1)
{
for(i=0; i<16; i++)
{
if(i >= 15)
{
dat = DISP_TAB[0];
}
else
{
dat = DISP_TAB[i+1];
}
dat = (dat<<8) | DISP_TAB[i];
HC595_SendDat(dat);
DelayNS(100);
}
}
return(0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -