📄 system.c
字号:
else
nday = ++nday;
break;
}
break;
case 0x0004: //如果是KEY3按下,那么光标所对应的值进行减操作
switch(j)
{
case 0:
if(year<=2001)
year = 2100;
else
year = --year;
break;
case 2:
if(gmonth==1)
gmonth = 12;
else
gmonth = --gmonth;
break;
case 4:
if(gday==1)
gday = 31;
else
gday = --gday;
break;
case 6:
if(hour==0)
hour = 23;
else
hour = --hour;
break;
case 8:
if(min==0)
min = 59;
else
min = --min;
break;
case 10:
if(sec==0)
sec = 60;
else
sec = --sec;
break;
case 12:
if(nmonth==1)
nmonth = 12;
else
nmonth = --nmonth;
break;
case 14:
if(nday==1)
nday = 30;
else
nday = --nday;
break;
}
break;
}
}
}
//===============================================================//
//语法格式:void naoclockshow1(shownhour,shownmin,keynow)
//实现功能:显示闹钟调整界面
//参数 :shownhour,shownmin,keynow,闹钟的小时,分钟,当前光标
//返回值 :无
//==============================================================//
void naoclockshow1(shownhour,shownmin,keynow) //显示闹钟调整界面
{
int clockhourshi=0;
int clockhourge=0;
int clockminshi=0;
int clockminge=0;
clockhourshi=shownhour/10;
clockhourge=shownhour%10;
clockminshi=shownmin/10;
clockminge=shownmin%10;
switch(keynow)
{
case 0:
if(Flash) //正常显示
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[clockhourshi]);
uart_operate(LED[clockhourge]); //显示时
uart_operate(LED[clockminshi]);
uart_operate(LED[clockminge]); //显示分
uart_operate(0x00);
uart_operate(0x00);
Flash=0;
}
else if(DispEnb) //每0.5s年不显示
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00); //不显示时
uart_operate(LED[clockminshi]);
uart_operate(LED[clockminge]); //显示分
uart_operate(0x00);
uart_operate(0x00);
DispEnb=0;
}
break;
case 2:
if(Flash) //正常显示
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[clockhourshi]);
uart_operate(LED[clockhourge]); //显示时
uart_operate(LED[clockminshi]);
uart_operate(LED[clockminge]); //显示分
uart_operate(0x00);
uart_operate(0x00);
Flash=0;
}
else if(DispEnb) //每0.5s年不显示
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[clockhourshi]);
uart_operate(LED[clockhourge]); //显示时
uart_operate(0x00);
uart_operate(0x00); //不显示分
uart_operate(0x00);
uart_operate(0x00);
DispEnb=0;
}
}
}
//===============================================================//
//语法格式:naoclockshow2(shownhour,shownmin)
//实现功能:显示闹钟调整界面
//参数 :无
//返回值 :无
//==============================================================//
void naoclockshow2(shownhour,shownmin) //显示闹钟调整界面
{
int clockhourshi=0;
int clockhourge=0;
int clockminshi=0;
int clockminge=0;
clockhourshi=shownhour/10;
clockhourge=shownhour%10;
clockminshi=shownmin/10;
clockminge=shownmin%10;
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[clockhourshi]);
uart_operate(LED[clockhourge]); //显示时
uart_operate(LED[clockminshi]);
uart_operate(LED[clockminge]); //显示分
uart_operate(0x00);
uart_operate(0x00);
}
//==============================================================//
//语法格式: void setclock()
//实现功能:设置闹钟时间
//参数 :无
//返回值 :无
//=============================================================//
void setclock() //设置闹钟子函数
{
int k = 0;
keyflag4 = 1;
while(keyflag4==1)
{
keyscan(); //键盘扫描
if(keyvalue==0)
naoclockshow1(nhour,nmin,k); //无键按下显示闪烁的界面
else
naoclockshow2(nhour,nmin); //有键按下显示不闪烁的界面
*P_Watchdog_Clear = 0x0001;
switch(keyvalue)
{
case 0x0001: //如果键1按下则退出循环
if(k==0x0002)
{
keyflag4 = 0;
ClearDisplay(); // 退出循环,清屏
}
else //或者指向下一个要调整的单元
{
k = k+2;
}
break;
case 0x0002: //键2按下则进行加调整
switch(k)
{
case 0:
if(nhour==23)
nhour = 0;
else
nhour = ++nhour; //闹钟小时加1
break;
case 2:
if(nmin==59)
nmin = 0;
else
nmin = ++nmin; //闹钟分加1
break;
}
break;
case 0x0004: //键3按下则进行减
switch(k)
{
case 0:
if(nhour==0)
nhour = 23;
else
nhour = --nhour; //闹钟小时减1
break;
case 2:
if(nmin==0)
nmin = 59;
else
nmin = --nmin; //闹钟分减1
break;
}
break;
}
}
}
//==============================================================//
//语法格式:void showsecond()
//实现功能:显示秒表功能界面
//参数 :无
//返回值 :无
//=============================================================//
void showsecond() //秒表显示界面
{
// if(DispEnb)
// {
BCD(mmsec,&mTime[4]);
BCD(mbsec,&mTime[2]);
BCD(mbmin,&mTime[0]);
uart_operate(mTime[0]);
uart_operate(mTime[1]); //显示分
uart_operate(0x02);
uart_operate(mTime[2]);
uart_operate(mTime[3]); //显示秒
uart_operate(0x02);
uart_operate(mTime[4]);
uart_operate(mTime[5]); //显示毫秒
// DispEnb=0;
//}
}
//==============================================================//
//语法格式 void setsecond()
//实现功能:设置秒表的功能
//参数 :无
//返回值 :无
//=============================================================//
void setsecond() //设置秒表子函数
{
int intflag = 0;
keyflag5 = 1;
ClearDisplay(); //清屏进入秒表界面
while(keyflag5==1)
{
showsecond();
keyscan(); //按键扫描
switch(keyvalue)
{
case 1:
keyflag5 = 0;
ClearDisplay(); //退出秒表界面,清屏。
break;
case 2:
switch(intflag)
{
case 1:
intflag = 0;
*P_INT_Ctrl=*P_INT_Ctrl_New & 0xffef;
break; //关闭1KHZ中断
case 0:
intflag = 1;
*P_INT_Ctrl_New=*P_INT_Ctrl_New | 0x0010;
break; //打开1KHZ中断
}
break;
case 4: //如果此时秒表处于暂停状态则清零
if(intflag==0)
{
mbmin = 0;
mbsec = 0;
mmsec = 0;
}
else
*P_Watchdog_Clear = 0x0001;
break;
}
}
}
//===============================================================//
//语法格式: void miaobiao()
//实现功能:秒表运行修正
//参数 :无
//返回值 :无
//==============================================================//
void miaobiao() //秒表运行修正子函数,由1kHZ中断实现
{
if(mbnum==10)
{
mbnum = 0;
mmsec = ++mmsec;
}
if(mapcounter1==300) //显示SUNPLUS旋转界面
{
mapcounter1=0;
mapcounter2=mapcounter2++;
if(mapcounter2==40)
mapcounter2=0;
}
if(mmsec==102)
{
mmsec = 0;
mbsec = ++mbsec;
}
if(mbsec==60)
{
mbsec = 0;
mbmin = ++mbmin;
}
if(mbmin==99)
{
mbmin = 0;
}
}
//===============================================================//
//语法格式: void set_ring()
//实现功能:按键选择闹钟的时间设置或者是铃声设置
//参数 :无
//返回值 :无
//==============================================================//
void set_ring()
{
int i = 0;
keyflag6 = 1;
ClearDisplay();
while(keyflag6==1)
{
//---------------------------------------
if(DispEnb)
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[2]); //2
uart_operate(0x02); //-
uart_operate(LED[i+1]); //1
DispEnb=0;
}
//---------------------------------------
keyscan();
switch(keyvalue)
{
case 1:
switch(i)
{
case 0:
setclock(); //调用闹钟时间设置界面
break;
case 1: //调用铃声选择
ring_choice();
break;
case 2:
keyflag6=0;
ClearDisplay();
break;
}
break;
case 2: //光标下移
if(i==2)
i = 0;
else
i = ++i;
break;
case 4: //光标上移
if(i==0)
i = 2;
else
i = --i;
break;
}
}
}
//===============================================================//
//语法格式: ring_choice()
//实现功能:铃声选择
//参数 :无
//返回值 :无
//==============================================================//
void ring_choice()
{
int i = 0;
keyflag7 = 1;
ClearDisplay();
while(keyflag7==1)
{
/*showringmap(); */
//--------------------------------------
if(DispEnb)
{
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(LED[2]); //2
uart_operate(0x02); //-
uart_operate(LED[2]); //2
uart_operate(0x02); //-
uart_operate(LED[i+1]); //1或2--代表铃声1或铃声2
DispEnb=0;
}
//----------------------------------------
keyscan();
switch(keyvalue)
{
case 1:
{
keyflag7 = 0;
ClearDisplay(); //退出循环清屏
if(i==0)
ringflag = 0; //选中铃声1
else
ringflag = 1; //选中铃声2
}
break;
case 2:
{
switch(i) //切换光标的位置
{
case 0:
i = 1;
break;
case 1:
i = 0;
break;
}
}
break;
case 4:
if(i==0)
PlayRespond(17);
else
PlayRespond(18);
break;
}
}
}
//==========================================================
//调用:void uart_operate(unsigned int uart_data)
//功能:串口模拟
//参数:要传输的数据
//==========================================================
void uart_operate(unsigned int uart_data)
{
unsigned int i=8;
do
{
serial_clk=0; //串行时钟线置0
if(uart_data&0x01)
{
serial_data=1; //当前位数据为1,数据线置1
}
else
{
serial_data=0; //否则数据线置0
}
serial_clk=1; //串行时钟线置1
uart_data=uart_data>>1;
}
while(--i!=0);
serial_clk=0; //发送完毕时钟线关闭
}
//=====================================================
//功能:BCD码转换
//参数:c要转换的数据、*p存放转换后的数据的十位
//====================================================
void BCD(unsigned int c,unsigned int *p ) //c为要转换的数据 *p为存放转换后数据的十位
{
unsigned int i,j;
j=0;
(*p)=LED[i];
while(c>=10)
{
c-=10;
j+=1;
}
i=c;
*p=LED[j];
*(p+1)=LED[i];
}
void ClearDisplay()
{
uart_operate(0x00); //对所有的数码管清屏
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
uart_operate(0x00);
}
//=======================================================================//
//system.c end
//=========================================================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -