加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

基于51單片機電子鐘鬧鐘12/24小時制LCD顯示( proteus仿真+程序+設計報告+講解視頻)

11/26 09:38
2132
服務支持:
技術交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關方案
  • 方案介紹
    • 1. 主要功能:
    • 2. 講解視頻:
    • 3. 仿真設計
    • 4. 程序代碼
    • 5. 設計報告
    • 6. 設計資料內(nèi)容清單&&下載鏈接
  • 相關文件
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于51單片機電子鐘鬧鐘12/24小時制LCD顯示( proteus仿真+程序+設計報告+講解視頻)

仿真圖proteus7.8及以上

程序編譯器:keil 4/keil 5

編程語言:C語言

設計編號:S0082

1. 主要功能:

基于51單片機的電子鐘12/24小時制萬年歷設計

1.電子鐘設計能設定起始時間,按下復位鍵恢復初始化時間;

2.具有鬧鐘功能,可以通過按鍵設定鬧鐘鬧鈴時間;

3.有12 小時/24 小時兩種制式可選;

4.能顯示年月日星期;

5.使用DS1302計時,LCD1602液晶顯示;

需注意仿真中51單片機芯片是兼容的,AT89C51,AT89C52是51單片機的具體型號,內(nèi)核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機芯片。

img

以下為本設計資料展示圖:

2. 講解視頻:

講解視頻包含仿真運行講解和代碼講解

https://www.bilibili.com/video/BV17p421978t/

3. 仿真設計

打開仿真工程,雙擊proteus中的單片機,選擇hex文件路徑,然后開始仿真。

img

顯示時間的情況下,按下切換鍵進入設置模式,設置的變量閃爍,默認先設置年份,通過按鍵加和按鍵減調(diào)整,通過下一個按鍵切換設置月份,設置月份時同樣通過加減鍵調(diào)整。如此類推設置日期,星期,時分秒。

img

設置好時鐘后按下切換按鍵設置鬧鐘。同樣通過按鍵加減調(diào)整鬧鐘時間,通過下一個按鍵切換設置時鐘/分鐘。

img

按下12/24小時制切換可以切換時制。上午顯示AM,下午顯示PM,方便區(qū)分時間。

img

img

4. 程序代碼

使用keil4或者keil5編譯,代碼有注釋,可以結合視頻理解代碼含義。

#include <reg51.h>
#include "lcd1602.h"
#include"ds1302.h" 

#define uchar unsigned char
#define uint unsigned int
//功能設計:調(diào)整時間、調(diào)整鬧鐘、正常

sbit key1=P3^6;//功能切換
sbit key2=P3^5;//下一個設置點
sbit key3=P3^4;//加
sbit key4=P3^3;//減
sbit key5=P3^2;//12,24小時制切換

sbit beep=P3^7;//蜂鳴器
//===============================================================
uchar mode=0;//模式	  設置,工作
uchar t=0;
uchar fen=1,shi=12;//鬧鐘分鐘和鬧鐘時間設置
uchar cixu=0,flag=0;//小模式
uchar moshi=0;//12,24控制

uchar hang1[]="2000/00/00  0";//日期 + 星期
uchar hang2[]="00:00:00     ";//時間
uchar hang3[]="00:00        ";	  //鬧鐘  時+分

void suan()//計算
{	
	uchar i=0;
	hang1[2]=(TIME[6]>>4)+0x30;
	hang1[3]=(TIME[6]&0x0f)+0x30;
	hang1[5]=(TIME[4]>>4)+0x30;
	hang1[6]=(TIME[4]&0x0f)+0x30;
	hang1[8]=(TIME[3]>>4)+0x30;
	hang1[9]=(TIME[3]&0x0f)+0x30;
	hang1[12]=TIME[5]+0x30;
	if(moshi==0)//小時
	{
		hang2[0]=(TIME[2]>>4)+0x30;
		hang2[1]=(TIME[2]&0x0f)+0x30;
		hang2[11]=' ';
		hang2[12]=' ';
	}
	else
	{
		i=(TIME[2]>>4)*10+(TIME[2]&0x0f);
		if(TIME[2]<=0x12)
		{
			hang2[0]=i/10+0x30;
			hang2[1]=i%10+0x30;
			hang2[11]='A';
			hang2[12]='M';
		}
		else
		{
			hang2[0]=(i-12)/10+0x30;
			hang2[1]=(i-12)%10+0x30;
			hang2[11]='P';
			hang2[12]='M';
		}
	}
	hang2[3]=(TIME[1]>>4)+0x30;//分鐘
	hang2[4]=(TIME[1]&0x0f)+0x30;
	hang2[6]=(TIME[0]>>4)+0x30;
	hang2[7]=(TIME[0]&0x0f)+0x30;
	hang3[0]=shi/10+0x30;
	hang3[1]=shi%10+0x30;
	hang3[3]=fen/10+0x30;
	hang3[4]=fen%10+0x30;
}

void xian()//顯示
{
	suan();//計算
	if(mode==0)//正常
	{		
		write_string(1,0,hang1);
		write_string(2,0,hang2);
	}
	else
	{
		switch(cixu)
		{
			case 0:		 //年
				if(flag)
				{
					hang1[2]=(TIME[6]>>4)+0x30;
					hang1[3]=(TIME[6]&0x0f)+0x30;
				}
				else
				{
					hang1[2]=' ';
					hang1[3]=' ';
				}
				break;
			case 1:		 //月
				if(flag)
				{
					hang1[5]=(TIME[4]>>4)+0x30;
					hang1[6]=(TIME[4]&0x0f)+0x30;
				}
				else
				{
					hang1[5]=' ';
					hang1[6]=' ';
				}
				break;
			case 2:		 //日
				if(flag)
				{
					hang1[8]=(TIME[3]>>4)+0x30;
					hang1[9]=(TIME[3]&0x0f)+0x30;
				}
				else
				{
					hang1[8]=' ';
					hang1[9]=' ';
				}
				break;
			case 3:		 //星期
				if(flag)
				{
					hang1[12]=TIME[5]+0x30;
				}
				else
				{
					hang1[12]=' ';
				}
				break;
			case 4:		 //時
				if(flag)
				{
					hang2[0]=(TIME[2]>>4)+0x30;
					hang2[1]=(TIME[2]&0x0f)+0x30;
				}
				else
				{
					hang2[0]=' ';
					hang2[1]=' ';
				}
				break;
			case 5:		 //分
				if(flag)
				{
					hang2[3]=(TIME[1]>>4)+0x30;
					hang2[4]=(TIME[1]&0x0f)+0x30;
				}
				else
				{
					hang2[3]=' ';
					hang2[4]=' ';
				}
				break;
			case 6:		 //秒
				if(flag)
				{
					hang2[6]=(TIME[0]>>4)+0x30;
					hang2[7]=(TIME[0]&0x0f)+0x30;
				}
				else
				{
					hang2[6]=' ';
					hang2[7]=' ';
				}
				break;
			case 7:		 //時,鬧鐘
				if(flag)
				{
					hang3[0]=shi/10+0x30;
					hang3[1]=shi%10+0x30;
				}
				else
				{
					hang3[0]=' ';
					hang3[1]=' ';
				}
				break;
			case 8:		 //分,鬧鐘
				if(flag)
				{
					hang3[3]=fen/10+0x30;
					hang3[4]=fen%10+0x30;
				}
				else
				{
					hang3[3]=' ';
					hang3[4]=' ';
				}				
		}
		if(cixu<7)	//顯示結果
		{
			write_string(1,0,hang1);
			write_string(2,0,hang2);
		}
		else
		{
			write_string(1,0,"CLOCK:          ");
			write_string(2,0,hang3);
		}
	}

}


//主函數(shù)
void main()
{
	uchar i,j,k;
	TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
	TH0=0X3C;	//定時50ms
	TL0=0Xb0;	
	ET0=1;//打開定時器0中斷允許
	EA=1;//打開總中斷
	TR0=1;//打開定時器
	init_1602();//LCD初始化
	write_string(1,0,hang1);
	write_string(2,0,hang2);
//	Ds1302ReadTime();//啟動DS1302
	TIME[0]=0;
	Ds1302Init();

	while(1)
	{
	 	if(!key5)//12,24切換
		{
			moshi=!moshi;
			while(!key5);
		}
		//判斷
		k=0;
		i=(shi/10<<4)+shi%10;
		j=(fen/10<<4)+fen%10;
		if((TIME[2]==i)&&(TIME[1]==j))//鬧鐘
		{
			beep=0;
		}
		else
		{
			beep=1;
		}
			
		//按鍵檢測
		if(!key1)//功能
		{
			cixu=0;
			mode=!mode;
			while(!key1);
		}
		if(!key2)//next
		{
			if(cixu<8)
				cixu++;
			else
				cixu=0;
			while(!key2);
		}
		if(!key3)//加
		{
			switch(cixu)
			{
				case 0:	//年
					i=(TIME[6]>>4)*10+(TIME[6]&0X0F);
					if(i<99)
						i++;
					TIME[6]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 1:	//月
					i=(TIME[4]>>4)*10+(TIME[4]&0X0F);
					if(i<12)
						i++;
					TIME[4]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 2:	//日
					i=(TIME[3]>>4)*10+(TIME[3]&0X0F);
					if(i<30)
						i++;
					TIME[3]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 3:	//星期
					i=(TIME[5]>>4)*10+(TIME[5]&0X0F);
					if(i<7)
						i++;
					TIME[5]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 4:	//時
					i=(TIME[2]>>4)*10+(TIME[2]&0X0F);
					if(i<23)
						i++;
					TIME[2]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 5:	//分
					i=(TIME[1]>>4)*10+(TIME[1]&0X0F);
					if(i<59)
						i++;
					TIME[1]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 6:	//秒
					i=(TIME[0]>>4)*10+(TIME[0]&0X0F);
					if(i<59)
						i++;
					TIME[0]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 7:	//鬧鐘,時
					if(shi<23)
						shi++;
					break;
				case 8:	//鬧鐘,分
					if(fen<59)
						fen++;
			}
			while(!key3);
		}
		if(!key4)//減
		{
			switch(cixu)
			{
				case 0:	//年
					i=(TIME[6]>>4)*10+(TIME[6]&0X0F);
					if(i>0)
						i--;
					TIME[6]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 1:	//月
					i=(TIME[4]>>4)*10+(TIME[4]&0X0F);
					if(i>1)
						i--;
					TIME[4]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 2:	//日
					i=(TIME[3]>>4)*10+(TIME[3]&0X0F);
					if(i>1)
						i--;
					TIME[3]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 3:	//星期
					i=(TIME[5]>>4)*10+(TIME[5]&0X0F);
					if(i>1)
						i--;
					TIME[5]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 4:	//時
					i=(TIME[2]>>4)*10+(TIME[2]&0X0F);
					if(i>0)
						i--;
					TIME[2]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 5:	//分
					i=(TIME[1]>>4)*10+(TIME[1]&0X0F);
					if(i>0)
						i--;
					TIME[1]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 6:	//秒
					i=(TIME[0]>>4)*10+(TIME[0]&0X0F);
					if(i>0)
						i--;
					TIME[0]=(i/10<<4)+i%10;
					Ds1302Init();
					break;
				case 7:	//鬧鐘,時
					if(shi>0)
						shi--;
					break;
				case 8:	//鬧鐘,分
					if(fen>0)
						fen--;
			}
			while(!key4);
		}
	}
}

void Timer0() interrupt 1 //定時器0中斷
{
	
	if(t<10)
		t++;
	else
	{
		t=0;
		flag=!flag;
		Ds1302ReadTime();//讀取時間
		xian();

	}
	TH0=0X3C;	//定時50ms
	TL0=0Xb0;
}

5. 設計報告

6377字設計報告,內(nèi)容包括硬件設計、軟件設計、軟硬件框圖、調(diào)試等

img

隨著嵌入式技術的迅速發(fā)展和廣泛應用,單片機作為其核心組成部分,在日常生活的諸多領域展現(xiàn)出了無可比擬的優(yōu)勢。尤其在智能化、微型化和功能集成化的趨勢下,51系列單片機因其結構簡單、成本低廉且易于學習的特點,在教育與工業(yè)應用中扮演了至關重要的角色。其中,基于51單片機制作的電子鐘和萬年歷產(chǎn)品由于其高度實用的功能特性以及便捷友好的用戶操作界面,受到了廣大用戶和工程技術人員的廣泛認可和青睞。

本課程設計項目正立足于這一時代背景和技術潮流,旨在通過理論聯(lián)系實踐的教學方式,借助Proteus這一強大的電子電路仿真軟件平臺,引領學生親自動手設計并實現(xiàn)一款融合了多種實用功能于一體的電子鐘萬年歷系統(tǒng)。該系統(tǒng)不僅包含了基本的時間顯示及設置功能,還具備了鬧鐘設定、時間制式切換(12小時/24小時)、精確日期和星期顯示等功能模塊,充分體現(xiàn)了嵌入式系統(tǒng)的靈活性和智能性。

6. 設計資料內(nèi)容清單&&下載鏈接

資料設計資料包括仿真,程序代碼、講解視頻、功能要求、設計報告、軟硬件設計框圖等。

0、常見使用問題及解決方法–必讀?。。?!

1、程序

2、proteus仿真

3、功能要求

4、軟硬件流程圖

5、開題報告

6、設計報告

7、講解視頻

Altium Designer 安裝破解

KEIL+proteus 單片機仿真設計教程

KEIL安裝破解

Proteus元器件查找

Proteus安裝

Proteus簡易使用教程

單片機學習資料

相關數(shù)據(jù)手冊

答辯技巧

設計報告常用描述

鼠標雙擊打開查找嘉盛單片機51 STM32單片機課程畢業(yè)設計.url

img

資料下載鏈接:

https://docs.qq.com/doc/DS3BobENMR1hLZHVm

  • 設計資料獲取聯(lián)系方式.doc

相關推薦

電子產(chǎn)業(yè)圖譜