📄 main.c
字号:
#include "key.h"
#include "SPCE061A.h"
#include "s480.h"
#include "Dig.h"
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
void Delay(void);
unsigned int Status=0; //状态标识0--下午,1--上午,默认为下午
unsigned int Tens;
unsigned int Ones;
unsigned int Alltime;
unsigned long int count=0;
int IN=0;
int OUT=0;
unsigned int g_Data[10] = {0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f};
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel);
void PlaySnd_Auto(unsigned int uiSndIndex,unsigned int uiDAC_Channel)
{
SACM_S480_Initial(1); //初始化为自动播放方式
SACM_S480_Play(uiSndIndex,uiDAC_Channel,3); //播放
while((SACM_S480_Status()&0x0001) != 0)
{ //判断播放状态,如还在播放则继续循环
SACM_S480_ServiceLoop(); //播放系统服务程序
show();
rshow();
*P_Watchdog_Clear = 0x0001;
}
SACM_S480_Stop(); //停止播放
}
void TPlayData(unsigned int Alltime)
{
unsigned shi; //分别存放百和十的语音索引号
unsigned int Bw,Sw,Gw; //分别存放百位\十位和个位数据
shi = 10; //初始化十的语音索引号
Sw =Alltime/10; //计算十位
Gw =Alltime%10; //计算个位
if(Sw!=0)
{
PlaySnd_Auto(Sw,3); //如果十位不为0,播放十位
PlaySnd_Auto(shi,3); //播放十
}
else
if((Bw!=0)) //如果百位不为0,十位为0,播放0
PlaySnd_Auto(Sw,3);
if(Gw!=0) //如果个位不为0,播放个位
PlaySnd_Auto(Gw,3);
else
if((Bw==0)&&(Sw==0)) //如果百位、十位、个位都为0,播放0
PlaySnd_Auto(Gw,3);
*P_Watchdog_Clear = 0x0001;
}
int main(void)
{
unsigned int uiKey = 0; //定义键值,并初始化为0
*P_IOA_Data=0x0000;
*P_IOA_Attrib=0x0000; //初始化IOA口为带上拉电阻输入口
*P_IOA_Dir=0x0000; //A2(进门) A3(出门)为检测端口
*P_IOB_Dir = 0xffff; //初始化IOB口为输出口
*P_IOB_Attrib = 0xffff; // 初始化IOB口为同相
*P_IOB_Data =0x0000; // 段选为B0(a),B1,B2,B3,B4,B5,B6(g),位选为B8 B9
Key_Init(); //调用键盘初始化程序,在key.asm中定义
PlaySnd_Auto(18,3);
while(1)
{
uiKey = Key_Get(); //调用取键值程序获取键值,在key.asm中定义
show();
rshow();
// Delay();
switch(uiKey)
{
case 0x0000:
break;
case 0x0001: Status=1; //IOA1 按下 //上午
break;
case 0x0004: //IOA2 按下
Alltime=count*0.5;
TPlayData(Alltime); //播报已运行时间
Tens=Alltime/10;
Ones=Alltime%10;
while(*P_IOA_Data==0x0000)
{
showT();
rshowT();
*P_Watchdog_Clear = 0x0001; //清看门狗
}
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
case 0x0008: //若IOA4为高电平,即有人进门
{
IN++;
OUT++;
if(IN==10)
{ IN=1;
OUT=1;
PlaySnd_Auto(11,3);
}
if(OUT==10)
{ OUT=1;
PlaySnd_Auto(11,3);
}
}
if(Status==0)
{
PlaySnd_Auto(16,3);
PlaySnd_Auto(13,3);
}
if(Status==1)
{
PlaySnd_Auto(14,3);
PlaySnd_Auto(13,3);
}
PlaySnd_Auto(12,3);
PlaySnd_Auto(IN,3);
while(*P_IOA_Data==0x0000)
{
show();
rshow();
*P_Watchdog_Clear = 0x0001; //清看门狗
}
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
// Delay();
case 0x0010: //若IOA5为高电平,即有人进门
OUT--;
if(Status==0)
{
PlaySnd_Auto(17,3);
PlaySnd_Auto(15,3);
}
if(Status==1)
{
PlaySnd_Auto(17,3);
PlaySnd_Auto(15,3);
}
PlaySnd_Auto(OUT,3);
while(*P_IOA_Data==0x0000)
{
show();
rshow();
*P_Watchdog_Clear = 0x0001; //清看门狗
}
*P_Watchdog_Clear = 0x0001; //清看门狗
break;
default:
break;
}
*P_Watchdog_Clear = 0x0001;
}
}
void Delay(void)
{
unsigned long uiCount;
for(uiCount = 0;uiCount<=1500;uiCount++)
{
show();
rshow();
*P_Watchdog_Clear = 0x0001; //清看门狗
}
}
void show()
{
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
*P_IOB_Data=g_Data[OUT]|0x0200;
*P_IOB_Data=g_Data[IN]|0x0100;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -