⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 利用SPCE061A单片机、SPR4096模组
💻 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 + -