?? main.c
字號:
/*-----------------------------------------------------*
*工 程 名:clock
*硬件連接:
*程序描述:
*/
/*[頭文件]*/
#include "GP32C.h" //映像寄存器地址頭文件
#include "KB.h" //鍵盤中斷頭文件
#define Light_P PTA //蜂鳴器接在PTA口
#define Light_D DDRA //相應的方向寄存器
#define Light_Pin 1 //蜂鳴器所在的引腳
/*[函數(shù)聲明]*/
//在LCD第m行第n列顯示一個字符
extern void LcdshowCharacter(unsigned char str,unsigned char m,unsigned char n);
extern void Lcd_Command(unsigned char cmd); //命令執(zhí)行子程序
extern void Lcdshow(unsigned char temp[]) ; //顯示時間
extern void Timer1init(void); //定時器1初始化
extern void LcdInit(void); //Lcd初始化子程序
extern void LcdShowCursor(unsigned char m,unsigned char n); //顯示光標在第m行,第n列
//顯示大小為n字符數(shù)組在第m行
extern void LcdShowString(unsigned char str[],unsigned char n,unsigned char m);
extern void Delay(void); //延時
//將輸入的鍵值傳送到相應位置的位
extern void Transmission(unsigned char Keyvalue,unsigned char temp[],unsigned char m,unsigned char n);
extern unsigned char Discriminant(unsigned char key); //判斷按下的鍵是否數(shù)字鍵
extern void Changetime(int temp1[],unsigned char temp2[]); //將數(shù)組temp1拆分存儲到數(shù)組temp2
extern void Change(void); //將數(shù)組time組合存儲到數(shù)組Tdate
extern void Change2(void); //將數(shù)組alarm組合存儲到數(shù)組Tdate2
extern void Controle(void); //控制時鐘的日期時間合法
extern void Controle2(void); //控制鬧鐘的日期時間合法
/*全局變量聲明*/
unsigned char time[14]; //存放時鐘年、月、日、時、分、秒
int Tdate[3]; //存放時鐘年、月、日
unsigned char Ttime[3]; //存放時鐘時、分、秒
unsigned char alarm[14]; //存放鬧鐘的年、月、日、時、分、秒
int Tdate2[3]; //存放鬧鐘年、月、日
unsigned char Ttime2[3]; //存放鬧鐘時、分、秒
unsigned char Key; //存放按下鍵的定義值
unsigned char k; //光標向右移動的次數(shù)
unsigned char l; //光標向下移動的次數(shù)
unsigned char o; //鬧鐘功能標志位,等于1時開,等于0時關
/*[主函數(shù)]*/
void main()
{
unsigned char i;
unsigned char j;
unsigned char Keyvalue;
unsigned char x;
unsigned char y;
unsigned char t;
unsigned char str1[12]="1. Set Time";
unsigned char str2[13]="2. Set Alarm";
unsigned char str3[14]="1. Open Alarm";
unsigned char str4[15]="2. Close Alarm";
asm("SEI"); //關總中斷
//[I/O初始化]
Light_D|=1<<Light_Pin; //令蜂鳴器引腳為輸出
Light_P|=1<<Light_Pin; //初始時,蜂鳴器"停"
Timer1init(); //調(diào)定時器1初始化子程序
KB_Init();
INTKBSCR&= ~(1<<IntBit); //開放鍵盤中斷(IMASKk=1)
asm("CLI"); //開總中斷
//賦初時鐘始值2007年6月1日12點0分0秒;鬧鐘初始值2007年6月1日0時0分0秒
Tdate[0]=2007;Tdate[1]=6;Tdate[2]=1;Ttime[0]=12;Ttime[1]=0;Ttime[2]=0;
Tdate2[0]=2007;Tdate2[1]=6;Tdate2[2]=1; Ttime2[0]=0;Ttime2[1]=0;Ttime2[2]=0;
Changetime((int *)Tdate,(unsigned char *)Ttime);
o=0; //初始時關鬧鐘
i=Ttime[2];y=time[9];
BEGING:
while(1)
{
j=Ttime[2];
if (i!=j) //秒增1
{
Lcdshow((unsigned char *)time); //顯示日期時間
if(o==1) LcdshowCharacter('A',1,1); //左上角字符A標志開鬧鐘功能
if(o==0) LcdshowCharacter(' ',1,1); //關鬧鐘功能時消去左上角字符A
i=j;
}
x=time[9];
if(y!=x) //整點報時
{ for(t=0;t<3;t++) //報時三響
{ Light_P|=1<<Light_Pin; //蜂鳴器“鳴”
Delay(); //延時
Light_P&=~(1<<Light_Pin); //蜂鳴器“停”
Delay(); //延時
}
y=x;
}
if(Tdate[0]==Tdate2[0]&&Tdate[1]==Tdate2[1]&&Tdate[2]==Tdate2[2]&& //鬧鐘預設時間響
Ttime[0]==Ttime2[0]&&Ttime[1]==Ttime2[1]&&Ttime[2]==Ttime2[2])
{ for(t=0;t<15;t++) //鬧鐘
{ Light_P|=1<<Light_Pin; //蜂鳴器“鳴”
Delay(); //延時
Light_P&=~(1<<Light_Pin); //蜂鳴器“?!? Delay(); //延時
}
}
if(Key=='A') //彈出菜單
{
MENU: LcdShowString((unsigned char *)str1,11,1); //顯示菜單:1. Set Time;
LcdShowString((unsigned char *)str2,12,2); // 2. Set Alarm
Key=0;
while(1)
{ if(Key=='B') //返回
{ Key=0;
goto BEGING;
}
if(Key=='1') //選擇子菜單1
{ Lcdshow((unsigned char *)time);
LcdShowCursor(1,4); //光標初始位置(1,4),第一行第四列
k=1;l=1;
Key=0;
while(1)
{ if(Key=='#') //光標右移
{ ++k;
if(l%2==0) //現(xiàn)在光標在第一行
{ if(k==4||k==7) ++k;
if(k>9) k=0; //現(xiàn)在光標在末端
LcdShowCursor((1+l),(4+k));
}
else //現(xiàn)在光標在第二行
{ if(k==3||k==6) ++k;
if(k>8) k=1; //現(xiàn)在光標在末端
LcdShowCursor((1+l),(4+k));
}
Key=0;
}
if(Key=='*') //光標下移
{ ++l;
if(k==0) ++k; //現(xiàn)在光標在第一行始端
if(k==9) --k; //現(xiàn)在光標在第一行末端
if(l>1) l=0; //現(xiàn)在光標在第二行
LcdShowCursor((1+l),(4+k));
Key=0;
}
if(Key=='B')
{ Key=0;
goto MENU; //返回
}
if(Key=='D') //按下確定鍵
{ Key=0;
goto BEGING;
}
if(Key!=0&&Discriminant(Key))
{ Keyvalue=Key-0x30;
Transmission(Keyvalue,(unsigned char *) time,(1+l),(4+k));
Change(); //將數(shù)組time組合存儲到數(shù)組Tdate
Controle(); //控制時鐘的日期時間合法
Lcdshow((unsigned char *)time);
LcdShowCursor((1+l),(4+k));
Key=0;
}
}
}
if(Key=='2') //選擇子菜單2
{ LcdShowString((unsigned char *)str3,13,1); //顯示鬧鐘功能選擇:1. Open Alarm
LcdShowString((unsigned char *)str4,14,2); // 2. Close Alarm
Key=0;
if(Key=='1') //選擇1. Open Alarm
{ o=1; //開鬧鐘
Lcdshow((unsigned char *)alarm);
LcdShowCursor(2,5); //光標初始位置(2,5),第二行第五列
k=1;l=1;
Key=0;
while(1)
{ if(Key=='#') //光標右移
{ ++k;
if(l%2==0) //現(xiàn)在光標在第一行
{ if(k==4||k==7) ++k;
if(k>9) k=0; //現(xiàn)在光標在末端
LcdShowCursor((1+l),(4+k));
}
else //現(xiàn)在光標在第二行
{ if(k==3||k==6) ++k;
if(k>8) k=1; //現(xiàn)在光標在末端
LcdShowCursor((1+l),(4+k));
}
Key=0;
}
if(Key=='*') //光標下移
{ ++l;
if(k==0) ++k; //現(xiàn)在光標在第一行始端
if(k==9) --k; //現(xiàn)在光標在第一行末端
if(l>1) l=0; //現(xiàn)在光標在第二行
LcdShowCursor((1+l),(4+k));
Key=0;
}
if(Key=='B') //返回
{ Key=0;
goto MENU;
}
if(Key=='D') //確定
{ Key=0;
goto BEGING;
}
if(Key!=0&&Discriminant(Key))
{ Keyvalue=Key-0x30;
Transmission(Keyvalue,(unsigned char *) alarm,(1+l),(4+k));
Change2(); //將數(shù)組alarm組合存儲到數(shù)組Tdate2
Controle2(); //控制鬧鐘的日期時間合法
Lcdshow((unsigned char *)alarm);
LcdShowCursor((1+l),(4+k));
Key=0;
}
}
if(Key=='2') //選擇2. Close Alarm
{ o=0; //關鬧鐘
Key=0;
goto BEGING;
}
}
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -