基于51單片機的簡易打鈴系統

目錄

具體實現功能

設計介紹

資料內容

全部內容

資料獲取


具體實現功能

具體功能:
(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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86971.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86971.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86971.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue+cesium示例:3D熱力圖(附源碼下載)

接到一位知識星友的邀請&#xff0c;隨機模擬三維數據點&#xff0c;結合heatmap.js實現基于cesiumvue的3D熱力圖需求&#xff0c;適合學習Cesium與前端框架結合開發3D可視化項目。 demo源碼運行環境以及配置 運行環境&#xff1a;依賴Node安裝環境&#xff0c;demo本地Node版本…

批處理實現:自動抓取perfetto日志 自動導出到當前文件夾 自動打開分析頁面

序言 最近在研究性能問題需要抓取trace文件。于是寫了個腳本 使用 雙擊運行批處理文件&#xff0c;可以開始記錄trace。而且以當前文件夾下面的。config.pbtx 作為配置文件。 &#xff08;pbtx就是一個json文件。配置了需要抓取那些參數&#xff0c;可以通過https://ui.per…

未來機器人的大腦:如何用神經網絡模擬器實現更智能的決策?

編輯&#xff1a;陳萍萍的公主一點人工一點智能 未來機器人的大腦&#xff1a;如何用神經網絡模擬器實現更智能的決策&#xff1f;RWM通過雙自回歸機制有效解決了復合誤差、部分可觀測性和隨機動力學等關鍵挑戰&#xff0c;在不依賴領域特定歸納偏見的條件下實現了卓越的預測準…

??Promise代碼理解

1.事件循環與 Promise 執行順序 案例 1&#xff1a;基礎 Promise 同步異步區分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 輸出順序&#xff1a;1&#xff0c;2&#xff0c;3…

57、原生組件注入-【源碼分析】DispatcherServlet注入原理

57、原生組件注入DispatcherServlet注入原理 #### 繼承關系 - DispatcherServlet繼承自FrameworkServlet&#xff0c;而FrameworkServlet繼承自HttpServletBean&#xff0c;最終HttpServletBean繼承自HttpServlet。 - DispatcherServlet實現了ApplicationContextAware接口。 …

【動手學深度學習】3.5. 圖像分類數據集

目錄 3.5. 圖像分類數據集1&#xff09;讀取數據集2&#xff09;讀取小批量3&#xff09;整合所有組件4&#xff09;小結 . 3.5. 圖像分類數據集 我們將使用Fashion-MNIST數據集&#xff0c;作為圖像分類數據集。 %matplotlib inline import torch import torchvision from …

Python的格式化輸入輸出

# Python 的格式化輸出和格式化輸入## 格式化輸出Python 提供了多種字符串格式化的方法&#xff1a;### 1. % 格式化&#xff08;舊式格式化&#xff09;python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 輸出: Name: Alice, Age…

day65—回溯—單詞搜索(LeetCode-79)

題目描述 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”單元格是那些水平相…

iOS安全和逆向系列教程 第19篇:ARM64匯編語言基礎與逆向分析

引言 在成功掌握iOS應用脫殼技術后,我們獲得了可以進行靜態分析的二進制文件。然而,要真正理解iOS應用的底層邏輯,我們必須深入到匯編語言層面。ARM64(也稱為AArch64)是蘋果在iPhone 5s及以后設備中使用的指令集架構。本篇文章將深入探討ARM64匯編語言的基礎知識,并結合…

使用Gitlab CI/CD結合docker容器實現自動化部署

Gitlab CI/CD基本介紹 核心概念 持續集成&#xff08;CI&#xff09;&#xff1a;每次代碼提交后自動觸發構建、測試和代碼檢查&#xff0c;確保代碼質量 持續交付/部署&#xff08;CD&#xff09;&#xff1a;在 CI 基礎上自動將代碼部署到測試或生產環境&#xff0c;支持人工…

初學者運行Pycharm程序可能會出現的問題,及解決辦法

文章目錄 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm報錯&#xff1a;“Original error was: DLL load failed: 找不到指定的模塊“ 的解決辦法四、ImportError: cannot…

Android開發中的Java與Kotlin:全面對比與深度解析

Android開發中的Java與Kotlin&#xff1a;全面對比與深度解析 在Android開發領域&#xff0c;Java和Kotlin是兩種主流編程語言。自Google在2017年宣布Kotlin為Android官方支持語言以來&#xff0c;Kotlin憑借其現代語法特性和與Java的無縫兼容性&#xff0c;逐漸成為開發者的新…

為應對激烈競爭環境,IBMS系統如何提升企業管理效率

IBMS智能管理系統&#xff1a;賦能企業高效運營&#xff0c;決勝競爭新時代 在瞬息萬變的商業環境中&#xff0c;效率就是競爭力&#xff01;企業如何快速響應市場變化、優化內部流程、降低成本并實現精準決策&#xff1f;IBMS智能管理系統以創新科技為引擎&#xff0c;為企業…

2.3 ASPICE的架構與設計

在ASPICE中&#xff0c;架構與設計是汽車軟件開發過程中非常重要的一環&#xff0c;它涉及到定義和設計軟件系統的整體結構、組件以及其相互關系。良好的架構與設計可以幫助團隊更好地理解和管理軟件系統&#xff0c;提高系統的可維護性、可擴展性和性能。以下是ASPICE中架構與…

生益PCB耐高溫PCB板材怎么樣?

在5G基站晝夜不停地吞吐數據時&#xff0c;在新能源汽車電池管理系統經受極寒酷暑考驗時&#xff0c;在航空航天器穿越大氣層承受2000℃熱浪沖擊時&#xff0c;一塊優質PCB板材的“抗熱基因”正在決定著整個系統的生死存亡。生益科技研發的耐高溫PCB板材&#xff0c;正是在這場…

Java Spring ApplicationEvent 概述

一、Spring 事件機制核心概念 1. 事件驅動架構模型 發布-訂閱模式&#xff1a;解耦事件生產者和消費者觀察者模式&#xff1a;監聽器監聽特定事件事件驅動優勢&#xff1a; 組件間松耦合系統擴展性好支持異步處理事件溯源支持 2. 核心組件 組件作用實現方式ApplicationEve…

Spring核心框架完全指南 - 基礎知識全解析

?? 目錄 ?? Spring框架簡介 ??? IoC容器詳解 ?? 依賴注入(DI)深入理解 ?? Bean配置與管理 ?? Bean的作用域 ?? Bean生命周期 ?? 面向切面編程(AOP) ?? Spring注解詳解 ?? 資源管理 ?? 事件機制 ?? SpEL表達式語言 ?? 實戰案例 ?? 總…

Parasoft C++Test軟件集成測試(部件測試)_操作指南

系列文章目錄 Parasoft C++Test軟件靜態分析:操作指南(編碼規范、質量度量)、常見問題及處理 Parasoft C++Test軟件單元測試:操作指南、實例講解、常見問題及處理 Parasoft C++Test軟件集成測試:操作指南、實例講解、常見問題及處理 進階擴展:自動生成靜態分析文檔、自動…

聊一聊 Linux 上對函數進行 hook 的兩種方式

一&#xff1a;背景 1. 講故事 前兩篇我們介紹了 Minhook 在 Windows 平臺上的強大功效&#xff0c;這一篇我們來聊一聊如何在 Linux 上對函數進行hook&#xff0c;這里介紹兩種方式。 輕量級的 LD_PRELOAD 攔截 LD_PRELOAD是一種共享庫攔截&#xff0c;這種方式的優點在于…

【免費分享】GWO-BP-AdaBoost預測!灰狼優化、人工神經網絡與AdaBoost集成學習算法預測研究

一、模型組成原理 1. 灰狼優化算法&#xff08;GWO&#xff09; 核心思想&#xff1a;模擬灰狼群體的社會等級和狩獵行為&#xff08;包圍、跟蹤、攻擊獵物&#xff09;&#xff0c;通過α、β、δ三級領導層引導種群搜索最優解。算法流程包括&#xff1a; 社會分層&#xff…