?? 打鈴系統.txt
字號:
case 13:
LCD_WriteStr(1,1,"修改時間");
LCD_WriteStr(2,2,"請注意?。。?quot;);
while(ZLG7290_GetKey()!=8)
{
ZLG7290_SendCmd(Glitter_COM, 0x03);
while(ZLG7290_GetKey()==0);
if(ZLG7290_GetKey()==13)
{
delay(100);
time1.date=time1.date+1;
if(time1.date>31)
time1.date=0;
}
ZLG7290_Download(0,0,0,time1.date%10);
ZLG7290_Download(0,0,1,time1.date/10);
}
ZLG7290_SendCmd(Glitter_COM, 0x00);
LCD_WriteStr(1,1,"修改完畢");
LCD_WriteStr(2,2,"確認修改時間");
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
break;
case 12:
LCD_WriteStr(1,1,"修改時間");
LCD_WriteStr(2,2,"請注意!!!");
while(ZLG7290_GetKey()!=8)
{
ZLG7290_SendCmd(Glitter_COM, 0x0C);
while(ZLG7290_GetKey()==0);
if(ZLG7290_GetKey()==12)
{
delay(100);
time1.month=time1.month+1;
if(time1.month>12)
time1.month=0;
}
ZLG7290_Download(0,0,2,time1.month%10);
ZLG7290_Download(0,0,3,time1.month/10);
}
ZLG7290_Download(0,0,2,0x1f);
ZLG7290_SendCmd(Glitter_COM, 0x00);
LCD_WriteStr(1,1,"修改完畢");
LCD_WriteStr(2,2,"確認修改時間");
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
break;
case 11:
LCD_WriteStr(1,1,"修改時間");
LCD_WriteStr(2,2,"請注意?。?!");
while(ZLG7290_GetKey()!=8)
{
ZLG7290_SendCmd(Glitter_COM, 0xF0);
while(ZLG7290_GetKey()==0);
if(ZLG7290_GetKey()==11)
{
delay(1000);
time1.year=time1.year+1;
}
ZLG7290_Download(0,0,4,(time1.year%100)%10);
ZLG7290_Download(0,0,5,(time1.year%100)/10);
ZLG7290_Download(0,0,6,(time1.year%1000)/10);
ZLG7290_Download(0,0,7,time1.year/1000);
}
ZLG7290_Download(0,0,5,0x1f);
ZLG7290_SendCmd(Glitter_COM, 0x00);
LCD_WriteStr(1,1,"修改完畢");
LCD_WriteStr(2,2,"確認修改時間");
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
break;
case 10:
LCD_WriteStr(1,1,"修改時間");
LCD_WriteStr(2,2,"請注意!??!");
while(ZLG7290_GetKey()!=8)
{
ZLG7290_SendCmd(Glitter_COM, 0xF0);
while(ZLG7290_GetKey()==0);
if(ZLG7290_GetKey()==10)
{
delay(100);
time1.year=time1.year-1;
}
ZLG7290_Download(0,0,4,(time1.year%100)%10);
ZLG7290_Download(0,0,5,(time1.year%100)/10);
ZLG7290_Download(0,0,6,(time1.year%1000)/10);
ZLG7290_Download(0,0,7,time1.year/1000);
}
ZLG7290_Download(0,0,5,0x1f);
ZLG7290_SendCmd(Glitter_COM, 0x00);
LCD_WriteStr(1,1,"修改完畢");
LCD_WriteStr(2,2,"確認修改時間");
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
break;
case 9:
while(ZLG7290_GetKey()!=8)
{
ZLG7290_SendCmd(Glitter_COM, 0xF0);
while(ZLG7290_GetKey()==0);
if(ZLG7290_GetKey()==9)
{
time1.year=time1.year-1;
year3=time1.year/1000;
year2=(time1.year%1000)/100;
year1=(time1.year%100)/10;
year0=(time1.year%100)%10;
}
ZLG7290_Download(0,0,4,year0);
ZLG7290_Download(0,0,5,year1);
ZLG7290_Download(0,0,6,year2);
ZLG7290_Download(0,0,7,year3);
}
ZLG7290_Download(0,0,5,0x1f);
ZLG7290_SendCmd(Glitter_COM, 0x00);
break;
default:
break;
}
}
void Timer0A_ISR(void)
{
TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定時器0中斷
//GPIOPinWrite(GPIO_PORTD_BASE, LED1,GPIOPinRead(GPIO_PORTD_BASE, LED1) ^ LED1);
//TimerLoadSet(TIMER1_BASE, TIMER_A, 1);
TimerEnable(TIMER0_BASE, TIMER_A);
time1.second++;
if(time1.second>59)
{
time1.minute++;
time1.second=0;
}
if(time1.minute>59)
{
time1.minute=0;
time1.hour++;
}
if(time1.hour>23)
{
time1.hour=0;
time1.date++;
}
if( time1.month==2&&(time1.year%4)==0&&time1.date>28)
{
time1.date=0;
time1.month++;
}
if( time1.month==2&&(time1.year%4)!=0&&time1.date>29)
{
time1.date=0;
time1.month++;
}
if((time1.month==1|time1.month==3|time1.month==5|time1.month==7|time1.month==8|time1.month==10|time1.month==12)&&time1.date>31)
{
time1.date=0;
time1.month++;
}
if((time1.month==4|time1.month==6|time1.month==9|time1.month==11)&&time1.date>30)
{
time1.date=0;
time1.month++;
}
if(time1.month>12)
{
time1.year++;
}
SSIDataPut(SSI_BASE, time1.second%10);
delay(20); // 輸出后延時一段時間
}
void judg(unsigned int jjj)
{
if((jjj<tim[0].value)||(jjj>tim[num].value))
{ p=tim;
ALHOUR=(tim[0].value)/100;
ALMIN=(tim[0].value)%100;
ALSEC=0;
}
if((jjj>(tim[0].value))&&(jjj<(tim[num].value)))
{ p=tim;
for(p;p<(&tim[200]);p++)
{
if(((p->value)<jjj)&&(jjj<((p+1)->value)))
{
p=p+1;
ALHOUR=(p->value)/100;
ALMIN=(p->value)%100;
ALSEC=0;
break;
}
}
}
}
void IRQ_RTC(void)
{
if((time1.hour==ALHOUR)&&(time1.minute==ALMIN)&&(time1.second==ALSEC))
{ GPIODirModeSet(GPIO_PORTA_BASE, beepcon, GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTA_BASE,beepcon, 0);
/* if(time1.minute%20==0)
{
LCD_WriteStr(1,1,"打鈴啦!");
LCD_WriteStr(2,2,"下課!!?。?quot;);
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
}
else
{
LCD_WriteStr(1,1,"打鈴啦!");
LCD_WriteStr(2,1,"請注意:上課!");
delay(1000);
LCD_WriteStr(1,1,"大家好!");
LCD_WriteStr(2,2,"時鐘運行中!");
}*/
p++;
if((p>&tim[199])||(p->value==0))
{
p=tim;
}
ALSEC =0;
ALMIN = (p->value)%100;
ALHOUR = (p->value)/100;
}
}
void ADCInit(void) //assumed that LM3S811 rev C was used
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC時鐘
// 配置ADC的采樣速率為500kps
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_500KSPS );
ADCSequenceDisable(ADC_BASE, 0); // 禁止采樣序列發生器
// 配置采樣序列的觸發源和優先級
ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 1);
// 配置采樣序列發生器的步進
ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_TS);
ADCSequenceStepConfigure(ADC_BASE, 0, 1, ADC_CTL_TS | ADC_CTL_END);
ADCSequenceEnable(ADC_BASE, 0); //使能采樣序列中斷
}
int main(void)
{ unsigned char key;
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ); // 設置晶振為時鐘源。
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定時器0外設
IntRegister(INT_TIMER0A,Timer0A_ISR);
IntMasterEnable();
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI);
SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth);
SSIEnable(SSI_BASE);
GPIODirModeSet(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |
GPIO_PIN_5), GPIO_DIR_MODE_HW);
// 配置相關引腳,以進行I2C操作,初始化LED指示燈。
GPIODirModeSet(GPIO_PORTD_BASE, SDA | SCL | CS , GPIO_DIR_MODE_OUT);
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER); // 設置定時器0為單次觸發模式
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()); // 設置定時器裝載值:定時1/2秒
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT); // 設置定時器為溢出中斷
TimerEnable(TIMER0_BASE, TIMER_A); // 使能定時器0
IntEnable(INT_TIMER0A); // 使能定時器0外設
GPIODirModeSet(GPIO_PORTD_BASE,LED1,GPIO_DIR_MODE_OUT);
IntPrioritySet(INT_TIMER1A,0x00);
IntPrioritySet(INT_I2C,0x10);
I2CInit(100000, 1); // 初始化I2C驅動
ADCInit();
time1.year = 2007;
time1.month = 4;
time1.date = 13;
time1.hour=8;
time1.minute=19;
time1.second=58;
p=tim;
ALSEC =0;
ALMIN = (p->value)%100;
ALHOUR = (p->value)/100;
GPIOPinWrite(GPIO_PORTA_BASE,beepcon, beepcon);
//開始送數據
lcdInit();
delayss(5);
LCD_WriteStr(1,1,"大家好!");
delay(2);
while(1)
{
ZLG7290_Download(0,0,0,(time1.second%10));
ZLG7290_Download(0,0,1,(time1.second/10));
ZLG7290_Download(0,0,3,(time1.minute%10));
ZLG7290_Download(0,0,4,(time1.minute/10));
ZLG7290_Download(0,0,6,(time1.hour%10));
ZLG7290_Download(0,0,7,(time1.hour/10));
ZLG7290_SegOnOff(22,1);
ZLG7290_SegOnOff(46,1);
key=ZLG7290_GetKey();
keyvalue(key);
IRQ_RTC();
if(time1.second==2)
{
GPIODirModeSet(GPIO_PORTA_BASE, beepcon, GPIO_DIR_MODE_OUT);
GPIOPinWrite(GPIO_PORTA_BASE,beepcon, beepcon);
GPIODirModeSet(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 |
GPIO_PIN_5), GPIO_DIR_MODE_HW);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -