数码管交通灯.doc
文本预览下载声明
数码管显示倒计时交通灯
院系: 物理与机电工程学院
专业: 电子信息工程
学号: 2007050404
姓名: 高 龙
实验目的
本次实验用实时时钟的秒增量中断结合SPI的7段数码管显示,再加上GPIO口的LED显示程序,由自己编程实现数码管从9到1的倒计时显示,其间隔以实时时钟的秒增量中断来实现,在第一次的9到1倒计时过程中,东西方向的红灯亮,南北方向的绿灯亮,且南北方向的黄灯在倒计时5后会闪烁。当第二次的9到1倒计时过程中,
东西方向的绿灯亮,南北方向的红灯亮,且东西方向的黄灯在倒计时5后会闪烁。如此不断的循环下去,实现了交通灯的效果。
在本次实验中,东西方向的红,黄,绿灯分别用LED1, LED2, LED3表示。南北方向的红,黄,绿灯分别用LED6, LED7, LED8表示。
通过本次的实验,能使自己了解并掌握实时时钟的增量中断用法和SPI的7段数码管显示用法,还有就是更熟练地应用GPIO口,以设计生活中实用的交通灯来培养自己的思维和加强自己的系统设计能力。
实验仪器
装有ADS1.2及EasyJTAG仿真器的电脑一台
ARM7开发板一块
实验原理
特性:
实验内容 (实验程序由自己结合书上多章内容自己编写)
#include config.h
#define HC595_CS (1 29) // P0.29口为74HC595的片选
const uint32 LEDS8 = (0xFF 18);
const uint32 LED1 = (1 18);
const uint32 LED2 = (1 19);
const uint32 LED3 = (1 20);
const uint32 LED6 = (1 23);
const uint32 LED7 = (1 24);
const uint32 LED8 = (1 25);
uint8 rcv_data;
uint8 i=9;
uint32 flag=0;
********************************************************************************* 函数名称 : RTC_Int()
** 功能描述 : RTC中断服务函数。
** 入口参数 :无
** 出口参数 :无
*******************************************************************************
void MSPI_Init(void)
{
//PINSEL0 = (PINSEL0 0xFFFF00FF) | 0 // 设置管脚连接SPI
PINSEL0 = (PINSEL0 (~(0xFF 8))) | (0x55 8) ;
SPCCR = 0x52; // 设置SPI时钟分频
SPCR = (0 3) | // CPHA = 0, 数据在SCK 的第一个时钟沿采样
(1 4) | // CPOL = 1, SCK 为低有效
(1 5) | // MSTR = 1, SPI 处于主模式
(0 6) | // LSBF = 0, SPI 数据传输MSB (位7)在先
(0 7); // SPIE = 0, SPI 中断被禁止
}
**************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据。
** 入口参数:data 待发送的数据
** 出口参数:返回值为读取的数据
*******************************************************************************uint8 MSPI_SendData(uint8 data)
{
IOCLR = HC595_CS; // 片选74HC595
SPI_SPDR = data;
while( 0 == (SPI_SPSR 0x80)); // 等待SPIF置位,即等待数据发送完毕
IOSET = HC595_CS;
return(SPI_SPDR);
}
显示全部