這是一款智能視力保護儀基單片機的設(shè)計
包含了多個模塊。有:電源模塊、超聲波模塊、單片機主控模塊、蜂鳴器報警模塊、光線強度檢測模塊。
具有時間倒計時、超聲波測距、光線強弱測量等功能,以上部分均可調(diào)節(jié)閾值以及達到閾值后蜂鳴器報警
但是程序不完整 求幫助
電路原理圖如下:
51hei.png (45.31 KB, 下載次數(shù): 50)
下載附件
2021-6-8 21:11 上傳
本設(shè)計是以單片機為核心的主體電路,實現(xiàn)定時、坐姿糾正、光線強度檢測和報警功能。首先是對各單元電路進行設(shè)計,并選擇合適的元器件。在選擇元器件時,要注意所選芯片的性價比,對于電阻、電容等常用元件要先進行參數(shù)計算后再選擇;其次是設(shè)計整個電路,并在計算機上對各單元電路進行相應(yīng)功能的調(diào)試仿真。其中單片機選用較為普遍的STC89C52,坐姿傳感器選用超聲波傳感器,光線報警選用光敏電阻來實現(xiàn),報警發(fā)聲選用蜂鳴器發(fā)聲硬件電路。
它具備以下功能和特點:
(1)當使用者臉部與讀物之間的距離小于設(shè)定距離時,電路將發(fā)出聲音提示;
(2)當讀寫環(huán)境光線強度低于設(shè)定值時,電路將發(fā)出聲音提示;
(3)當使用時間達到45分鐘時,電路自動發(fā)出提示,提醒使用者注意休息;
(4)電路可靠,做出實物能夠?qū)崿F(xiàn)相應(yīng)的功能。真正幫助學生做到規(guī)定:學生在讀寫時,應(yīng)在一定亮度下,眼離讀物一尺,身離書桌一拳。
2 總體方案設(shè)計
系統(tǒng)采用STC89C52單片機作為多功能視力保護器的核心控制單元,本系統(tǒng)通過光敏電阻采集光線信號,通過AD采集光線信號的強弱,把光線強度等級化,通過設(shè)定報警等級來實現(xiàn)報警;利用超聲波測距傳感器測出人臉部與桌面的距離,當小于設(shè)定距離時發(fā)出報警聲提醒;通過單片機內(nèi)部定時器計時,當使用達到45分鐘時電路自動發(fā)出聲音提示,提醒使用者注意休息;系統(tǒng)采用的報警電路由三極管驅(qū)動蜂鳴器組成。系統(tǒng)總體的設(shè)計方框圖如圖2.1所示。
光強檢測系統(tǒng)采用光敏電阻。光敏電阻的工作原理是當有光線照射時,電阻內(nèi)原本處于穩(wěn)定狀態(tài)的電子受到激發(fā),成為自由電子,所以光線越強,產(chǎn)生的自由電子也就越多,電阻就會越小。光敏電阻的優(yōu)點有內(nèi)部的光電效應(yīng)和電極無關(guān),即可以使用直流電源。靈敏度和半導體材料、以及入射光的波長有關(guān),價格低廉,性價比高。
2.1.4 報警提示模塊
報警系統(tǒng)采用蜂鳴器報警。蜂鳴器,體積小,重量輕,裝配簡單,使用方便。價格實惠,對推動視力保護器的普及有很好的優(yōu)勢,能夠較好的滿足設(shè)計的要求。
2.1.5 坐姿檢測模塊
坐姿檢測系統(tǒng)采用超聲波傳感器測距,通過測量人臉與桌面的距離來確定坐姿。當距離小于設(shè)定距離時就發(fā)出警報提醒。超聲波傳感器體積小,重量輕,使用方便。價格實惠,是一種較為理想的方案。
2.1.6 顯示模塊
顯示界面采用LCD1602液晶進行顯示。LCD1602由于其顯示清晰,顯示內(nèi)容豐富、清晰,顯示信息量大,使用方便,顯示快速而得到了廣泛的應(yīng)用。在本設(shè)計中很好的發(fā)揮其優(yōu)勢。
2.2 最終方案
經(jīng)過反復論證,我們最終確定了如下方案:
(1)電源采用6節(jié)5號電池。
(2)采用STC89C52單片機作為主控制器。
(3)用光敏電阻檢測光照強度。
(4)用超聲波傳感器檢測坐姿。
(5)用LCD1602液晶顯示。
(6)用蜂鳴器實現(xiàn)報警。
單片機源程序如下:
- #include <reg52.h>
- #define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
- #include <intrins.h>
- #include "eepom52.h"
- sbit SCL=P2^6; //SCL定義,連接ADC0832SCL腳
- sbit DO=P2^5; //DO定義,連接ADC0832DO腳
- sbit CS=P2^4; //CS定義,連接ADC0832CS腳
- sbit beep = P2^7;
- //這三個引腳參考資料
- sbit rs=P3^2; //1602數(shù)據(jù)/命令選擇引腳 H:數(shù)據(jù) L:命令
- sbit rw=P3^3; //1602讀寫引腳 H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit e =P3^4; //1602使能引腳 下降沿觸發(fā)
- sbit c_send = P3^7; //超聲波發(fā)射
- sbit c_recive = P3^6; //超聲波接收
- uchar flag_hc_value; //超聲波中間變量
- long distance; //距離
- uint set_d; //距離
- bit flag_csb_juli; //超聲波超出量程
- uint flag_time0; //用來保存定時器0的時候的
- bit flag_200ms = 1 ;
- uchar guangxian; //光線的顯示變量
- uchar set_gx; //設(shè)置光線的強弱的變量
- uchar value;
- uchar flag_alarm; //報警變量
- uchar miao = 55,fen = 44,shi;
- uchar xuexi_start; //開始學習標志位
- uchar menu_1;
- /******************把設(shè)置溫度數(shù)據(jù)保存到單片機內(nèi)部eepom中******************/
- void write_eepom_12()
- {
- SectorErase(0x2000);
- byte_write(0x2000, set_d % 256);
- byte_write(0x2001, set_d / 256);
- byte_write(0x2002, set_gx);
- byte_write(0x2057, value);
- }
- /******************把數(shù)據(jù)從單片機內(nèi)部eepom中讀出來*****************/
- void read_eepom12()
- {
- set_d = byte_read(0x2001);
- set_d =set_d * 256 + byte_read(0x2000);
- set_gx = byte_read(0x2002);
- value = byte_read(0x2057);
- }
- /**************開機自檢eepom初始化*****************/
- void init_eepom()
- {
- read_eepom12(); //先讀
- if(value != 2) //新的單片機初始單片機內(nèi)問EEPOM
- {
- set_d = 300;
- value = 2;
- set_gx = 50;
- write_eepom_12();
- }
- }
- /********************************************************************
- * 名稱 : delay()
- * 功能 : 延時,延時時間大概為5US。
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void delay_uint(uint q)
- {
- while(q--);
- }
- /********************************************************************
- * 名稱 : bit Busy(void)
- * 功能 : 這個是一個讀狀態(tài)函數(shù),讀出函數(shù)是否處在忙狀態(tài)
- * 輸入 : 輸入的命令值
- * 輸出 : 無
- ***********************************************************************/
- bit busy(void)
- {
- bit busy_flag = 0;
- rs = 0;
- rw = 1;
- e = 1;
- delay_uint(3);
- busy_flag = (bit)(P1 & 0x80);
- e = 0;
- return busy_flag;
- }
- /********************************************************************
- * 名稱 : write_com(uchar com)
- * 功能 : 1602命令函數(shù)
- * 輸入 : 輸入的命令值
- * 輸出 : 無
- ***********************************************************************/
- void write_com(uchar com)
- {
- while(busy());
- e=0;
- rs=0;
- rw=0;
- P1=com;
- delay_uint(3);
- e=1;
- delay_uint(25);
- e=0;
- }
- /********************************************************************
- * 名稱 : write_data(uchar dat)
- * 功能 : 1602寫數(shù)據(jù)函數(shù)
- * 輸入 : 需要寫入1602的數(shù)據(jù)
- * 輸出 : 無
- ***********************************************************************/
- void write_data(uchar dat)
- {
- while(busy());
- e=0;
- rs=1;
- rw=0;
- P1=dat;
- delay_uint(3);
- e=1;
- delay_uint(25);
- e=0;
- }
- /***********************lcd1602上顯示兩位十進制數(shù)************************/
- void write_sfm2(uchar hang,uchar add,uchar date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
- /***********************lcd1602上顯示超聲波距離************************/
- void write_sfm_csb(uchar hang,uchar add,uint date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/100%10);
- write_data('.');
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
- /********************************************************************
- * 名稱 : init_1602()
- * 功能 : 1602初始化,請參考1602的資料
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void init_1602()
- {
- write_com(0x38); //
- write_com(0x0c);
- write_com(0x06);
- }
- /********************************************************************
- * 名稱 : write_string(uchar hang,uchar lie,uchar *p)
- * 功能 : 改變液晶中某位的值,如果要讓第一行,第五個字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
- write_string(1,5,"ab cd ef;")
- * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
- * 輸出 : 無
- ***********************************************************************/
- void write_string(uchar hang,uchar add,uchar *p)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- while(1)
- {
- if(*p == '\0') break;
- write_data(*p);
- p++;
- }
- }
- uchar key_can;
- /********************獨立按鍵程序*****************/
- void key()
- {
- static uchar key_new;
- key_can = 20;
- if((P2 & 0x0f) != 0x0f)
- {
- delay_uint(50);
- if(((P2 & 0x0f) != 0x0f) && (key_new == 1))
- {
- key_new = 0;
- switch(P2 & 0x0f)
- {
- case 0x0e: key_can = 1; break; //左邊第1個
- case 0x0d: key_can = 2; break; //左邊第2個
- case 0x0b: key_can = 3; break; //左邊第3個
- case 0x07: key_can = 4; break; //左邊第4個
- }
- // write_sfm2(2,0,key_can);
- }
- }
- else
- key_new = 1;
- }
復制代碼 以上內(nèi)容word文檔51hei下載(程序不完整,大家能幫忙補全一下嗎):
智能視力保護器的設(shè)計終結(jié)稿.doc
(755.69 KB, 下載次數(shù): 11)
2021-6-8 16:36 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
原理圖.doc
(53 KB, 下載次數(shù): 10)
2021-6-8 16:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|