加入星計(jì)劃,您可以享受以下權(quán)益:

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

基于51單片機(jī)的LCD1602電子鐘鬧鐘proteus仿真設(shè)計(jì)

07/09 09:07
587
服務(wù)支持:
技術(shù)交流群

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

虛擬商品不可退

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

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實(shí)物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

本設(shè)計(jì)是基于51單片機(jī)LCD1602電子鐘鬧鐘proteus仿真設(shè)計(jì)
源碼+仿真+原理圖+器件清單
仿真軟件版本:proteus 7.8
程序編譯器:keil 4/keil 5
編程語言:C語言
編號(hào)C0001

資料文件下載鏈接:
https://docs.qq.com/doc/DS1N1VEpDc2JHUlVx

功能介紹:
(1) 可由按鍵調(diào)整時(shí)間
(2) 可整點(diǎn)報(bào)時(shí)(“嘟、嘟”聲)
(3) 可設(shè)定時(shí),定時(shí)時(shí)間到發(fā)出“嘟、嘟”聲

仿真圖:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

原理圖(提供源文件):
在這里插入圖片描述

程序:
main.c

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

/***********************引腳定義************************/
sbit K1=P2^3;					//切換。=1調(diào)整時(shí)間、=2調(diào)整鬧鐘、=0正常運(yùn)行
sbit K2=P2^4;					//下一個(gè)
sbit K3=P2^5;					//加一
sbit K4=P2^6;					//減一
sbit beep=P2^7;					//蜂鳴器
/***********************變量定義************************/
unsigned char moshi=0;					//用來指示當(dāng)前處在哪個(gè)功能狀態(tài)
unsigned int  timer=0;					//系統(tǒng)定時(shí)變量
unsigned char miao=0,fen=10,shi=6;		//初始時(shí)間
unsigned char buzzr_fen=12,buzzr_shi=6;	//鬧鐘時(shí)間
unsigned char two=0;					//指示每個(gè)功能下對(duì)應(yīng)的時(shí)間
unsigned char time[]={"06:10:10"};		//當(dāng)前時(shí)間顯示空間
unsigned char buzzr[]={"06:12"};		//鬧鐘緩存
/*********************************************************
函數(shù)名稱:delay
函數(shù)作用:延時(shí)函數(shù)
輸入變量:unsigned int i延時(shí)時(shí)間
返回值:  無
***********************************************************/
void delay(unsigned int i)				//延時(shí)單位為10us
{
	while(i--);
}
/*********************************************************
函數(shù)名稱:main
函數(shù)作用:主函數(shù)
輸入變量:無
返回值:  無
***********************************************************/
void main()
{
	TMOD|=0X01;							//T0工作方式1
	TH0=0XfC;							//設(shè)置初值1ms
	TL0=0X18;	
	ET0=1;								//打開定時(shí)器0中斷允許
	EA=1;								//打開總中斷
	TR0=1;								//打開定時(shí)器
	init_1602();						//LCD1602初始化
	write_string(1,0,"TIME:");
	write_string(2,0,"CLOCK:");
	write_string(1,5,time);				//顯示初始時(shí)間
	write_string(2,6,buzzr);			//顯示鬧鐘時(shí)間
	write_com(0x0c);					//關(guān)閉光標(biāo)
while(1)								//主循環(huán)
{
	 if(!K1)							//按鈕1功能切換
	 {
	 delay(10000);						//延時(shí)防抖
		  if(!K1)
		  {
				two=0;					//功能時(shí)間指示變量清零
		  	  	if(moshi<2)				//模式切換
			  		moshi++;
				else
					moshi=0;
				switch(moshi)			//設(shè)置光標(biāo)位置
				{
				case 0:	write_com(0x0c);//正常模式,關(guān)閉光標(biāo)
						break;
				case 1:	write_com(0x0e);//模式1,打開光標(biāo)
						write_sfm(1,6);	//設(shè)置光標(biāo)位置
						break;
				case 2:	write_com(0x0e);//模式2,打開光標(biāo)
						write_sfm(2,6);	//設(shè)置光標(biāo)位置
				}
		  }
		  while(!K1);				   	//等待按鈕松開
	 }
	 if(moshi==1)						//模式1,調(diào)整時(shí)間
	 {
			if(!K2)						//下一個(gè)
			{
			   delay(10000);			//延時(shí)防抖
			   	if(!K2)
				{
					if(two<2)
						two++;
					else
						two=0;
				}
				if(two==0)				//光標(biāo)設(shè)置在小時(shí)位置
					{
					write_com(0x0e);
					write_sfm(1,6);
					}
				if(two==1)					//光標(biāo)設(shè)置在分鐘位置
					{
					write_com(0x0e);
					write_sfm(1,9);
					}
				if(two==2)					//光標(biāo)設(shè)置在秒位置
					{
					write_com(0x0e);
					write_sfm(1,12);
					}
				while(!K2);				//等待按鈕松開
			}
			if(two==0)
				{
				if(!K3) 				//小時(shí)加一
					{
					delay(10000);		//延時(shí)防抖
						if(!K3)
						{
							if(shi<23)	//限制小時(shí)最大值為23
							   shi++;	//小時(shí)加一
							else
								shi=0;
						}
					time[0]=shi/10+0x30;//計(jì)算
					time[1]=shi%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,6);		//保持光標(biāo)位置
					while(!K3);
					}
				 if(!K4) 				//小時(shí)減一
					{
					delay(10000);		//延時(shí)防抖
						if(!K4)
						{
							if(shi>0)
							   shi--;
							else
								shi=23;
						}
					time[0]=shi/10+0x30;//計(jì)算
					time[1]=shi%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,6);
					while(!K4);
					}
				}
			if(two==1)
				{
				if(!K3) 				//分鐘加一
					{
					delay(10000);		//延時(shí)防抖
						if(!K3)
						{
							if(fen<59)	//限制分鐘最大值為59
							   	fen++;
							else
								fen=0;
						}
					time[3]=fen/10+0x30;//計(jì)算
					time[4]=fen%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,9);
					while(!K3);
					}
				 if(!K4) 				//分鐘減一
					{
					delay(10000);		//延時(shí)防抖
						if(!K4)
						{
							if(fen>0)
							   fen--;
							else
								fen=59;
						}
					time[3]=fen/10+0x30;//計(jì)算
					time[4]=fen%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,9);
					while(!K4);
					}
				}
			if(two==2)
				{
				if(!K3) 				//秒加一
					{
					delay(10000);		//延時(shí)防抖
						if(!K3)
						{
							if(miao<59)	//限制分鐘最大值為59
							   	miao++;
							else
								miao=0;
						}
					time[3]=miao/10+0x30;//計(jì)算
					time[4]=miao%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,9);
					while(!K3);
					}
				 if(!K4) 				//秒減一
					{
					delay(10000);		//延時(shí)防抖
						if(!K4)
						{
							if(miao>0)
							   miao--;
							else
								miao=59;
						}
					time[3]=miao/10+0x30;//計(jì)算
					time[4]=miao%10+0x30;
					write_string(1,5,time);//顯示
					write_sfm(1,9);
					while(!K4);
					}
				}
		}
		if(moshi==2)					//模式2,調(diào)整鬧鐘
		{
			if(!K2)						//下一個(gè)
			{
			   delay(10000);			//延時(shí)防抖
			   	if(!K2)
				{
					two=!two;			//切換次序
				}
				if(two==0)				//光標(biāo)設(shè)置在小時(shí)
					{
					write_com(0x0e);	//開啟光標(biāo)
					write_sfm(2,6);
					}
				else					//光標(biāo)設(shè)置在分鐘
					{
					write_com(0x0e);	//開啟光標(biāo)
					write_sfm(2,9);
					}
				while(!K2);
			}
			if(two==0)
				{
				if(!K3) 				//小時(shí)加一
					{
					delay(10000);		//延時(shí)防抖
						if(!K3)
						{
							if(buzzr_shi<23)//限制小時(shí)最大值為23
							   	buzzr_shi++;
							else
								buzzr_shi=0;
						}
					buzzr[0]=buzzr_shi/10+0x30;//計(jì)算
					buzzr[1]=buzzr_shi%10+0x30;
					write_string(2,6,buzzr);//顯示
					write_sfm(2,6);
					while(!K3);
					}
				 if(!K4) 				//小時(shí)減一
					{
					delay(10000);		//延時(shí)防抖
						if(!K4)
						{
							if(buzzr_shi>0)
							   buzzr_shi--;
							else
								buzzr_shi=23;
						}
					buzzr[0]=buzzr_shi/10+0x30;//計(jì)算
					buzzr[1]=buzzr_shi%10+0x30;
					write_string(2,6,buzzr);  //顯示
					write_sfm(2,6);
					while(!K4);
					}
				}
			else
				{
				if(!K3) 				//分鐘加一
					{
					delay(10000);		//延時(shí)防抖
						if(!K3)
						{
							if(buzzr_fen<59)//限制分鐘最大值為59
							   	buzzr_fen++;
							else
								buzzr_fen=0;
						}
					buzzr[3]=buzzr_fen/10+0x30;//計(jì)算
					buzzr[4]=buzzr_fen%10+0x30;
					write_string(2,6,buzzr);//顯示
					write_sfm(2,9);			//保持光標(biāo)位置
					while(!K3);
					}
				 if(!K4) 					//分鐘減一
					{
					delay(10000);			//延時(shí)防抖
						if(!K4)
						{
							if(buzzr_fen>0)
							   buzzr_fen--;
							else
								buzzr_fen=59;
						}
					buzzr[3]=buzzr_fen/10+0x30;//計(jì)算
					buzzr[4]=buzzr_fen%10+0x30;
					write_string(2,6,buzzr);//顯示
					write_sfm(2,9);
					while(!K4);
					}
				}
		}
}
}
/*********************************************************
函數(shù)名稱:TIMER0
函數(shù)作用:定時(shí)器0中斷
輸入變量:無
返回值:  無
***********************************************************/
void TIMER0() interrupt 1 //定時(shí)器0中斷
{
	TH0=0XfC;	//定時(shí)1ms
	TL0=0X18;
		
	if(timer<1000) //定時(shí)1s
		timer++;
	else
		{
		timer=0;
		if(((shi==buzzr_shi)&&(fen==buzzr_fen))||(fen==0)) //判斷是否到達(dá)鬧鐘時(shí)間
			{
			beep=!beep;//蜂鳴器每隔1s響一次
			}
		else
			beep=1;//關(guān)閉蜂鳴器
		if(moshi==0) //模式0,正常計(jì)時(shí)
		{
		if(miao<59)				 //秒計(jì)時(shí)
			miao++;
		else
			{
			miao=0;
			if(fen<59)			 //分計(jì)時(shí)
				fen++;
			else
				{
				fen=0;
				if(shi<23)		 //小時(shí)計(jì)時(shí)
					shi++;
				else
					shi=0;
				}
			}
		time[0]=shi/10+0x30;	//把shi/fen/miao計(jì)算到顯存,用于顯示
		time[1]=shi%10+0x30;
		time[3]=fen/10+0x30;
		time[4]=fen%10+0x30;
		time[6]=miao/10+0x30;
		time[7]=miao%10+0x30;
		write_string(1,5,time);//顯示時(shí)間
		}
		}
}

在這里插入圖片描述

器件清單:
在這里插入圖片描述

資料清單:

在這里插入圖片描述

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
AT89C51CC03CA-RLTUM 1 Microchip Technology Inc IC MCU 8BIT 64KB FLASH 44VQFP
$10.78 查看
STM32F401VET6 1 STMicroelectronics High-performance access line, Arm Cortex-M4 core with DSP and FPU, 512 Kbytes of Flash memory, 84 MHz CPU, ART Accelerator

ECAD模型

下載ECAD模型
$10.53 查看
PIC32MX795F512L-80V/PT 1 Microchip Technology Inc 32-BIT, FLASH, 80 MHz, RISC MICROCONTROLLER, PQFP100, 12 X 12 MM, 1 MM HEIGHT, LEAD FREE, PLASTIC, TQFP-100

ECAD模型

下載ECAD模型
$12 查看

相關(guān)推薦

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