




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 第十二屆“挑戰杯”山東省大學生課外學術科技作品競賽作品名稱: 自修室合理占座裝置 學校全稱: 濟寧學院 申報者姓名: 齊 三 周廣興 指導老師: 程 杰 房永剛 類別:自然科學類學術論文 哲學社會科學類社會調查報告和學術論文 科技發明制作A類 科技發明制作B類目錄摘要(3)正文(3)1.1 設計要求(3)2.1 系統設計(4)(4)(4)3.1 系統方案討論與論證(4)(4) (5)(6)4.1方案實現(6) (6)(6)(7)5.1 系統軟件設計(7)(7)6參考文獻 (8)附 錄(8)附錄一:主要元件清單(8)附錄二:裝置使用說明(9)附錄三:電路設計原理圖及相關仿真圖(9)附錄四:部分
2、源程序代碼(10)摘要 由于高等教育的普遍化,大學生的數量逐年增加,目前很多高校自修室內桌椅數量已經不足以 滿足眾多大學生的學習需要,拿書本占座,不僅沒有充分利用自修室硬件資源,而且學生可能會因為自修室占座問題而引起不必要的糾紛。本設計由STC89C51單片機控制,通過鍵盤輸入密碼來實現身份確認,以1602液晶作為顯示模塊,不僅能夠顯示日期、時間、環境溫度,而且能夠隨機顯示勵志話語,激勵莘莘學子。在設計中我們還利用光敏電阻來控制液晶顯示,有效地節約電能。關鍵字:大學生 占座 顯示 光敏電阻 溫度 節能正 文 1.1設計要求 (1)具有顯示日期、時間、環境溫度的功能;(2)具有紅燈指示、顯示倒計
3、時和勵志話語功能; (3)具有按鍵輸入功能;(4)可以通過密碼確認身份功能;(5)具有調時功能;(6)實現光控開關功能;(7)周期、時間間隔測量:0.1mS1S,誤差0.1%;頻率測量:1Hz200KHz,誤差0.1%; 2.1系統設計 2.1.1 系統框圖2.1.2 系統實現功能 由電源對整個系統供電,單片機外接LED發光二極管,液晶顯示模塊,光敏傳感器模塊,溫度傳感器模塊,按鍵模塊等,現對各模塊功能加以介紹;單片機作為系統總控制器,讓個模塊能夠高效地按程序執行;液晶顯示模塊用來顯示時間,溫度,勵志話語等信息;光敏傳感器模塊用來在適宜光照條件下控制液晶顯示器模塊背光燈的亮與滅,以節約電能;按
4、鍵模塊用來輸入密碼,調試系統等作用;LED發光二極管用作指示作用3.1 系統方案討論與論證控制器的選取方案一:采用FPGA為系統的控制器,FPGA可以實現各種復雜的邏輯功能,模塊大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩定性,并且可應用EDA軟件仿真、調試,易于進行功能控制。FPGA采用并行的輸入輸出方式,提高了系統的處理速度,適合作為大規模實時系統的控制核心。通過輸入模塊將參數輸入給FPGA,FPGA通過程序設計控制步進電機運動,但是由于本設計對數據處理的時間要求不高,FPGA的高速處理的優勢得不到充分體現,并且由于其集成度高,使其成本偏高,同時由于芯片的引腳較多,實物硬
5、件電路板布線復雜,加重了電路設計和實際焊接的工作。方案二:采用AT89c51作為系統控制的方案。單片機算術運算功能強,軟件編程靈活、自由度大,可用軟件編程實現各種算法和邏輯控制。由于其功耗低、體積小、技術成熟和成本低等優點,各個領域應用廣泛。并且,由于芯片引腳少,在硬件很容易實現。因此,在本設計中采用AT89c51處理輸入的數據。綜合上述兩種方案,方案二可以滿足設計要求光敏開關的選取方案一:利用光敏電阻通過AD轉換,制作成光敏開關,當光敏電阻受到一定波長范圍的光照時, 它的阻值(亮電阻)急劇減少, 電路中電流迅速增大。 一般希望暗電阻越大越好, 亮電阻越小越好,此時光敏電阻的靈敏度高。 實際光
6、敏電阻的暗電阻值一般在兆歐級, 亮電阻在幾千歐以下方案二: 光敏(可見光和近紅外光)傳感器能夠探測到波長在400納米1100納米范圍內的紅外光,探測角度為60,其中紅外光波長在940納米附近時,其靈敏度達到最大。光敏探頭將外界可見光和近紅外光的強弱變化轉化為電流的變化,通過A/D轉換器反映為0255范圍內數值的變化。外界光越強,數值越小;光越弱,數值越大。 綜合以上兩種方案,方案一適合本設計,可以實現要求溫度傳感器的選取方案一:選用鉑電阻溫度傳感器,此類溫度傳感器線性度、穩定性等方面性能都很好,但其成本較高。方案二:采用熱敏電阻,選用此類元器件有價格便宜的優點,但由于熱敏電阻的非線性特性會影響
7、系統的精度。方案三:采用18B20,獨特的單線接口方式,18B20在與微處理器連接時僅需要一條口線即可實現微處理器與18B20的雙向通訊。 測溫范圍 55125,固有測溫分辨率0.5。 支持多點組網功能,多個DS18B20可以并聯在唯一的三線上,最多只能并聯8個,如果數量過多,會使供電電源電壓過低,從而造成信號傳輸的不穩定,實現多點測溫,工作電源為 35V/DC 比較以上三種方案,方案三具有明顯的優點,因此選用方案三4.1方案實現 溫度傳感器模塊電路本設計采用18B20作為溫度傳感器模塊的核心器件。18B20在與微處理器連接時僅需要一條口線即可實現微處理器與18B20的雙向通訊。 測溫范圍 5
8、5125,固有測溫分辨率0.5。光敏傳感器模塊按鍵模塊按鍵采用4*4矩陣鍵盤,其中15個鍵為有效按鍵,按鍵電路如圖5.1 系統軟件設計主程序流程6參考文獻 1 李朝青單片機原理及接口技術北京:北京航空航天大學出版社, 1994 3 譚丙煜. 怎樣撰寫科學論文. 沈陽:遼寧人民出版社,1982:594 王福瑞單片微機測控系統設計大全北京:北京航空航天大學出版社,1998 5 童詩白 華成英 模擬電子技術基礎 高等教育出版社,2000:12附 錄附錄一:主要元件清單STC89S52單片機1片DS1302時鐘芯片1片光敏開關 1個18b201個AD芯片1片1602液晶1塊其它器材若干附錄二:裝置使用
9、說明功能實現開機后液晶顯示器顯示勵志話語,時間,周圍環境溫度;調整時間:長按“離開”鍵三秒,輸入六位數時間,格式為HHMMSS,然后按“調時”鍵;占座后暫時有事離開:長按“離開”鍵三秒,再按下“確定”鍵,設置離開時的密碼,再確認一下密碼,輸入確認密碼后,裝置開始倒計時(時間由程序設定),紅燈亮;若同學在規定時間內回來:按“回來”鍵,輸入離開時的設定密碼,此時紅燈滅,裝置進入開始界面;若同學在規定時間后未回來:倒計時結束之后,裝置紅燈滅,自動進入開始界面;附錄三:電路設計原理圖及相關仿真圖附錄四:部分源程序代碼#include<reg52.h>#include < intrin
10、s.h >#define uint unsigned int#define uchar unsigned char#define ulong unsigned longuchar flagt1=1, flag7=0;flagt0=1;flag10=0,flag9=0;flag=1,flag1=1,flag2=1;char MIN; char SEC;char SEC0;char flagh;sbit led=P20;sbit bla=P27;/*/定義外部函數/*/const char SLF = "Left:"extern void LCDP2(unsigned c
11、har dat);extern bit lcd_busy();extern void write_command(uchar command);extern void write_date(uchar date);extern void lcd_init();extern void CLR_Line(void);extern void display();extern void LCD_Print(uchar line, char*str);extern void Enable();extern void LCDz_init();extern void lizhih();extern void
12、 write_sfm(uchar add,uchar date);extern uchar keyscan(); /鍵盤返回值extern void write_command(uchar command); /lcd寫命令extern void write_date(uchar date); /lcd寫數據extern void lcd_init(); /lcd初始化sbit beep=P11; /蜂鳴器sbit relay=P21;/繼電器uchar code name="No Pain,No Gain"uchar code name1="input key:
13、"uchar code name2="set time:"uchar code new1="set new:"uchar code new2="confirm:"uchar table116=" time is money !"/ 第一行顯示內容uchar table216="00:00:00 . C"/ 第二顯示內容uchar code rightname=" right!"uchar code errorname=" error!"uchar
14、 code setname=" set ok!"uchar shi=0,fen=0,miao=0,count=0,n=0;uchar keyvalue=0,0,0,0,0,0;/輸入緩沖區uchar keyvalue1=0,0,0,0,0,0;/密碼設置緩沖區uchar keyvalue2=0,0,0,0,0,0;uchar keyvalue5=0,0,0,0,0,0;uchar i=0;void jsjm();void ksjm();void wendu();void AD(); / 輸出緩沖區清0void keyvalue_init()uchar k;for(k=0;k
15、<6;k+)keyvaluek=0;void keyvalue1_init()/密碼設置緩沖區1清0uchar k;for(k=0;k<6;k+)keyvalue1k=0; /密碼設置緩沖區2清0void keyvalue2_init()uchar k;for(k=0;k<6;k+)keyvalue2k=0;/* * 函 數 名: inputcode* 功能描述: 數字密碼的輸入* 函數說明: * 調用函數:* 全局變量:* 輸 入: 無* 返 回: 無* 設 計 者:周廣興 日期:2010-12-4* 修 改 者:周廣興 日期:2010-12-4* 版 本:*/void i
16、nputtime()if(keyscan()=0)write_date(0x30+0);keyvaluei=0;while(keyscan()=0); delayms(10);if(keyscan()=1)write_date(0x30+1);keyvaluei=1;while(keyscan()=1);delayms(10);if(keyscan()=2)write_date(0x30+2);keyvaluei=2;while(keyscan()=2);delayms(10);if(keyscan()=3)write_date(0x30+3);keyvaluei=3;while(keysca
17、n()=3);delayms(10);if(keyscan()=4)write_date(0x30+4);keyvaluei=4;while(keyscan()=4);delayms(10);if(keyscan()=5)write_date(0x30+5);keyvaluei=5;while(keyscan()=5);delayms(10);if(keyscan()=6)write_date(0x30+6);keyvaluei=6;while(keyscan()=6);delayms(10);if(keyscan()=7)write_date(0x30+7);keyvaluei=7;whil
18、e(keyscan()=7);delayms(10);if(keyscan()=8)write_date(0x30+8);keyvaluei=8;while(keyscan()=8);delayms(10);if(keyscan()=9)write_date(0x30+9);keyvaluei=9;while(keyscan()=9);delayms(10);i+;void inputcode()while(keyscan()=0)keyvaluei=keyscan();i+;write_date(0x2a);while(keyscan()=0); delayms(10);while(keys
19、can()=1)keyvaluei=keyscan();i+;write_date(0x2a);while(keyscan()=1);delayms(10);/* * 函 數 名: resetcode* 功能描述: 密碼的重置* 函數說明: * 調用函數:* 全局變量:* 輸 入: 無* 返 回: 無* 設 計 者:周廣興 日期:2010-12-4* 修 改 者:周廣興 日期:2010-12-4* 版 本:*/void resetcode()uchar number,number1=0;flag=1;lcd_init();for(number=0;namenumber!='0'
20、number+)write_date(namenumber);delayms(10);write_command(0x0c);write_command(0x80+0x40);for(number=0;name2number!='0'number+)write_date(name2number);delayms(10);write_command(0x0f);write_command(0x80+0x40+9);while(flag)AD();if(keyscan()=0)|(keyscan()=1)|(keyscan()=2)|(keyscan()=3)|(keyscan()
21、=4)|(keyscan()=5)|(keyscan()=6)|(keyscan()=7)|(keyscan()=8)|(keyscan()=9)inputtime();/調時開始/else if(keyscan()=14)shi=10*keyvalue0+keyvalue1;fen=10*keyvalue2+keyvalue3;miao=10*keyvalue4+keyvalue5;if(shi>23|fen>59|miao>59)shi=0;fen=0;miao=0;lcd_init();write_command(0x0c);write_command(0x80+0x4
22、0); for(number=0;errornamenumber!='0'number+) write_date(errornamenumber);delayms(10); delayms(3000);lcd_init();flag1=0;ET0=1;i=0;keyvalue_init(); flag=0;beepon();lcd_init();ksjm();flagt1=1;flagt0=1;/調時結束/else if(keyscan()=10)/返回普通密碼輸入狀態i=0;keyvalue_init(); flag=0;beepon();lcd_init();ksjm();
23、flagt1=1;flagt0=1;else if(keyscan()=11)/確認,比較輸入密碼與正確密碼 number=0,number1=0;i=0;beepon();for(number=0;number<6;number+)if(keyvalue5number=keyvaluenumber)number1+;if(number1!=number)/密碼不正確number1=0,number=0;keyvalue_init();lcd_init();relay=1;for(number=0;namenumber!='0'number+)write_date(nam
24、enumber);delayms(10);write_command(0x0c);write_command(0x80+0x40); for(number=0;errornamenumber!='0'number+) write_date(errornamenumber);delayms(10); delayms(3000);lcd_init();relay=1;for(number=0;namenumber!='0'number+)write_date(namenumber);delayms(10);write_command(0x0c);write_comm
25、and(0x80+0x40); for(number=0;name2number!='0'number+) write_date(name2number);delayms(10); write_command(0x0f);else if(number1=number)number=0,number1=0;lcd_init();for(number=0;namenumber!='0'number+)write_date(namenumber);delayms(10);write_command(0x0c);write_command(0x80+0x40); for
26、(number=0;new1number!='0'number+) write_date(new1number);delayms(10); write_command(0x0f);flag1=1;while(flag1) /輸入新密碼AD();if(keyscan()=0)|(keyscan()=1)|(keyscan()=2)|(keyscan()=3)|(keyscan()=4)|(keyscan()=5)|(keyscan()=6)|(keyscan()=7)|(keyscan()=8)|(keyscan()=9)inputcode();else if(keyscan()
27、=10)i=0;keyvalue_init(); flag=0,flag1=0;beepon();lcd_init();ksjm();flagt1=1;flagt0=1;else if(keyscan()=11)number=0,number1=0;i=0;beepon();for(number=0;number<6;number+)keyvalue1number=keyvaluenumber;lcd_init();keyvalue_init();relay=0;for(number=0;namenumber!='0'number+)write_date(namenumb
28、er);delayms(10);write_command(0x0c);write_command(0x80+0x40); for(number=0;new2number!='0'number+) write_date(new2number);delayms(10); write_command(0x0f);flag2=1;while(flag2)AD();if(keyscan()=0)|(keyscan()=1)|(keyscan()=2)|(keyscan()=3)|(keyscan()=4)|(keyscan()=5)|(keyscan()=6)|(keyscan()=7
29、)|(keyscan()=8)|(keyscan()=9)inputcode();else if(keyscan()=10)i=0;keyvalue_init(); flag=0,flag1=0,flag2=0;ksjm();flagt1=1;flagt0=1;else if(keyscan()=11) /兩次新密碼輸入相同,設置成功number=0,number1=0;i=0;beepon();for(number=0;number<6;number+)keyvalue2number=keyvaluenumber;keyvalue_init();for(number=0;number&
30、lt;6;number+)if(keyvalue2number=keyvalue1number)number1+;if(number1=number)number=0,number1=0;lcd_init();for(number=0;namenumber!='0'number+)write_date(namenumber);delayms(10);write_command(0x0c);write_command(0x80+0x40); for(number=0;setnamenumber!='0'number+) write_date(setnamenumb
31、er);delayms(10); delayms(2000);lcd_init();keyvalue5_init();for(number=0;number<6;number+)/密碼設置成功,把密碼輸入到24c08里面keyvalue5number=keyvalue2number;keyvalue1_init();keyvalue2_init();jsjm();flag=0,flag1=0,flag2=0;else if(number1!=number)/兩次新密碼輸入不相同,設置不成功number=0,number1=0; lcd_init();for(number=0;namenu
32、mber!='0'number+)write_date(namenumber);delayms(10);write_command(0x0c);write_command(0x80+0x40); for(number=0;errornamenumber!='0'number+) write_date(errornamenumber);delayms(10); delayms(3000);lcd_init();relay=1;for(number=0;namenumber!='0'number+)write_date(namenumber);del
33、ayms(10);write_command(0x0c);write_command(0x80+0x40); for(number=0;name2number!='0'number+) write_date(name2number);delayms(10); write_command(0x0f);flag2=0;flag1=0;keyvalue1_init();keyvalue2_init(); while(flag9)AD();lcd_init();for(number=0;namenumber!='0'number+)write_date(namenumb
34、er);delayms(10);write_command(0x0c);write_command(0x80+0x40);for(number=0;name1number!='0'number+) write_date(name1number);delayms(10);write_command(0x0f);write_command(0x80+0x40+10);number=0;flag10=1;i=0;keyvalue_init();while(flag10)AD();if(keyscan()=0)|(keyscan()=1)|(keyscan()=2)|(keyscan(
35、)=3)|(keyscan()=4)|(keyscan()=5)|(keyscan()=6)|(keyscan()=7)|(keyscan()=8)|(keyscan()=9)inputcode();else if(keyscan()=10)i=0;keyvalue_init();flag=0,flag1=0;beepon();lcd_init();flag10=0;flag9=0;jsjm();else if (flagh=1)i=0;keyvalue_init();flag=0,flag1=0;beepon();lcd_init();flag10=0;flag9=0;jsjm();i=0;
36、keyvalue5_init();/自己設置的密碼只能使用一次ET1=0;flagh=0;else if(keyscan()=11)number=0,number1=0;i=0;for(number=0;number<6;number+)if(keyvalue5number=keyvaluenumber)number1+;if(number=number1)i=0;keyvalue_init();i=0;keyvalue5_init();/自己設置的密碼只能使用一次lcd_init();flag=0;flag1=0;flag2=0;flag10=0;flag9=0;flagt1=1;ET
37、1=0;ET0=1;fen=9-MIN+fen;miao=59-SEC+miao;if(miao>59)fen=fen+1;miao=miao-60;if(fen>59)shi=shi+1;fen=fen-60;if(shi>23)shi=0;flagt0=1;ksjm();elsenumber=0,number1=0;lcd_init();for(number=0;namenumber!='0'number+)write_date(namenumber);delayms(10);write_command(0x0c);write_command(0x80+0
38、x40);for(number=0;errornamenumber!='0'number+) write_date(errornamenumber);delayms(10); delayms(3000);lcd_init();jsjm();flag10=0;flag9=1; i=0;keyvalue5_init();/自己設置的密碼只能使用一次lcd_init();flagt1=1;flagt0=1;ksjm();/*開始界面*/*/void ksjm()led=0;lcd_init();write_command(0x80+40);/for(i=0;table2i!='0'i+)write_date(table2i);TMOD |=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;i=0;void timer0() interrupt 1 TH0=(65536-50000)/256;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小組合作學習與課堂互動關系研究
- 小學生心理素質提升的課程設置與實踐研究
- 小學階段法律教育課程的優化策略
- 宿舍安全與生活習慣養成
- 臨近報廢管理制度
- 主動上報管理制度
- 2025年免疫治療在克羅恩病治療中的突破性進展報告
- 事故評估管理制度
- 云倉托盤管理制度
- 互助中心管理制度
- 第五單元《面積》(教學設計)-【大單元教學】三年級數學下冊同步備課系列(人教版)
- 摜蛋考試試題及答案
- GA/T 2159-2024法庭科學資金數據清洗規程
- 企業風險管理-戰略與績效整合(中文版-雷澤佳譯)
- 業務學習踝關節骨折
- 實景演出制作合同協議
- 《醫療機構重大事故隱患判定清單(試行)》知識培訓
- 浙江省杭州市2024年中考英語真題(含答案)
- 《陸上風電場工程設計概算編制規定及費用標準》(NB-T 31011-2019)
- 下肢靜脈曲張診斷及治療進展PPT學習教案
- 裝修管理規則-城市綜合體---成都租戶指引
評論
0/150
提交評論