基于51單片機校園作息時間控制打鈴系統(tǒng)( proteus仿真+程序+設計報告+原理圖+講解視頻)
仿真圖proteus7.8及以上
程序編譯器:keil 4/keil 5
編程語言:C語言
設計編號:S0097
1. 主要功能:
基于51單片機的校園作息時間控制系統(tǒng)
1、DS1302芯片計時,通過數(shù)碼管顯示時、分、秒。設置當前時間,蜂鳴器定時打鈴。
2、可以通過按鍵查看和修改24組定時打鈴時間,數(shù)據永久保存。
3、功能指示led亮的時候,顯示當前時間,通過按鍵可以調整當前時間。
led熄滅的時候,是設置鬧鐘狀態(tài),一共可以設置24組鬧鐘。通過按鍵可以調整鬧鐘時間。
需注意仿真中51單片機芯片是兼容的,AT89C51,AT89C52是51單片機的具體型號,內核是一樣的。相同的原理圖里,無論stc還是at都一樣,引腳功能都是一樣的,程序是兼容的,芯片可以替換為STC89C52/STC89C51/AT89C52/AT89C51等51單片機芯片。
以下為本設計資料展示圖:
2. 講解視頻:
講解視頻包含仿真運行講解和代碼講解
基于51單片機校園作息打鈴詳細講解(proteus仿真+程序+報告+原理圖)
3. 仿真
打開仿真工程,雙擊proteus中的單片機,選擇hex文件路徑,然后開始仿真。開始仿真后數(shù)碼管顯示當前時間,指示燈亮紅燈。這個現(xiàn)實模式下可以通過按鍵調整當前時間。
可以通過按鍵組+1進入設置模式,顯示第一組,如果顯示第一組可以通過按鍵組-1退出設置。設置過程中指示燈不亮??梢酝ㄟ^小時加減和分鐘加減控制。
4. 程序代碼
使用keil4或者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~65535
uchar code smgduan0[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//顯示0~9,無小數(shù)點
uchar code smgduan1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//顯示0~9,有小數(shù)點
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;//組+1
sbit 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;
else
limit[j]=k;
i=At24c02Read(j+1);
if(i<60)
limit[j+1]=i;
else
limit[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;
else
beep=1;
}
else
beep=1;
}
//小時+1
void shi_jia()
{
if(limit[2*(num-1)]<23)
limit[2*(num-1)]++;
else
limit[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)]--;
else
limit[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]++;
else
limit[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]--;
else
limit[2*(num-1)+1]=59;
At24c02Write(2*(num-1)+1,limit[2*(num-1)+1]);
}
/***************主函數(shù)*****************/
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++;
else{
num=0;
flag=1;//顯示當前時間
}
}
if(!key1 &&(k!=1))//組號-1
{
k=1;
if(num>1&&flag==0)
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++;
else
m=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--;
else
m=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++;
else
m=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--;
else
m=59;
TIME[1]=(m/10<<4)+m%10;
Ds1302Init();
}
k=5;
}
if(P3==0xff)
k=0;
Ds1302ReadTime();//讀取時間
bell_if();//響鈴
if(flag==0)
xianshi();//顯示
else
xian();
}完整代碼見文章下載鏈接壓縮
}
5. 設計報告
9302字設計報告,內容包括硬件設計、軟件設計、軟硬件框圖、調試、結論等
在當今全球科技日新月異、創(chuàng)新浪潮洶涌澎湃的時代背景下,智能化校園管理這一概念已從理想藍圖逐漸轉化為現(xiàn)實應用,日益凸顯其在提升教育質量和行政效率方面不可替代的價值。它不僅反映了教育領域緊跟時代步伐、積極擁抱先進技術的趨勢,更體現(xiàn)了教育工作者對構建高效、有序、人性化校園環(huán)境的不懈追求。其中,對校園作息時間實施精準控制,無疑是智能化管理體系中不可或缺的一環(huán),其重要性體現(xiàn)在多個維度。
首先,從維護教學秩序的角度來看,精準的作息時間控制猶如一座無形的指揮塔,為全校師生提供了統(tǒng)一的時間坐標系。無論是日常的課程安排、實驗實訓,還是各類學術活動、社團活動,都離不開對時間的嚴格遵循。精確到秒的上下課鈴聲、休息時段提示,確保了教學活動的連貫性與節(jié)奏感,避免了因時間錯亂導致的教學中斷、資源浪費和學生困惑,有利于形成良好的教學氛圍和學習習慣,保障教學活動的高效進行。
6. 原理圖
原理圖使用AD繪制,可供實物參考,仿真不同于實物,經驗不足不要輕易搞實物。
Proteus仿真和實物作品的區(qū)別:
1.運行環(huán)境:Proteus仿真是在計算機上運行的,而實物則是在硬件電路板上運行。
2.調試方式:在Proteus仿真中,可以方便地進行單步調試和觀察變量值的變化,而在實物中則需要通過調試器或者串口輸出等方式進行調試。
電路連接方式:在Proteus仿真中,可以通過軟件設置進行電路連接的修改,而在實物中則需要通過硬件電路板和連接線進行修改。
3.運行速度:Proteus仿真通常比實物運行速度快,因為仿真是基于計算機運行的,而實物則需要考慮電路板上的物理限制和器件的響應時間等因素。
4.功能實現(xiàn):在Proteus仿真中,可以通過軟件設置實現(xiàn)不同的功能,而在實物中則需要根據電路設計和器件的性能進行實現(xiàn)。
7. 設計資料內容清單&&下載鏈接
資料設計資料包括仿真,程序代碼、講解視頻、功能要求、設計報告、軟硬件設計框圖等。
0、常見使用問題及解決方法–必讀?。。。?/p>
1、程序
2、proteus仿真
3、功能要求
4、軟硬件流程圖
5、開題報告
6、設計報告
7、原理圖
8、元器件清單
9、講解視頻
Altium Designer 安裝破解
KEIL+proteus 單片機仿真設計教程
KEIL安裝破解
Proteus元器件查找
Proteus安裝
Proteus簡易使用教程
單片機學習資料
相關數(shù)據手冊
答辯技巧
設計報告常用描述
鼠標雙擊打開查找嘉盛單片機51 STM32單片機課程畢業(yè)設計.url
資料下載鏈接:
https://docs.qq.com/doc/DS0pDdFdBYmFwZkJs