目錄
具體實現功能
設計介紹
資料內容
全部內容
資料獲取
具體實現功能
具體功能:
(1)實時顯示當前時間(年月日時分秒星期),LED模式指示燈亮。
(2)按下“打鈴+”和“打鈴-”按鍵可查看24個打鈴時間,模式指示燈滅,此時可通過4個按鍵調整打鈴時間的時和分。
(3)打鈴時間到,可實現蜂鳴器響、播放音樂(1分鐘)、打開/關閉宿舍燈、路燈、教學樓燈等功能(詳見打鈴時間表)。
仿真演示視頻:
基于51單片機的校園打鈴及燈控制系統-仿真視頻
設計介紹
51單片機簡介
51單片是一種低功耗、高性能CMOS-8位微控制器,擁有靈巧的8位CPU和可編程Flash,使得51單片機為眾多嵌入式控制應用系統提供靈活、高效的解決方案。
本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。
資料內容
仿真實現(protues8.7)
本設計利用protues8.7軟件實現仿真設計,具體如圖。
程序(Keil5)
本設計利用KEIL5軟件實現程序設計。
主函數如下:
///
/***************主函數*****************/
void main()
{uchar k=0,m=0;uchar week=0;beep=1;init_read();//初始化Ds1302ReadTime();TIME[0]&=0X7F;Ds1302Init(); lcd_init(); //調用液晶屏初始化子函數InitialSound();led1=0; //打開LCD的背光電源led4=0;led3=0;led2=0;limit[0]=7;limit[1]=40;limit[2]=8;limit[3]=10;limit[4]=8;limit[5]=25;limit[6]=9;limit[7]=10; limit[8]=9;limit[9]=20; limit[10]=10;limit[11]=5;limit[12]=10;limit[13]=25; limit[14]=11;limit[15]=10;limit[16]=11;limit[17]=20; limit[18]=12;limit[19]=5;limit[20]=14;limit[21]=20; limit[22]=14;limit[23]=30;limit[24]=15;limit[25]=15;limit[26]=15;limit[27]=25;limit[28]=16;limit[29]=10;limit[30]=16;limit[31]=30; limit[32]=17;limit[33]=15;limit[34]=17;limit[35]=25;limit[36]=18;limit[37]=10;limit[38]=19;limit[39]=20;limit[40]=19;limit[41]=30;limit[42]=21;limit[43]=10;limit[44]=21;limit[45]=40;limit[46]=23;limit[47]=00;while(1){led1=1; led=!flag;//點亮指示燈if(!key6 &&(k!=6))//組號+1{k=6;flag=0;if(num<25)num++;if(num==25){num=0;flag=1;//顯示當前時間}}if(!key1 &&(k!=1))//組號-1{k=1;if(num>1)num--;else{flag=1;//顯示當前時間}}if(!key2 &&(k!=2))//時+1{k=2;if(led)shi_jia();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m<23)m++;elsem=0;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key3 &&(k!=3))//時-1{k=3;if(led)shi_jian();else{m=(TIME[2]>>4)*10+(TIME[2]&0X0F);if(m>0)m--;elsem=23;TIME[2]=(m/10<<4)+m%10;Ds1302Init();}}if(!key4 &&(k!=4))//分+1{if(led)fen_jia();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m<59)m++;elsem=0;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=4;}if(!key5 &&(k!=5))//分-1{if(led)fen_jian();else{m=(TIME[1]>>4)*10+(TIME[1]&0X0F);if(m>0)m--;elsem=59;TIME[1]=(m/10<<4)+m%10;Ds1302Init();}k=5;}if(P3==0xff)k=0;Ds1302ReadTime();//讀取時間if(flag==0){if(num==1){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[0]);//時write_sfm(6,limit[1]);//分}else if(num==2){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[2]);//時write_sfm(6,limit[3]);//分 }else if(num==3){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[4]);//時write_sfm(6,limit[5]);//分 }else if(num==4){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[6]);//時write_sfm(6,limit[7]);//分 }else if(num==5){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[8]);//時write_sfm(6,limit[9]);//分 }else if(num==6){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[10]);//時write_sfm(6,limit[11]);//分 }else if(num==7){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[12]);//時write_sfm(6,limit[13]);//分 }else if(num==8){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[14]);//時write_sfm(6,limit[15]);//分 }else if(num==9){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[16]);//時write_sfm(6,limit[17]);//分 }else if(num==10){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[18]);//時write_sfm(6,limit[19]);//分 }else if(num==11){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[20]);//時write_sfm(6,limit[21]);//分 }else if(num==12){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[22]);//時write_sfm(6,limit[23]);//分 }else if(num==13){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[24]);//時write_sfm(6,limit[25]);//分 }else if(num==14){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[26]);//時write_sfm(6,limit[27]);//分 }else if(num==15){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[28]);//時write_sfm(6,limit[29]);//分 }else if(num==16){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[30]);//時write_sfm(6,limit[31]);//分 }else if(num==17){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[32]);//時write_sfm(6,limit[33]);//分 }else if(num==18){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[34]);//時write_sfm(6,limit[35]);//分 }else if(num==19){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[36]);//時write_sfm(6,limit[37]);//分 }else if(num==20){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[38]);//時write_sfm(6,limit[39]);//分 }else if(num==21){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[40]);//時write_sfm(6,limit[41]);//分 }else if(num==22){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[42]);//時write_sfm(6,limit[43]);//分 }else if(num==23){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[44]);//時write_sfm(6,limit[45]);//分 }else if(num==24){write_sfm(0,num);//鬧鐘編號write_sfm(3,limit[46]);//時write_sfm(6,limit[47]);//分 }else{;}}else{write_sfm(6,(TIME[0]>>4)*10+(TIME[0]& 0x0f));//秒,從第二行第8個字后開始顯示(調用時分秒顯示子函數)write_sfm(3,(TIME[1]>>4)*10+(TIME[1]& 0x0f));//分,從第二行第5個字符后開始顯示write_sfm(0,(TIME[2]>>4)*10+(TIME[2]& 0x0f));//小時,從第二行第2個字符后開始顯示//顯示日、月、年數據:write_nyr(9,(TIME[3]>>4)*10+(TIME[3]& 0x0f));//日期,從第二行第9個字符后開始顯示write_nyr(6,(TIME[4]>>4)*10+(TIME[4]& 0x0f));//月份,從第二行第6個字符后開始顯示write_nyr(3,(TIME[6]>>4)*10+(TIME[6]& 0x0f));//年,從第二行第3個字符后開始顯示week = (TIME[5]>>4)*10+(TIME[5]& 0x0f)-1;if(week>=7){week=1;}if(week<1){week=7;}write_nyr(12,week);//日期,從第二行第9個字符后開始顯示}bell_if();//響鈴}
}
程序運行結果如圖:
全部內容
全部資料包括程序(keil5)、protues仿真(protues8.7)、設計說明、答辯PPT、開發資料、資料使用介紹、仿真視頻、最小系統介紹視頻等。
資料獲取
https://docs.qq.com/doc/DT2NwdVByRkRTWXNP