標題: 單片機校園打鈴系統(tǒng)源程序+Proteus仿真 [打印本頁]

作者: YF12    時間: 2020-7-12 17:41
標題: 單片機校園打鈴系統(tǒng)源程序+Proteus仿真
主頻率    12M
功能:
        1、使用DS1302獲得時鐘信號,能夠進行時間設置
        2、能夠設置10組打鈴時間,并具有臨時打鈴功能,打鈴的時長為5S鐘
        3、1602液晶屏幕顯示數(shù)據(jù)。

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


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

單片機源程序如下:
  1. /*

  2. 主頻率    12M

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

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

  15. */

  16. #include "all.h"

  17. u8 Mode=0;                        //模式標記
  18. u8 Ring_Sign=0;                //打鈴標記

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

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


作者: YF12    時間: 2020-7-18 07:53
忘記加臨時打鈴功能了,只需要  Time_Data=1;  鈴聲就會響起來,可以自己判斷鍵盤上面哪一個按鍵被按下就馬上響。
作者: 楊國福    時間: 2021-5-23 16:34
請問頭文件all. h什么意思
作者: YF12    時間: 2021-5-29 11:03
楊國福 發(fā)表于 2021-5-23 16:34
請問頭文件all. h什么意思

一個頭文件,all就是全部的意思,all.h里面我包含了全部的頭文件。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1