📄 main.c
字号:
//========================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================
//========================================================
// 工程名称: Busbroadcast.spj
// 功能描述: 简易公交车报站器
// 日期、钟表功能
// 涉及的库: CMacro.lib\SACMv26e.lib
// 组成文件: main.c
// dig.asm/fiq.asm/hardware.asm/key.asm/spr4096_driver.asm
// show_and_set_time.c/speech.c
// busbroadcast.h/dig.h/dig.inc/key.h/key.inc/a2000.h/a2000.inc
// s480.h/s480.inc/spce061a.h/spce061a.inc/spr4096_user.h
// speech.h/spr4096_user.h
//
// 硬件连接: IOB8-IOB15----Key1-Key8
// IOA0-IOA7----SEGa-SEGg
// IOA8-IOA15----DIG1-DIG8
// IOB0----SCK(SPR4096)
// IOB1----SDA(SPR4096)
// IOB2----D_dp
// ROW(LED KEY)----5V
// 维护记录: 2005-12-11 v1.0
// edit by liuxue
// liuxue@sunnorth.com.cn
// 20xx-xx-xx v1.x
//
//========================================================
#include "dig.h" //声明数码管相关操作函数
#include "key.h" //声明键盘相关操作函数
#include "spce061a.h" //声明spce061a的寄存器
#include "speech.h" //声明语音相关操作函数
#include "SPR4096_User.h" //声明spr4096相关操作函数
#include "show_and_set_time.h" //声明设置时间相关操组函数
//以下变量在show_and_set_time.c文件中定义,并且在2Hz中断中改变
extern unsigned int uiYear_H; //声明全局变量----年
extern unsigned int uiYear_MH;
extern unsigned int uiYear_ML;
extern unsigned int uiYear_L;
extern unsigned int uiMonth_H; //声明全局变量----月
extern unsigned int uiMonth_L;
extern unsigned int uiDay_H; //声明全局变量----日
extern unsigned int uiDay_L;
extern unsigned int uiHour_H; //声明全局变量----小时
extern unsigned int uiHour_L;
extern unsigned int uiMinite_H; //声明全局变量----分
extern unsigned int uiMinite_L;
extern unsigned int g_uiSecond_half; //半秒
extern unsigned int Data[11]; //声明外部数组
unsigned int uiA2000_S480; //定义全局变量1:播放A2000,0:播放S480
unsigned int g_4Hz_On; //闪烁控制,是否进入4Hz代码标志
unsigned int g_Light; //闪烁标志
unsigned int uiSetflag = 0; //设置键标志(Key6)
unsigned int uiDisp = 0; //显示年/月/日 切换
//========================================================
// 文件名称: main.c
// 功能描述: busbroadcast.spj主文件
// 维护记录: 2005-11-30 v1.0
//========================================================
//========================================================
// 语法格式: int main(void)
// 实现功能: 主函数
// 参数: 无
// 返回值: 无
//========================================================
int main(void)
{
unsigned int uiKey; //键盘值
unsigned int uiOn_Off; //数码管显示或不显示标志
unsigned int uiKey1_Count; //key1按下次数
unsigned int uiKey2_Count; //key2按下次数
unsigned int uiflag; //按键key1、key2的奇偶标志
unsigned int uiTemp; //临时变量
uiOn_Off = 0; //局部变量初始化
uiKey1_Count = 0; //
uiKey2_Count = 16; //
uiflag = 0;
SP_SIOInitial(); //初始化SPR模组,SPR4096
DIG_Init(); //初始化数码管
Key_Init(); //初始化键盘
Time_Init(); //初始化显示时间
DIG_Set(1,0);
DIG_Set(2,0);
DIG_Set(3,Data[uiHour_H]);
DIG_Set(4,Data[uiHour_L]);
DIG_Set(5,Data[uiMinite_H]);
DIG_Set(6,Data[uiMinite_L]);
Broadcast(52); //播放站点
while(1)
{
if(uiDisp == 0) //显示时间
{
DIG_Set(1,0);
DIG_Set(2,0);
DIG_Set(3,Data[uiHour_H]);
DIG_Set(4,Data[uiHour_L]);
DIG_Set(5,Data[uiMinite_H]);
DIG_Set(6,Data[uiMinite_L]);
}
if(uiDisp == 1) //显示月日
{
DIG_Set(1,Data[uiMonth_H]);
DIG_Set(2,Data[uiMonth_L]);
DIG_Set(3,0x0077);
DIG_Set(4,Data[uiDay_H]);
DIG_Set(5,Data[uiDay_L]);
DIG_Set(6,0x007f);
}
if(uiDisp == 2) //显示年
{
DIG_Set(1,0x0040);
DIG_Set(2,Data[uiYear_H]);
DIG_Set(3,Data[uiYear_MH]);
DIG_Set(4,Data[uiYear_ML]);
DIG_Set(5,Data[uiYear_L]);
DIG_Set(6,0x0040);
}
uiKey = Key_Get(); //得到键值,扫建程序在128Hz中断中调用
switch(uiKey)
{
case KEY1:
uiA2000_S480 = 0; //选择S480放音,在中断FIQ
uiKey = 0;
if(uiflag < 1)
{
uiKey1_Count++;
NextStation(uiKey1_Count); //播放提示下一站***
uiflag = 1;
}
else
{
uiflag = 0;
ComingStation(uiKey1_Count);//****站到了***
}
if(uiKey1_Count == 16)
{
uiKey1_Count = 0; //如果是终点站,重新初始化
}
break;
case KEY2:
uiA2000_S480 = 0;
if(uiflag == 0)
{
uiKey2_Count--;
NextStation(uiKey2_Count);
uiflag = 1;
}
else
{
uiflag = 0;
ComingStation(uiKey2_Count);
}
if(uiKey2_Count == 0)
{
uiKey2_Count = 16;
}
break;
case KEY3:
uiA2000_S480 = 0;
PlaySnd_S480(65,3); //播放提示语,车在运行中,请做好扶稳
break;
case KEY4:
uiA2000_S480 = 0;
PlaySnd_S480(67,3); //请让座
break;
case KEY5:
//广告或娱乐
uiA2000_S480 = 1;
PlaySnd_A2000(70,3);
break;
case KEY6:
g_4Hz_On = 1; //进入4Hz中断代码,实现闪烁效果
uiSetflag++;
Set_Time(); //设置时间
break;
case KEY7:
uiKey = 0;
uiDisp++; //切换显示时间/月日/年
if(uiDisp == 3)
uiDisp = 0;
if(uiDisp == 0)
{
uiTemp = *P_INT_Ctrl_New; //打开2Hz中断,显示秒针
uiTemp |= C_IRQ5_2Hz;
*P_INT_Ctrl_New = uiTemp;
}
else
{
uiTemp = *P_INT_Ctrl_New; //关闭2Hz中断,不显示秒针
uiTemp &= 0xfffb;
*P_INT_Ctrl_New = uiTemp;
uiTemp = *P_IOB_Buffer;
uiTemp &= 0xfffb;
*P_IOB_Data = uiTemp;
}
break;
case KEY8:
if(uiOn_Off == 0)
{
DIG_Off(); //关闭数码管
uiOn_Off = 1;
}
else
{
DIG_On(); //打开数码管
uiOn_Off = 0;
}
break;
default:
break;
}
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -