找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 4969|回復(fù): 3
收起左側(cè)

單片機(jī)校園打鈴系統(tǒng)源程序+Proteus仿真

[復(fù)制鏈接]
ID:661402 發(fā)表于 2020-7-12 17:41 | 顯示全部樓層 |閱讀模式
主頻率    12M
功能:
        1、使用DS1302獲得時(shí)鐘信號(hào),能夠進(jìn)行時(shí)間設(shè)置
        2、能夠設(shè)置10組打鈴時(shí)間,并具有臨時(shí)打鈴功能,打鈴的時(shí)長(zhǎng)為5S鐘
        3、1602液晶屏幕顯示數(shù)據(jù)。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
12.png

使用方法:    按鍵“÷”時(shí)間調(diào)整,多次按下調(diào)整位
按鍵“X”打鈴時(shí)間調(diào)整,多次按下調(diào)整位
按鍵“=”打鈴時(shí)間數(shù)組調(diào)整
按鍵“+”數(shù)據(jù)加
按鍵“-”數(shù)據(jù)減
按鍵“/C”退出
單片機(jī)主頻率    12M

單片機(jī)源程序如下:
  1. /*

  2. 主頻率    12M

  3. 項(xiàng)目名稱: 校園打鈴系統(tǒng)
  4. 功能:
  5. 1、8位數(shù)碼管顯示當(dāng)前時(shí)間。
  6. 2、使用DS1302獲得時(shí)鐘信號(hào),能夠進(jìn)行時(shí)鐘設(shè)置
  7. 3、能夠設(shè)置10組打鈴時(shí)間,并具有臨時(shí)打鈴功能,打鈴的時(shí)長(zhǎng)為5S鐘
  8. 4、使用1602液晶屏幕顯示。

  9. 使用方法:        按鍵“÷”時(shí)間調(diào)整,多次按下調(diào)整位
  10.                         按鍵“X”打鈴時(shí)間調(diào)整,多次按下調(diào)整位
  11.                         按鍵“=”打鈴時(shí)間數(shù)組調(diào)整
  12.                         按鍵“+”數(shù)據(jù)加
  13.                         按鍵“-”數(shù)據(jù)減
  14.                         按鍵“/C”退出

  15. */

  16. #include "all.h"

  17. u8 Mode=0;                        //模式標(biāo)記
  18. u8 Ring_Sign=0;                //打鈴標(biāo)記

  19. void main(void)
  20. {       
  21.         u8 i=0,q=0,s;
  22.         lcd_start();        //屏幕初始化
  23.         lcd_CLS();                //清屏       
  24.         Init_Ds1302();        //DS1302初始化
  25.         Timer0Init();   //定時(shí)器(鈴聲)初始化
  26.         P37=0;
  27.         TR0 = 1;        //啟動(dòng)定時(shí)器0
  28.        
  29.         while(1)
  30.         {       
  31.                 Key4x4_2();                                                //4X4按鍵數(shù)據(jù)(松手后)讀取
  32.                 Key_Mode();                                                //模式判斷
  33.                
  34.                 if(Mode>0)                                                //非正常模式進(jìn)入
  35.                 {
  36.                         if(LCD1602_Cursor_address==0)//非正常模式光標(biāo)一定存在
  37.                                 LCD1602_Cursor_address=1;
  38.                        
  39.                         if(Mode==1)                                        //時(shí)間調(diào)整
  40.                         {
  41.                                 Time_Settings();                //數(shù)據(jù)調(diào)整
  42.                                 lcd_position(16);                //模式標(biāo)記
  43.                                 lcd_write_data('N');
  44.                                 lcd_write_data('z');
  45.                         }
  46.                         else                                                //鈴聲時(shí)間調(diào)整
  47.                         {
  48.                                 Alarm_Clock();                        //數(shù)據(jù)調(diào)整
  49.                                 lcd_position(0);                //模式標(biāo)記
  50.                                 lcd_write_data(Ring/10+'0');
  51.                                 lcd_write_data(Ring%10+'0');
  52.                                 lcd_position(16);
  53.                                 lcd_write_data('S');
  54.                                 lcd_write_data('j');
  55.                         }
  56.                         LCD_1602_Cursor_address();        //光標(biāo)閃爍
  57.                         delay_ms(35);                                //閃爍頻率不能太高
  58.                 }
  59.                 else                                                        //正常模式進(jìn)入
  60.                 {
  61.                         Read_Time_Ds1302();                        //讀取時(shí)鐘信息
  62.                         lcd_printf_Ds1302();                //時(shí)間數(shù)據(jù)刷新
  63.                        
  64.                         i=10;
  65.                         while(i--)                                        //判斷是否打鈴時(shí)間
  66.                         {
  67.                                 for(q=0;q<3;q++)                //秒分時(shí)對(duì)比
  68.                                 {
  69.                                         if(Time[q]==Ring_Data[i][q])
  70.                                                 Ring_Sign=1;
  71.                                         else                                //秒分時(shí)只要有一個(gè)不符合就不允許打鈴
  72.                                         {
  73.                                                 Ring_Sign=0;       
  74.                                                 goto Goto;                //無(wú)條件跳到Goto
  75.                                         }
  76.                                 }
  77.                                 Goto:
  78.                                 if(Ring_Sign)                                       
  79.                                 {
  80.                                         s=(Time[0]+5);                //打鈴時(shí)間調(diào)整
  81.                                         Time_Data=1;                //打鈴
  82.                                 }
  83.                         }
  84.                        
  85.                         if(Time[0]>s)                                //時(shí)間到停止打鈴
  86.                         {
  87.                                         Time_Data=0;
  88.                         }
  89.                 }
  90.         }
  91. }
復(fù)制代碼

所有資料51hei提供下載:
電子時(shí)鐘.zip (170.3 KB, 下載次數(shù): 101)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:661402 發(fā)表于 2020-7-18 07:53 | 顯示全部樓層
忘記加臨時(shí)打鈴功能了,只需要  Time_Data=1;  鈴聲就會(huì)響起來(lái),可以自己判斷鍵盤上面哪一個(gè)按鍵被按下就馬上響。
回復(fù)

使用道具 舉報(bào)

ID:925918 發(fā)表于 2021-5-23 16:34 | 顯示全部樓層
請(qǐng)問(wèn)頭文件all. h什么意思
回復(fù)

使用道具 舉報(bào)

ID:661402 發(fā)表于 2021-5-29 11:03 | 顯示全部樓層
楊國(guó)福 發(fā)表于 2021-5-23 16:34
請(qǐng)問(wèn)頭文件all. h什么意思

一個(gè)頭文件,all就是全部的意思,all.h里面我包含了全部的頭文件。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表