目錄
具體實現功能
設計介紹
資料內容
全部內容
資料獲取
具體實現功能
具體功能:
(1)實時顯示當前時間(時、分、秒),LED模式指示燈亮;4個按鍵可以調整時間的時和分。
(2)具有24個打鈴時間。按下“打鈴+”和“打鈴-”按鍵可查看24個打鈴時間,模式指示燈滅,此時可通過4個按鍵調整打鈴時間的時和分,數據用24C02保存。
(3)打鈴時間到,蜂鳴器響10S。
仿真演示視頻:
基于51單片機的簡易打鈴系統-仿真視頻
設計介紹
51單片機簡介
51單片是一種低功耗、高性能CMOS-8位微控制器,擁有靈巧的8位CPU和可編程Flash,使得51單片機為眾多嵌入式控制應用系統提供靈活、高效的解決方案。
本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。
資料內容
仿真實現(protues8.7)
本設計利用protues8.7軟件實現仿真設計,具體如圖。
程序(Keil5)
本設計利用KEIL5軟件實現程序設計。
主函數如下:
///
//注意:當前日期不能亂改,DS1302容易報錯。
#include <reg52.h> //調用單片機頭文件
#include <intrins.h>
#include <ds1302.h>
#include <delay.h>
#include <i2c.h>
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535uchar code smgduan0[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//顯示0~9,無小數點
uchar code smgduan1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//顯示0~9,有小數點
uchar limit[48];
//P2為位選口
sbit sm1 =P2^0;//段選口
sbit sm2 =P2^1;
sbit sm3 =P2^2;
sbit sm4 =P2^3;
sbit sm5 =P2^4;
sbit sm6 =P2^5;
sbit led=P1^6;//指示燈
//按鈕
sbit key1=P3^3;//組-1
sbit key2=P3^4;//時+
sbit key3=P3^5;//時-
sbit key4=P3^6;//分+
sbit key5=P3^7;//分-
sbit key6=P3^2;//組+1sbit beep=P1^7;//蜂鳴器
//變量定義
uchar num=0;//組號
uchar flag=1;
//顯示
void xianshi()
{sm6=0;P0=smgduan0[(num)/10];sm1=1;delay_1ms(1);sm1=0;P0=smgduan1[(num)%10];sm2=1;delay_1ms(1);sm2=0;P0=smgduan0[limit[2*(num-1)]/10];sm3=1;delay_1ms(1);sm3=0;P0=smgduan1[limit[2*(num-1)]%10];sm4=1;delay_1ms(1);sm4=0;P0=smgduan0[limit[2*(num-1)+1]/10];sm5=1;delay_1ms(1);sm5=0;P0=smgduan0[limit[2*(num-1)+1]%10];sm6=1;delay_1ms(1);
}
void xian()//顯示當前時間
{sm6=0;P0=smgduan0[TIME[2]>>4];sm1=1;delay_1ms(1);sm1=0;P0=smgduan1[TIME[2]& 0x0f];sm2=1;delay_1ms(1);sm2=0;P0=smgduan0[TIME[1]>>4];sm3=1;delay_1ms(1);sm3=0;P0=smgduan1[TIME[1]& 0x0f];sm4=1;delay_1ms(1);sm4=0;P0=smgduan0[TIME[0]>>4];sm5=1;delay_1ms(1);sm5=0;P0=smgduan0[TIME[0]& 0x0f];sm6=1;delay_1ms(1);
}
//初始化讀取定時值
void init_read()
{uchar i,j,k;k=0;for(j=0;j<48;j=j+2){i=At24c02Read(j);if(i<24)limit[j]=i;elselimit[j]=k;i=At24c02Read(j+1);if(i<60)limit[j+1]=i;elselimit[j+1]=0;k++;}
}
//判斷時間,響鈴
void bell_if()
{uchar i,j,m,n;j=0;m=(TIME[2]>>4)*10+(TIME[2]&0X0F);n=(TIME[1]>>4)*10+(TIME[1]&0X0F);for(i=0;i<47;i=i+2){if((limit[i]==m)&&(limit[i+1]==n))j++;}if(j>0){if(TIME[0]<0X10)beep=0;elsebeep=1;}elsebeep=1;
}
//小時+1
void shi_jia()
{if(limit[2*(num-1)]<23)limit[2*(num-1)]++;elselimit[2*(num-1)]=0;At24c02Write(2*(num-1),limit[2*(num-1)]);
}
//小時-1
void shi_jian()
{if(limit[2*(num-1)]>0)limit[2*(num-1)]--;elselimit[2*(num-1)]=23;At24c02Write(2*(num-1),limit[2*(num-1)]);
}
//分鐘+1
void fen_jia()
{if(limit[2*(num-1)+1]<59)limit[2*(num-1)+1]++;elselimit[2*(num-1)+1]=0;At24c02Write(2*(num-1)+1,limit[2*(num-1)+1]);
}
//分鐘-1
void fen_jian()
{if(limit[2*(num-1)+1]>0)limit[2*(num-1)+1]--;elselimit[2*(num-1)+1]=59;At24c02Write(2*(num-1)+1,limit[2*(num-1)+1]);
}
/***************主函數*****************/
void main()
{uchar k=0,m=0;beep=1;init_read();//初始化Ds1302ReadTime();TIME[0]&=0X7F;Ds1302Init();
while(1){led=!flag;//點亮指示燈if(!key6 &&(k!=6))//組號+1{k=6;flag=0;if(num<24)num++;}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();//讀取時間bell_if();//響鈴if(flag==0)xianshi();//顯示elsexian();}
}
程序運行結果如圖:
全部內容
全部資料包括程序(keil5)、protues仿真(protues8.7)、設計說明、答辯PPT、開發資料、資料使用介紹、仿真視頻、最小系統介紹視頻等。
資料獲取
https://docs.qq.com/doc/DT1V6aW9NZFVWcmVr