📄 main.c
字号:
//main.c
//===============================================================================
// IOA[2:0]接键盘,IOA[15:8]接数码管的SEG,IOB[15:8]接数码管的DIG。
//使用时基中断TMB1_64HZ扫描键盘,使用TMB2_256HZ动态数码管显示
//使用外部中断检测液滴速度和液面
//===============================================================================
#include "spce061a.h"
#include "Sound.h"
#include "Key.h"
#define ch_Addr (unsigned int *)0xF000 //定义床位号存放的地址
int numb=0x0100;
int DispTbl[17]={0x3F00,0x0600,0x5B00,0x4F00,0x6600, //0,1,2,3,4
0x6D00,0x7D00,0x0700,0x7F00,0x6f00, //5,6,7,8,9
0x7700,0x7C00,0x3900,0x5e00,0x7900,0x7100,0xFF00};
int led_buf[6]={3,2,1,6,5,4};//数码管显示缓存
int flat=0; // 床位号调整标志
int ch_num=3; //床位号调整的位数
unsigned key_value=0; //键值
unsigned Speed=0; //液滴速度
unsigned Time=1;
int finish=0;
int warning=0;
int i=0;
void F_FlashWrite1Word(int addr,int Value);
void F_FlashErase(unsigned int sector);
void Save_chw(void);
//===============================================================================
//延时程序
//===============================================================================
void delay()
{
int delayvalue=0;
for(delayvalue=0;delayvalue<0x50;delayvalue++)
*P_Watchdog_Clear=1;
}
int main()
{
int n=0;
*P_IOA_Dir =0xff00;
*P_IOA_Attrib =0xffff;
*P_IOA_Data =0;
*P_IOB_Dir=0xff00;
*P_IOB_Attrib=0xFFFF;
*P_IOB_Data=0x0000;
Key_Init();
for(n=0;n<3;n++)
{
led_buf[3+n]=*(ch_Addr+n)%10;
}
while(1)
{
//===========================================================================================================
//液位检测
//===========================================================================================================
if((*P_IOB_Data&0x0001)!=0)
{
++finish;
if(finish>=50)
finish=1;
}
else
warning=1;
//===========================================================================================================
//键盘处理
//===========================================================================================================
key_value=Key_Get();
if(key_value!=0)
switch(key_value)
{
case 1:
{
if(led_buf[ch_num]==0)
led_buf[ch_num]=9;
else
--led_buf[ch_num];
break;
}
case 2:
{
if(led_buf[ch_num]==9)
led_buf[ch_num]=0;
else
++led_buf[ch_num];
break;
}
case 4:
{
if(ch_num==5)
ch_num=3;
else
++ch_num;
break;
}
case 9:
{
if(led_buf[ch_num]==0)
led_buf[ch_num]=9;
else
--led_buf[ch_num];
break;
}
case 10:
{
if(led_buf[ch_num]==9)
led_buf[ch_num]=0;
else
++led_buf[ch_num];
break;
}
case 12:
{
flat=~flat;
if(flat==0)
Save_chw();
break;
}
}
//===========================================================================================================
//语音报警
//===========================================================================================================
if(warning!=0)
switch(warning)
{
case 1:
{
PlaySnd(0);
warning=0;
break;
}
case 2:
{
PlaySnd(1);
warning=0;
break;
}
case 3:
{
PlaySnd(2);
warning=0;
break;
}
}
*P_Watchdog_Clear=1;
}
return 0;
}
//========================================================
// 语法格式: void Save_Password(void)
// 实现功能: 保存床位号
// 参数: 无
// 返回值: 无
//========================================================
void Save_chw(void)
{
unsigned int n;
F_FlashErase((unsigned int)ch_Addr); //擦除存放床位号的Flash空间
for(n=0;n<3;n++)
{
F_FlashWrite1Word((unsigned int)(ch_Addr+n),led_buf[3+n]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -