?? main.c.bak
字號(hào):
/*
*********************************************************************************************************
XX電子實(shí)業(yè)有限公司技術(shù)部
版權(quán)所有(c)2006.12.16--2006.12.18
http://www.XX.cn
********************************************************************************************************
文件 名:main.C
創(chuàng)建 人:許 文
創(chuàng)建日期:2008.05.29
版 本:萬年歷V01
描 述:
========================================================================================================
修改 人:
修改時(shí)間:
版 本:
描 述:
*********************************************************************************************************
*/
#include "config.h"
#define BUZZER 1 << 7 // P0.7控制蜂鳴器,低電平蜂鳴
#define BUZZER_Set() PINSEL0 &= (~(INT32U)(1 << 7)), IO0DIR|=(1<<7),IO0CLR|=(1<<7) // 開蜂鳴器
#define BUZZER_Clr() IO0SET|=(1<<7)
#define TASKKEY_STACK_SIZE 256 /* TaskKey定義用戶堆棧長(zhǎng)度 */
#define TASKDISP_STACK_SIZE 128 /* TaskDisp定義用戶堆棧長(zhǎng)度 */
#define TASKSET_STACK_SIZE 128 /* TaskSet定義用戶堆棧長(zhǎng)度 */
static OS_EVENT *KeyBox;
static OS_EVENT *RtcBox;
OS_STK TASKKEY_STACK[TASKKEY_STACK_SIZE];
OS_STK TASKDISP_STACK[TASKDISP_STACK_SIZE];
OS_STK TASKSET_STACK[TASKSET_STACK_SIZE];
#define KEY1 1 << 16 /* P0.16為KEY1輸入腳 */
#define KEY2 1 << 17 /* P0.17為KEY2輸入腳 */
#define KEY3 1 << 18 /* P0.18為KEY3輸入腳 */
#define KEY4 1 << 19 /* P0.19為KEY3輸入腳 */
uint8 const SHOWTABLE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void TaskKey(void *pdata);
void TaskDisp(void *pdata);
void TaskSet(void *pdata);
/*
*********************************************************************************************************
* Function name: rtcException
* Descriptions: RTC的中斷服務(wù)函數(shù)
* Input parameters: 無
* Output parameters: 無
*********************************************************************************************************
*/
void rtcException(void)
{
static INT32U time[2];
ILR |= 0x01; /* 清除RTC增量中斷標(biāo)志 */
time[0] = CTIME0;
time[1] = CTIME1;
OSMboxPost(RtcBox,(void*)time);
VICVectAddr = 0; /* 通知中斷控制器中斷結(jié)束 */
}
/*
*********************************************************************************************************
* Function name: gpioInit
* Descriptions: GPIO的初始化
* Input parameters: 無
* Output: 無
*********************************************************************************************************
*/
void gpioInit(void)
{
PINSEL0 &= (~(uint32)(1 << 7));
IO0DIR|=(1<<7);
IO0SET|=(1<<7);
}
/*
*******************************************************************************************************
* Function name: rtcInit
* Descriptions: 按照默認(rèn)值初始化實(shí)時(shí)時(shí)鐘.RTC被初始化為時(shí)鐘源選擇Fpclk,秒值增加一次后產(chǎn)生中斷.
* Input parameters: time:初始化時(shí)間指針
* Output: 無
*******************************************************************************************************
*/
void rtcInit(uint16 *time)
{
PREINT = Fpclk / 32768 - 1; // 設(shè)置基準(zhǔn)時(shí)鐘分頻器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
CCR = 0x00; // 禁止時(shí)間計(jì)數(shù)器
YEAR = time[0]; /* 初始化時(shí)間寄存器 */
MONTH = time[1];
DOM = time[2];
DOW = time[3];
HOUR = time[4];
MIN = time[5];
SEC = time[6];
CIIR = 0x01; // 設(shè)置秒值的增量產(chǎn)生一次中斷
ILR = 0x03; // 清除RTC增量和報(bào)警中斷標(biāo)志
CCR = 0x01; // 啟動(dòng)RTC
VICVectAddr0 = (INT32U)rtcException; // 設(shè)置中斷服務(wù)程序地址
VICIntEnable = (1 << 13); // 使能RTC中斷
}
/*********************************************************************************************************
** Function name: keyIn
** Descriptions: 查詢按鍵的輸入
** Input parameters: 無
** Returned value: 有效鍵按下時(shí),返回對(duì)應(yīng)的鍵值,否則返回0;
********************************************************************************************************/
INT32U keyIn(void)
{
INT32U i,uiKey;
uiKey = KEY1;
for (i=1;i<5;i++) {
if ((uiKey&IO0PIN) == 0) {
break;
} else {
uiKey<<=1;
}
}
if (i >=5 ) {
uiKey = 0;
}
return uiKey;
}
/*******************************************************************************************
** Function name: timeDisp
** Descriptions: 將RTC的數(shù)據(jù)發(fā)送到PC機(jī)上顯示
** Input parameters: uiTimes RTC的CTIME0的值
uiDates RTC的CTIME1的值
** Output parameters: 無
*******************************************************************************************/
void timeDisp(INT32U uiTimes,INT32U uiDates)
{
INT32U uiTimedata;
uiTimedata = (uiDates >> 16) & 0xfff; /* 發(fā)送年 */
pcDispChar(0, SHOWTABLE[uiTimedata / 1000]);
uiTimedata = uiTimedata % 1000;
pcDispChar(1, SHOWTABLE[uiTimedata / 100]);
uiTimedata = uiTimedata % 100;
pcDispChar(2, SHOWTABLE[uiTimedata / 10]);
pcDispChar(3, SHOWTABLE[uiTimedata % 10]);
uiTimedata = (uiDates >> 8) & 0x0f; /* 發(fā)送月 */
pcDispChar(4, SHOWTABLE[uiTimedata / 10]);
pcDispChar(5, SHOWTABLE[uiTimedata % 10]);
uiTimedata = uiDates & 0x1f; /* 發(fā)送日 */
pcDispChar(6, SHOWTABLE[uiTimedata / 10]);
pcDispChar(7, SHOWTABLE[uiTimedata % 10]);
uiTimedata = (uiTimes >> 24) & 0x07; /* 發(fā)送星期 */
pcDispChar(8, SHOWTABLE[uiTimedata]);
uiTimedata = (uiTimes >> 16) & 0x1f; /* 發(fā)送小時(shí) */
pcDispChar(9, SHOWTABLE[uiTimedata / 10]);
pcDispChar(10, SHOWTABLE[uiTimedata % 10]);
uiTimedata = (uiTimes >> 8) & 0x3f; /* 發(fā)送分鐘 */
pcDispChar(11, SHOWTABLE[uiTimedata / 10]);
pcDispChar(12, SHOWTABLE[uiTimedata % 10]);
uiTimedata = uiTimes & 0x3f; /* 發(fā)送秒鐘 */
pcDispChar(13, SHOWTABLE[uiTimedata / 10]);
pcDispChar(14, SHOWTABLE[uiTimedata % 10]);
}
/*******************************************************************************************
** Function name: timeGet
** Descriptions: 根據(jù)輸入的編號(hào),獲得對(duì)應(yīng)編號(hào)的數(shù)據(jù)位的值。
** Input parameters: n PC的萬年歷窗口中時(shí)間數(shù)據(jù)位對(duì)應(yīng)的編號(hào)。
** Output parameters: 無
** Returned value: 輸入編號(hào)對(duì)應(yīng)的時(shí)間數(shù)據(jù)位的值
*******************************************************************************************/
INT32U timeGet(INT32U n)
{
INT32U uiTimedata,uiTimes,uiDates;
uiTimes = (INT32U)CTIME0; /* 讀取完整的時(shí)鐘寄存器 */
uiDates = (INT32U)CTIME1;
switch(n) {
case 0:
uiTimedata = (uiDates >> 16) & 0xfff; /* 獲取年的千位數(shù)據(jù) */
uiTimedata = uiTimedata / 1000;
break;
case 1:
uiTimedata = (uiDates >> 16) & 0xfff; /* 獲取年的百位數(shù)據(jù) */
uiTimedata = uiTimedata % 1000;
uiTimedata = uiTimedata / 100;
break;
case 2: /* 獲取年的十位數(shù)據(jù) */
uiTimedata = (uiDates >> 16) & 0xfff;
uiTimedata = uiTimedata % 100;
uiTimedata = uiTimedata / 10;
break;
case 3: /* 獲取年的個(gè)位數(shù)據(jù) */
uiTimedata = (uiDates >> 16) & 0xfff;
uiTimedata = uiTimedata % 10;
break;
case 4:
uiTimedata = (uiDates >> 8) & 0x0f; /* 獲取月的十位數(shù)據(jù) */
uiTimedata = uiTimedata / 10;
break;
case 5:
uiTimedata = (uiDates >> 8) & 0x0f; /* 獲取月的個(gè)位數(shù)據(jù) */
uiTimedata = uiTimedata % 10;
break;
case 6:
uiTimedata = uiDates & 0x1f; /* 獲取日的十位數(shù)據(jù) */
uiTimedata = uiTimedata / 10;
break;
case 7:
uiTimedata = uiDates & 0x1f; /* 獲取日的個(gè)位數(shù)據(jù) */
uiTimedata = uiTimedata % 10;
break;
case 8:
uiTimedata = (uiTimes >> 24) & 0x07; /* 獲取星期數(shù) */
break;
case 9:
uiTimedata = (uiTimes >> 16) & 0x1f; /* 獲取小時(shí)的十位數(shù)據(jù) */
uiTimedata = uiTimedata / 10;
break;
case 10:
uiTimedata = (uiTimes >> 16) & 0x1f; /* 獲取小時(shí)的個(gè)位數(shù)據(jù) */
uiTimedata = uiTimedata % 10;
break;
case 11:
uiTimedata = (uiTimes >> 8) & 0x3f; /* 獲取分鐘的十位數(shù)據(jù) */
uiTimedata = uiTimedata / 10;
break;
case 12:
uiTimedata = (uiTimes >> 8) & 0x3f; /* 獲取分鐘的個(gè)位數(shù)據(jù) */
uiTimedata = uiTimedata % 10;
break;
case 13:
uiTimedata = uiTimes & 0x3f; /* 獲取秒鐘的十位數(shù)據(jù) */
uiTimedata = uiTimedata / 10;
break;
case 14:
uiTimedata = uiTimes & 0x3f; /* 獲取秒鐘的個(gè)位數(shù)據(jù) */
uiTimedata = uiTimedata % 10;
break;
}
return uiTimedata;
}
/*******************************************************************************************
** Function name: timeSet
** Descriptions: 根據(jù)輸入的編號(hào),設(shè)置對(duì)應(yīng)編號(hào)的時(shí)間數(shù)據(jù)位的值。
** Input parameters: n PC的萬年歷窗口中時(shí)間數(shù)據(jù)位對(duì)應(yīng)的編號(hào)。
uiTimedata 對(duì)應(yīng)的數(shù)據(jù)位變化的值,如:+1,-1
** Output parameters: 無
** Returned value: 無
*******************************************************************************************/
void timeSet(INT32U n,INT32S uiTimedata)
{
switch(n) {
case 0: /* 設(shè)置年的千位數(shù)據(jù) */
YEAR += (INT32S)(uiTimedata*1000);
break;
case 1:
YEAR += (INT32S)(uiTimedata*100);
break;
case 2:
YEAR += (INT32S)(uiTimedata*10);
break;
case 3:
YEAR += uiTimedata;
break;
case 4:
MONTH += (INT32S)(uiTimedata*10); /* 設(shè)置月 */
break;
case 5:
if ((MONTH == 12) && (uiTimedata == 1)) {
MONTH = 1;
} else if ((MONTH ==1) && (uiTimedata ==-1)) {
MONTH = 12;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -