51單片機(jī)音樂鬧鐘秒表倒計(jì)時(shí)整點(diǎn)報(bào)時(shí)多功能電子鐘萬年歷數(shù)碼管顯示( proteus仿真+程序+原理圖+報(bào)告+講解視頻)
仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設(shè)計(jì)編號:S0053
講解視頻
51單片機(jī)音樂鬧鐘秒表倒計(jì)時(shí)整點(diǎn)報(bào)時(shí)多功能電子鐘萬年歷數(shù)碼管顯示( proteus仿真+程序+原理圖+報(bào)告+講解視頻)
1.主要功能:
基于51單片機(jī)的日期時(shí)間鬧鐘秒表倒計(jì)時(shí)多功能電子鐘萬年歷仿真設(shè)計(jì)
1、數(shù)碼管顯示當(dāng)前日期,時(shí)間,可以通過按鍵修改日期時(shí)間;
2、設(shè)置鬧鐘時(shí)間,時(shí)間到播放音樂;
3、具有秒表功能;
4、具有倒計(jì)時(shí)功能;
5、具有整點(diǎn)報(bào)時(shí)功能,多少點(diǎn)蜂鳴器響多少次;
6、具備閏年判斷功能,設(shè)置日期的時(shí)候遵守正常大小月規(guī)律。
需注意仿真中51單片機(jī)芯片是通用的,AT89C51,AT89C52都是51單片機(jī)的具體型號,內(nèi)核是兼容的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序也是一樣的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機(jī)芯片。
以下為本設(shè)計(jì)資料展示圖:
2.仿真
開始仿真
打開仿真工程,雙擊proteus中的單片機(jī),選擇hex文件路徑,然后開始仿真。開始仿真默認(rèn)進(jìn)入時(shí)間顯示模式,顯示電腦當(dāng)前時(shí)間。
顯示時(shí)間的情況下,按下設(shè)置鍵進(jìn)入設(shè)置模式,時(shí)間指示燈亮。整點(diǎn)會(huì)有蜂鳴器報(bào)時(shí),多少點(diǎn)就響多少次。
按下設(shè)置按鍵分別設(shè)置時(shí)鐘,分鐘和秒鐘,設(shè)置模式下對應(yīng)設(shè)置的變量會(huì)閃爍,方便用戶設(shè)置。設(shè)置到秒鐘再按下設(shè)置按鍵退出設(shè)置模式。通過按鍵加和減調(diào)整設(shè)置的時(shí)分秒。
通過按下日期按鍵切換到現(xiàn)實(shí)日期模式,數(shù)碼管顯示年月日,日期指示燈亮。
按下設(shè)置鍵進(jìn)入設(shè)置模式,先設(shè)置年份,年份閃爍,通過按鍵加和減完成年份的設(shè)置。設(shè)置完年份再設(shè)置月份,操作同年份調(diào)整。再按下設(shè)置按鍵設(shè)置日。設(shè)置完日期再按下設(shè)置鍵退出設(shè)置。
通過按下鬧鐘按鍵進(jìn)入鬧鐘顯示模式,鬧鐘指示燈亮。顯示默認(rèn)鬧鐘時(shí)間16.30。需要修改鬧鐘時(shí)間的話按下設(shè)置鍵,時(shí)間閃爍表示設(shè)置時(shí)鐘,再按下表示設(shè)置分鐘,設(shè)置完分鐘再按下設(shè)置鍵退出鬧鐘設(shè)置模式。鬧鐘時(shí)間到了會(huì)通過蜂鳴器播放鬧鐘鈴聲。期間如果想停止鬧鈴可以按下停止鬧鈴按鍵。
通過按下鬧鐘按鍵進(jìn)入鬧鐘顯示模式,秒表指示燈亮。開始按鍵啟動(dòng)秒表計(jì)時(shí),暫停按鍵暫停當(dāng)前秒表計(jì)時(shí)并顯示計(jì)時(shí)時(shí)間。按下復(fù)位鍵復(fù)位計(jì)時(shí)時(shí)間為0。
通過按下倒計(jì)時(shí)按鍵進(jìn)入倒計(jì)時(shí)模式,倒計(jì)時(shí)指示燈亮。開始按鍵啟動(dòng)倒計(jì)時(shí),暫停按鍵暫停當(dāng)前倒計(jì)時(shí)時(shí)間并顯示在數(shù)碼管上。按下復(fù)位鍵復(fù)位計(jì)時(shí)時(shí)間為0。
以上仿真結(jié)果均符合設(shè)計(jì)要求。
3. 程序代碼
使用keil4或者keil5編譯,代碼有注釋,可以結(jié)合報(bào)告理解代碼含義。
//主函數(shù)
void main()
{
uchar i=0;
TMOD=0X11;//定時(shí)器0,工作方式1。
TH0=0XFC; //定時(shí)1ms
TL0=0X18;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
ET1=1;
TR1=1;
ET0=1;//打開定時(shí)器0中斷允許
EA=1;//打開總中斷
// Ds1302Init(); //解注釋 顯示初始時(shí)間 2023年9月3日星期天12點(diǎn)00分00秒 可到ds1302.c修改
while(1)
{
disp();//顯示
switch(mode)//LED
{
case 0:led1=0;led2=1;led3=1;led4=1;led5=1;break;
case 1:led1=1;led2=0;led3=1;led4=1;led5=1;break;
case 2:led1=1;led2=1;led3=0;led4=1;led5=1;break;
case 3:led1=1;led2=1;led3=1;led4=0;led5=1;break;
case 4:led1=1;led2=1;led3=1;led4=1;led5=0;
}
i=key_scan();//按鍵檢測
if(i==1)//日期
{
mode=0;flag=0;
}
if(i==2)//時(shí)間
{
mode=1;flag=0;
}
if(i==3)//鬧鐘
{
mode=2;flag=0;
}
if(i==4)//秒表
{
mode=3;flag=0;
}
if(i==5)//倒計(jì)時(shí)
{
mode=4;flag=0;
}
if(i==9)//停止響鈴
{
TR0=0;num=0;
}
if(i==6)//設(shè)置
{
if(mode<2)
{
if(flag<3)
flag++;
else
flag=0;
}
if(mode==2)
{
if(flag<2)
flag++;
else
flag=0;
}
if(mode==4)
{
if(flag<3)
flag++;
else
flag=0;
}
}
if(i==7)//加
{
if(mode==0)//日期設(shè)置// ds1302_time[7] = {秒, 分, 時(shí), 日, 月, 星期, 年};
{
if(flag==1) //年
{
if(ds1302_time[6]<99)
ds1302_time[6]++;
Ds1302Init();
}
if(flag==2) //月
{
if(ds1302_time[4]<12){
ds1302_time[4]++;
}else{
ds1302_time[4] = 1;
}
Ds1302Init();
}
if(flag==3) //日
{
if(ds1302_time[3]<MonthDays(ds1302_time[6],ds1302_time[4])){
ds1302_time[3]++;//如果日期小于于當(dāng)前月份最后一天
}else{
ds1302_time[3] = 1;
}
Ds1302Init();
}
}
if(mode==1)//時(shí)間設(shè)置
{
if(flag==1) //時(shí)
{
if(ds1302_time[2]<99)
ds1302_time[2]++;
Ds1302Init();
}
if(flag==2) //分
{
if(ds1302_time[1]<59)
ds1302_time[1]++;
Ds1302Init();
}
if(flag==3) //秒
{
if(ds1302_time[0]<59)
ds1302_time[0]++;
Ds1302Init();
}
}
if(mode==2)//鬧鐘設(shè)置
{
if(flag==1) //時(shí)
{
if(shi<23)
shi++;
// At24c02Write(0,shi);
}
if(flag==2) //分
{
if(fen<59)
fen++;
// At24c02Write(1,fen);
}
}
if(mode==4)//倒計(jì)時(shí)設(shè)置
{
if(flag==1) //時(shí)
{
if(shi1<23)
shi1++;
}
if(flag==2) //分
{
if(fen1<59)
fen1++;
}
if(flag==3) //秒
{
if(miao1<59)
miao1++;
}
}
}
if(i==8)//減
{
if(mode==0)//日期設(shè)置
{
if(flag==1) //年
{
if(ds1302_time[6]>0)
ds1302_time[6]--;
Ds1302Init();
}
if(flag==2) //月
{
if(ds1302_time[4]>1){
ds1302_time[4]--;
}else{
ds1302_time[4] = 12;
}
Ds1302Init();
}
if(flag==3) //日
{
if(ds1302_time[3]>1){
ds1302_time[3]--;
}else{
ds1302_time[3] =MonthDays(ds1302_time[6],ds1302_time[4]);//日期從1變?yōu)楫?dāng)前月份最后一天
}
Ds1302Init();
}
}
if(mode==1)//時(shí)間設(shè)置
{
if(flag==1) //時(shí)
{
if(ds1302_time[2]>0)
ds1302_time[2]--;
Ds1302Init();
}
if(flag==2) //分
{
if(ds1302_time[1]>0)
ds1302_time[1]--;
Ds1302Init();
}
if(flag==3) //秒
{
if(ds1302_time[0]>0)
ds1302_time[0]--;
Ds1302Init();
}
}
if(mode==2)//鬧鐘設(shè)置
{
if(flag==1) //時(shí)
{
if(shi>0)
shi--;
// At24c02Write(0,shi);
}
if(flag==2) //分
{
if(fen>0)
fen--;
// At24c02Write(1,fen);
}
}
if((mode==4)&&(start==0))//倒計(jì)時(shí)設(shè)置
{
if(flag==1) //時(shí)
{
if(shi1>0)
shi1--;
}
if(flag==2) //分
{
if(fen1>0)
fen1--;
}
if(flag==3) //秒
{
if(miao1>0)
miao1--;
}
}
}
//倒計(jì)時(shí),秒表控制
if(mode>2)
{
if(i==10)//開始
{
start=1;
flag=0;
}
if(i==11)//暫停
start=!start;
if(i==12)//復(fù)位
{
start=0;
fen2=0;miao2=0;haomiao=0;
shi1=0;fen1=0;miao1=0;
}
}
}
}
4.原理圖
原理圖使用AD繪制,可供實(shí)物參考。
Proteus仿真和實(shí)物作品的區(qū)別:
1.運(yùn)行環(huán)境:Proteus仿真是在計(jì)算機(jī)上運(yùn)行的,而實(shí)物則是在硬件電路板上運(yùn)行。
2.調(diào)試方式:在Proteus仿真中,可以方便地進(jìn)行單步調(diào)試和觀察變量值的變化,而在實(shí)物中則需要通過調(diào)試器或者串口輸出等方式進(jìn)行調(diào)試。
電路連接方式:在Proteus仿真中,可以通過軟件設(shè)置進(jìn)行電路連接的修改,而在實(shí)物中則需要通過硬件電路板和連接線進(jìn)行修改。
3.運(yùn)行速度:Proteus仿真通常比實(shí)物運(yùn)行速度快,因?yàn)榉抡媸腔谟?jì)算機(jī)運(yùn)行的,而實(shí)物則需要考慮電路板上的物理限制和器件的響應(yīng)時(shí)間等因素。
4.功能實(shí)現(xiàn):在Proteus仿真中,可以通過軟件設(shè)置實(shí)現(xiàn)不同的功能,而在實(shí)物中則需要根據(jù)電路設(shè)計(jì)和器件的性能進(jìn)行實(shí)現(xiàn)。
參考元器件清單
元件 | 型號 | 數(shù)量 |
---|---|---|
單片機(jī) | AT89C51 | 1 |
電容 | 10uf | 1 |
電容 | 30pf | 2 |
晶振 | 12MHZ | 1 |
電阻 | 10k | 1 |
按鈕 | 17 | |
譯碼器 | 74LS138 | 1 |
存儲(chǔ)器 | 24C02 | 1 |
實(shí)時(shí)時(shí)鐘 | DS1302 | 1 |
LED | 綠色 | 2 |
LED | 黃色 | 2 |
LED | 紅色 | 3 |
電阻 | 100歐 | 5 |
電阻 | 1k | 1 |
三極管 | PNP | 1 |
蜂鳴器 | 無源 | 1 |
數(shù)碼管 | 8位共陰 | 1 |
排阻 | 10k | 1 |
晶振 | 32.768khz | 1 |
5. 設(shè)計(jì)報(bào)告
7027字設(shè)計(jì)報(bào)告,內(nèi)容包括引言,硬件設(shè)計(jì)、軟件設(shè)計(jì)、軟硬件框圖、調(diào)試、總結(jié)和展望等
6. 設(shè)計(jì)資料內(nèi)容清單
資料設(shè)計(jì)資料包括仿真,程序代碼、講解視頻、功能要求、設(shè)計(jì)報(bào)告、軟硬件設(shè)計(jì)框圖等。
0、常見使用問題及解決方法–必讀!?。?!
1、仿真圖
2、程序源碼
3、開題報(bào)告
3、原理圖
5、功能要求
6、元器件清單
7、設(shè)計(jì)報(bào)告
8、軟硬件流程框圖
9、講解視頻
Altium Designer 軟件資料
filename.bat
KEIL軟件資料
Proteus軟件資料
單片機(jī)學(xué)習(xí)資料
目錄清單.txt
答辯技巧
設(shè)計(jì)報(bào)告常用描述
74HC138(中文資料).pdf
鼠標(biāo)雙擊打開查找更多51 STM32單片機(jī)課程畢業(yè)設(shè)計(jì).url
資料下載鏈接(可點(diǎn)擊):
更多資源 點(diǎn)擊下方鏈接:
https://docs.qq.com/sheet/DS0xIa0llTmtNakRW