您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于PSOC3的自动报时系统(时钟)
基于PSOC3的自动报时系统.功能:可以调时、计时。显示日期,时间。还具有闹钟功能。整点报时原理图如下:引脚分配:P2是LCD的接口。Pin_3\Pin_4是两个按钮。Pin_1是蜂鸣器。Mian.c的程序如下:#includedevice.huint8StatusRegister;uint8InterruptCnt;uint8secl,sech,minl,minh,houl,houh,a_secl=9,a_sech=5,a_minl=9,a_minh=5,a_houl=3,a_houh;uint16sec=50,min=59,hou=3,day=1,mon=1,yea=2013,a_sec=0,a_min=0,a_hou=0;uint8my_mode=0;flag=0;char*alarmclock_state=OFF;uint8alarmclock_other_flag=0;uint8alarmclock_flag1=0,alarmclock_flag2=0,alarmclock_flag3=0;uint8blank_flag=0;uint8test_flag=0;uint8mode0_flag=0;uint8baoshi_flag=0;uint8baoshi_cishu=0;uint8cnt=0;uint8alarm_bee_flag=0;CY_ISR(TT1){test_flag++;my_mode=0;if(alarm_bee_flag==1){Pin_1_Write(0);alarm_bee_flag=0;}alarmclock_flag2=0;alarmclock_flag3=0;alarmclock_state=OFF;mode0_flag=0;}CY_ISR(MY_I){if((a_houh==(hou/10))&&(a_houl==(hou%10))&&(a_minh==(min/10))&&(a_minl==(min%10))&&(a_sech==(sec/10))&&(a_secl==(sec%10))&&(alarmclock_flag1==1)){alarm_bee_flag=1;}if(alarm_bee_flag==1){Pin_1_Write(1);}if(baoshi_flag==1){cnt++;if(cnt2){Pin_1_Write(1);}if(cnt2){Pin_1_Write(0);}if(cnt==4){cnt=0;baoshi_cishu--;if(baoshi_cishu==0){baoshi_flag=0;}}}else{baoshi_flag=0;}StatusRegister=Timer_1_ReadStatusRegister();InterruptCnt++;if(InterruptCnt==2){InterruptCnt=0;sec++;if(sec==60){sec=0;min++;if(min==60){hou++;min=0;if(hou==24){{hou=0;day++;if(day==29){if(~((yea/4==0&&yea/100!=0)||(yea/400==0))&&(mon==2)){day=0;mon++;}}if(day==31){if(~((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))){day=0;mon++;}}if(day==32){day=0;mon++;}if(mon==13){yea++;}}}}}if((min==0)&&(sec==0)){baoshi_flag=1;baoshi_cishu=hou;}}}CY_ISR(B_b){if(my_mode==0){mode0_flag++;if(mode0_flag==15){mode0_flag=0;}}if(my_mode==1){if(alarmclock_flag3==0){alarmclock_flag1++;if(alarmclock_flag1==2){alarmclock_flag1=0;}if(alarmclock_flag1==1){alarmclock_flag2++;if(alarmclock_flag2==2){alarmclock_flag2=0;}}}else{switch(alarmclock_flag3){case1:a_houh++;if(a_houh==3){a_houh=0;};break;case2:a_houl++;if(a_houl==10){a_houl=0;};break;case3:a_minh++;if(a_minh==6){a_minh=0;};break;case4:a_minl++;if(a_minl==10){a_minl=0;};break;case5:a_sech++;if(a_sech==6){a_sech=0;};break;case6:a_secl++;if(a_secl==10){a_secl=0;};break;default:break;}}}}CY_ISR(B_a){if((my_mode==0)&&(mode0_flag!=0)){switch(mode0_flag){case14:hou=hou+10;if(hou24){hou=0;};break;case13:hou++;if(hou24){hou=0;};break;case12:min=min+10;if(min=60){min=0;};break;case11:min++;if(min=60){min=0;};break;case10:sec=sec+10;if(sec=60){sec=0;};break;case9:sec++;if(sec=60){sec=0;};break;case8:yea=yea+1000;if(yea=10000){yea=0;};break;case7:yea=yea+100;break;case6:yea=yea+10;break;case5:yea=yea++;break;case4:mon=mon+10;break;case3:mon++;break;case2:day=day+10;break;case1:day++;break;default:break;}}if((alarmclock_flag2==0)&&(mode0_flag==0)){my_mode=my_mode+1;if(my_mode==2){my_mode=0;}}if(alarmclock_flag2==1){alarmclock_flag3++;if(alarmclock_flag3==7){alarmclock_flag3=0;}}}voidmain(){CyGlobalIntEnable;ButtonISR_Start();ButtonISR_Disable();ButtonISR1_Start();ButtonISR1_Disable();TimerISR_Start();TimerISR_Disable();TimerISR_1_Start();TimerISR_1_Disable();ButtonISR_SetVector(B_a);ButtonISR_Enable();ButtonISR1_SetVector(B_b);ButtonISR1_Enable();TimerISR_SetVector(MY_I);TimerISR_Enable();TimerISR_1_SetVector(TT1);TimerISR_1_Enable();clock_1_Enable();clock_2_Enable();Timer_1_Start();Timer_2_Start();LCD_Start();Pin_1_Write(0);for(;;){LCD_Position(0,15);LCD_PrintNumber(cnt);switch(my_mode){case0:if(mode0_flag==0){LCD_Position(0,0);LCD_PrintString(Time:);LCD_Position(0,5);LCD_PrintString();LCD_Position(0,6);LCD_PrintNumber(hou/10);LCD_Position(0,7);LCD_PrintNumber(hou%10);LCD_Position(0,8);LCD_PrintString(-);LCD_Position(0,9);LCD_PrintNumber(min/10);LCD_Position(0,10);LCD_PrintNumber(min%10);LCD_Position(0,11);LCD_PrintString(-);LCD_Position(0,12);LCD_PrintNumber(sec/10);LCD_Position(0,13);LCD_PrintNumber(sec%10);LCD_Position(0,14);LCD_PrintString();LCD_Position(1,0);LCD_PrintString(Date:);LCD_Position(1,5);LCD_PrintString();LCD_Position(1,6);LCD_PrintNumber(yea/1000);LCD_Position(1,7);LCD_PrintNumber((yea%1000)/100);LCD_Position(1,8);LCD_PrintNumber(((yea%1000)%100)/10);LCD_Position(1,9);LCD_PrintNumber(((yea%1000)%100)%10);LCD_PrintString(-);LCD_Position(1,11);LCD_PrintNumber(mon/10);LCD_Position(1,12);LCD_PrintNumber(mon%10);LCD_Position(1,13);LCD_PrintString(-);LCD_Position(1,15);LCD_PrintString();LCD_Position(1,14);LCD_PrintNumber(day/10);LCD_Position(1,15);LCD_PrintNumber(day%10);}if(mode0_flag==14){LCD_Position(0,0);LCD_PrintString(Time:);LCD_Position(0,5);LCD_PrintString();LCD_Position(0,6);if(InterruptCnt==0){LCD_PrintString();}else{LCD_PrintNumber(hou/10);}LCD_Position(0,7);LCD_PrintNumber(hou%10);LCD_Position(0,8);LCD_PrintString(-);LCD_Position(0,9);LCD_PrintNumber(min/10);LCD_Position(0,10);LCD_PrintNumber(min%10);LCD_Position(0,11);LCD_PrintString(-);LCD_Position(0,12);LCD_PrintNumber(sec/10);LCD_Position(0,13);LCD_PrintNumber(sec%10);LCD_Position(0,14);LCD_PrintString();LCD_Position(1,0);LCD_PrintString(Date:);LCD_Position(1,5);LCD_PrintStrin
本文标题:基于PSOC3的自动报时系统(时钟)
链接地址:https://www.777doc.com/doc-5646081 .html