路灯控制器报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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
#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++); }