📄 main.c
字号:
/*-----------------------------------------------------*
*工 程 名:
*硬件连接:
*程序描述: SD-HC08 模板生成
*/
/*[头文件]*/
#include "GP32C.h" //映像寄存器地址头文件
#include "userdefine.h"
#include "KB.h"
#define TSTOPBit 5 //定时器计数停止位
#define TOFBit 7 //定时器溢出标志位
extern void lcdshow(unsigned char *str);
extern void Lcd_show_cursor(char x,char y);
void Time_Var2char(Time_Struct Time);
void Timer1init(void);
void Year_adjust(void);
void Month_adjust(void);
void Day_adjust(void);
void Hour_adjust(void);
void Minute_adjust(void);
void A_Year_adjust(void);
void A_Month_adjust(void);
void A_Day_adjust(void);
void A_Hour_adjust(void);
void A_Minute_adjust(void);
void Alarm_handle(void);
void Alarm_play(void);
void Alarm_Off(void);
void swap(char *m,char *n);
Time_Struct Time={2000,1,1,12,0,0};
Time_Struct Alarm={2000,1,1,7,30,0};
unsigned char LCD_buff[32]=" ";
char Timer_5sec_trigger=0;
char Timer_5sec_counter=0,Alarm_counter=0;
char Alarm_enable_flag=0,Alarm_trigger=0;
char Select_key_is_pressed_flag=0,Up_Modify_key_is_pressed_flag=0,Down_Modify_key_is_pressed_flag=0;
char Normal_show_time=1,Time_fresh=1,Alarm_fresh;
char Minute_second_integral_flag=0,Integral_counter=0;
/*[主函数]*/
void main()
{
char i,j=0;
asm("SEI"); //关总中断
Timer1init(); //调定时器1初始化子程序
KB_Init();
INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)
Alarm_Off();
asm("CLI"); //开总中断
while(1)
{
j++;
while(1)
{
if(Normal_show_time&&Time_fresh)
{
Alarm_counter++;
for(i=11;i<16;i++)
{
LCD_buff[i]=' ';
}
Time_Var2char(Time);
lcdshow((unsigned char *)LCD_buff);
Time_fresh=0;
}
if(!Normal_show_time&&Alarm_fresh)
{
Alarm_fresh=0;
Time_Var2char(Alarm);
lcdshow((unsigned char *)LCD_buff);
}
if(Alarm_trigger)
{
if(Alarm_counter<20)
Alarm_play();
else
{
Alarm_trigger=0;
Alarm_counter=0;
Alarm_Off();
}
}
if(Minute_second_integral_flag)
{
if(Integral_counter<5)
Alarm_play();
else
{
Minute_second_integral_flag=0;
Integral_counter=0;
Alarm_Off();
}
}
if(Timer_5sec_trigger)
{
if(Timer_5sec_counter>5)
{
Timer_5sec_trigger=0;
Timer_5sec_counter=0;
Select_key_is_pressed_flag=0;
Normal_show_time=1;
break;
}
if(Select_key_is_pressed_flag==0)
{
Timer_5sec_trigger=0;
Timer_5sec_counter=0;
break;
}
switch(Select_key_is_pressed_flag%11)
{
case 0:Year_adjust();break;
case 1:Year_adjust();break;
case 2:Month_adjust();break;
case 3:Day_adjust();break;
case 4:Hour_adjust();break;
case 5:Minute_adjust();break;
case 6:A_Year_adjust();break;
case 7:A_Month_adjust();break;
case 8:A_Day_adjust();break;
case 9:A_Hour_adjust();break;
case 10:A_Minute_adjust();break;
default: ;break;
}
} //end if
}//end while
}//end while
}// end main
void Time_Var2char(Time_Struct Time)
{
unsigned char i,tmpchar;
unsigned short int tmp;
tmp=Time.year;
for(i=0;i<4;i++)
{
LCD_buff[i]=tmp%10+48;
tmp=tmp/10;
}
swap(&LCD_buff[0],&LCD_buff[3]);
swap(&LCD_buff[1],&LCD_buff[2]);
LCD_buff[i]='-';
tmpchar=Time.month;
for(i=5;i<7;i++)
{
LCD_buff[i]=tmpchar%10+48;
tmpchar=tmpchar/10;
}
swap(&LCD_buff[6],&LCD_buff[5]);
LCD_buff[i]='-';
tmpchar=Time.day;
for(i=8;i<10;i++)
{
LCD_buff[i]=tmpchar%10+48;
tmpchar=tmpchar/10;
}
swap(&LCD_buff[9],&LCD_buff[8]);
tmpchar=Time.hour;
for(i=16;i<18;i++)
{
LCD_buff[i]=tmpchar%10+48;
tmpchar=tmpchar/10;
}
swap(&LCD_buff[17],&LCD_buff[16]);
LCD_buff[i]=':';
tmpchar=Time.min;
for(i=19;i<21;i++)
{
LCD_buff[i]=tmpchar%10+48;
tmpchar=tmpchar/10;
}
swap(&LCD_buff[20],&LCD_buff[19]);
LCD_buff[i]=':';
tmpchar=Time.sec;
for(i=22;i<24;i++)
{
LCD_buff[i]=tmpchar%10+48;
tmpchar=tmpchar/10;
}
swap(&LCD_buff[23],&LCD_buff[22]);
}
char Is_yunnian(unsigned short year)
{
if((year%400==0)||((year%4==0)&&(year%100!=0)))
return 1;
else return 0;
}
/*Timer1init:定时器1初始化子程序-----------------------*
*功能:对定时器1初始化 *
*参数:无 *
*返回:无 *
*-----------------------------------------------------*/
void Timer1init(void)
{
//允许溢出中断、不启动计数、分频因子=64
T1SC=0b01100110;
//计数寄存器初值=0x0000
T1CNTH=0x00; T1CNTL=0x00;
//1秒产生1次溢出中断,计数寄存器=1×(2457600/64)=9600
T1MODH=0x96; T1MODL=0x00;
//允许定时器1计数寄存器计数
T1SC&=~(1<<TSTOPBit);
}
void Year_adjust(void)
{
Normal_show_time=1;
Lcd_show_cursor(0,3);
if(Up_Modify_key_is_pressed_flag)
{
Time.year++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Time.year--;
Down_Modify_key_is_pressed_flag=0;
}
}
void Month_adjust(void)
{
Normal_show_time=1;
Lcd_show_cursor(0,6);
if(Up_Modify_key_is_pressed_flag)
{
if(Time.month<12)
Time.month++;
else
Time.month=1;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
if(Time.month>1)
Time.month--;
else
Time.month=12;
Down_Modify_key_is_pressed_flag=0;
}
}
void Day_adjust(void)
{
Normal_show_time=1;
Lcd_show_cursor(0,9);
if(Up_Modify_key_is_pressed_flag)
{
if((Time.month!=2)&&(Time.month==1)||(Time.month==3)||(Time.month==5)||(Time.month==7)||(Time.month==8)||(Time.month==10||(Time.month==12)))
{
if(Time.day<31)
Time.day++;
else
Time.day=1;
}
else if((Time.month!=2)&&(Time.month==4)||(Time.month==6)||(Time.month==9)||(Time.month==11))
{
if(Time.day<30)
Time.day++;
else
Time.day=1;
}
else
{
if(!Is_yunnian(Time.year)) //如果不是闰年
{
if(Time.day<28)
Time.day++;
else
Time.day=1;
}
else
{
if(Time.day<29)
Time.day++;
else
Time.day=1;
}
}
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
if((Time.month!=2)&&(Time.month==1)||(Time.month==3)||(Time.month==5)||(Time.month==7)||(Time.month==8)||(Time.month==10||(Time.month==12)))
{
if(Time.day>1)
Time.day--;
else
Time.day=31;
}
else if((Time.month!=2)&&(Time.month==4)||(Time.month==6)||(Time.month==9)||(Time.month==11))
{
if(Time.day>1)
Time.day--;
else
Time.day=30;
}
else
{
if(!Is_yunnian(Time.year)) //如果不是闰年
{
if(Time.day>1)
Time.day--;
else
Time.day=1;
}
else
{
if(Time.day>1)
Time.day--;
else
Time.day=1;
}
}
Down_Modify_key_is_pressed_flag=0;
}
}
void Hour_adjust(void)
{
Normal_show_time=1;
Lcd_show_cursor(1,1);
if(Up_Modify_key_is_pressed_flag)
{
if(Time.hour<59)
Time.hour++;
else
Time.hour=0;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
if(Time.hour>0)
Time.hour--;
else
Time.hour=59;
Down_Modify_key_is_pressed_flag=0;
}
}
void Minute_adjust(void)
{
Normal_show_time=1;
Lcd_show_cursor(1,4);
if(Up_Modify_key_is_pressed_flag)
{
if(Time.min<59)
Time.min++;
else
Time.min=0;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
if(Time.min>0)
Time.min--;
else
Time.min=59;
Down_Modify_key_is_pressed_flag=0;
}
}
void A_Year_adjust(void)
{
Normal_show_time=0;
LCD_buff[11]='A';
LCD_buff[12]='L';
LCD_buff[13]='A';
LCD_buff[14]='R';
LCD_buff[15]='M';
if(Up_Modify_key_is_pressed_flag)
{
Alarm.year++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Alarm.year--;
Down_Modify_key_is_pressed_flag=0;
}
Lcd_show_cursor(0,3);
}
void A_Month_adjust(void)
{
Normal_show_time=0;
Lcd_show_cursor(0,6);
if(Up_Modify_key_is_pressed_flag)
{
Alarm.month++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Alarm.month--;
Down_Modify_key_is_pressed_flag=0;
}
}
void A_Day_adjust(void)
{
Normal_show_time=0;
Lcd_show_cursor(0,9);
if(Up_Modify_key_is_pressed_flag)
{
Alarm.day++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Alarm.day--;
Down_Modify_key_is_pressed_flag=0;
}
}
void A_Hour_adjust(void)
{
Normal_show_time=0;
Lcd_show_cursor(1,1);
if(Up_Modify_key_is_pressed_flag)
{
Alarm.hour++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Alarm.hour--;
Down_Modify_key_is_pressed_flag=0;
}
}
void A_Minute_adjust(void)
{
Normal_show_time=0;
Lcd_show_cursor(1,4);
if(Up_Modify_key_is_pressed_flag)
{
Alarm.min++;
Up_Modify_key_is_pressed_flag=0;
}
if(Down_Modify_key_is_pressed_flag)
{
Alarm.min--;
Down_Modify_key_is_pressed_flag=0;
}
}
void Alarm_handle(void)
{
Alarm_enable_flag=!Alarm_enable_flag;
if(Alarm_enable_flag)
{
LCD_buff[29]=' ';
LCD_buff[30]='E';
LCD_buff[31]='N';
}
else
{
LCD_buff[29]='D';
LCD_buff[30]='I';
LCD_buff[31]='S';
}
}
void Alarm_play(void)
{
DDRD|=0b00000001;
PTD|=0b00000001;
}
void Alarm_Off(void)
{
DDRD|=0b00000001;
PTD&=0b11111110;
}
void swap(char *m,char *n)
{
char tmp;
tmp=*m;
*m=*n;
*n=tmp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -