路灯控制器报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海电力学院飞思卡尔单片机应用实验报告

题目:路灯控制器

专业:电子信息工程

班级:

姓名:

学号:

一、实验要求:

1.实现路灯控制器的功能;

2.至少包含三个模块。

二、实验设备:

1.PC机一台

2.S12嵌入式开发系统一台

3.LED 一个

4.串行通信线一根

5.4连排共阴极8段数码管一个

三、实验原理:

三个模块分别是定时器模块、LED模块和小灯模块。通过时间的变化来达到我改变灯亮暗的目的。其中,定时器进行时间的计算,分为6点-18点和18点-6点两段,而小灯就是由这两段时间产生亮暗的现象(当时间为6:00-18:00时,小灯的状态为暗,当时间为18:00-6:00时小灯的状态为亮)。实验中要确认好相应代码,控制小灯亮红灯或者亮绿灯。

连线如下

Vcc

导线接插点

PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 PTA口(KEY1-8)

四、实验内容:

设定LED灯的前两位为小时项,后两位为分钟项,当时间为06:00-18:00时,小灯的状态为暗,当时间为18:00-06:00时小灯的状态为亮。

五、实验程序:

1.主函数:

//总头文件

#include "Includes.h"

//主函数

int main()

{

DISABLE_INTERRUPTS; //禁止总中断

//1. 芯片初始化

MCUInit();

//2. 模块初始化

SCIInit(); //(1) 串行通信初始化

LEDInit(); //(2) LED控制引脚初始化

TimerInit(); //(3) 定时器1初始化

//3. 内存初始化

//(1) "时分秒"缓存初始化(00:00:00)

time[0] = 0;

time[1] = 0;

time[2] = 0;

time[3] = 0;

//(2) LED显示缓存初始化为"0123"

LEDbuf[0] = '0';

LEDbuf[1] = '0';

LEDbuf[2] = '0';

LEDbuf[3] = '0';

//4. LED初始显示"0123"

LEDShow(LEDbuf);

//5. 开放各模块中断

EnableSCIReInt; //(1) 开放SCI接收中断

EnableT1OVInt; //(2) 开放定时器1溢出中断

//6. 开放总中断

ENABLE_INTERRUPTS;

//总循环

DDRA=0xff;

PORTA=0xaa;

LEDInit();

while (1)

{

if (time[0]==6)

{

PORTA=0xff;

}

if (time[0]==18)

{

PORTA=0xaa;

}

LEDbuf[3] = time[1]%10+0x30;

LEDbuf[2] = time[1]/10+0x30;

LEDbuf[1] = time[0]%10+0x30;

LEDbuf[0] = time[0]/10+0x30;

LEDShow(LEDbuf); //LED显示

}

}

//头文件

#include "Timer.h" //定时器头文件

void TimerInit(void)

{

//禁止定时器溢出中断,分频因子p=8

//中断一次时间计算:t=n/(fbus/p)=1/38秒,其中n=65535,fbus=19.6608MHZ TSCR2 = 0x03;

TSCR1 = 0x80; //允许主定时器开始计数

}

//TimerUpDate:定时器更新函数-----------------------------------------------*

void TimerUpDate(void)

{

time[1]++; //秒数加1

if (time[1] != 60) goto isrTIMER1_exit; //秒数未增加到60,转

time[1] = 0; time[0]++; //秒数增加到60,清0,分钟数加1

if (time[0] != 24) goto isrTIMER1_exit; //小时数未增到24,转

time[0] = 0; //时数增加到24,清0

isrTIMER1_exit:

TimInterCount = 0; //中断次数清零

}

//[LED.h]LED驱动头文件-----------------------------------------------------*

//头文件

#include //MCU映像寄存器名

#include "Type.h" //类型别名定义

//LED驱动相关寄存器宏定义

#define LEDdata PORTB //LED数据口

#define LEDdata_D DDRB //数据口相应方向寄存器

#define LEDcs PTH //LED位选口

#define LEDcs_D DDRH //位选口相应方向寄存器

//小灯控制引脚定义

#define Light_P PORTA //灯(Light)接在PTA口

#define Light_D DDRA //相应的方向寄存器

#define Light_Pin 1 //灯所在的引脚

//外部函数声明

void LEDInit(void); //4连排LED初始化

void LEDShow(INT8U *Buf); //在4连排LED上显示4个十进制数//内部函数声明

void LEDShow1(INT8U i, INT8U c); //在1个LED上显示数字

//小灯控制相关函数声明

void LEDInit(void); //定义控制小灯的MCU引脚为输出void LED_L_A(INT8U flag); //驱动小灯"亮"、"暗"

#include "LED.h" //该头文件包含LED驱动相关寄存器宏定义void LEDInit(void)

{

LEDdata_D = 0xFF; //数据口为输出

LEDcs_D |= 0xF0; //位选口为输出

Light_D |= 1<

Light_P |= 1<

}

void LEDShow(INT8U *Buf)

{

INT8U i,c;

INT16U j;

for (i = 0;i <= 3;i++)

{

c = Buf[i]-'0';

LEDShow1(3-i,c);

//延时

for (j = 0;j <= 100;j++);

}

相关文档
最新文档