一、系統(tǒng)方案 1、上電初始化液晶第一行顯示脈搏,第二行顯示溫度,第三行顯示模式,第四行顯示強(qiáng)度;按下K1按鍵可以選擇模式,催眼模式或治療模式。 2、治療模塊下,可以通過K2、K3修改強(qiáng)度。
1.png (5.16 KB, 下載次數(shù): 67)
下載附件
2023-8-25 16:23 上傳
二、硬件設(shè)計(jì) 原理圖如下:
2.png (131.38 KB, 下載次數(shù): 71)
下載附件
2023-8-25 16:23 上傳
三、單片機(jī)軟件設(shè)計(jì) 1、首先是系統(tǒng)初始化 //lcdrw = 0; //關(guān)閉 TRISE = 0x00; //輸出口 PORTE = 0x00; TRISD = 0x00; // 輸出口
TRISB = 0x0f; // 輸入 TRISC = 0x00; // 輸出 TRISA=0x04; PORTA=0;
Lcd_Initial(); //LCD初始化 Reset_DS18B20();
T1CKPS0=1; //定時(shí)器分頻器8分頻 T1CKPS1=1; //定時(shí)器分頻器8分頻 TMR1CS=0; //TMR1工作于定時(shí)器方式 TMR1L=(65536-100)%256; //定時(shí)12500個(gè)時(shí)鐘初始值 TMR1H=(65536-100)/256; //定時(shí)12500個(gè)時(shí)鐘初始值 GIE=1; //總中斷允許 PEIE=1; //外圍功能模塊中斷允許 TMR1IE=1; //TMR1中斷允許 TMR1ON=1; //啟動(dòng)TMR1 pwm(20); 2、液晶顯示程序 /******************************************************************************************** * 函數(shù)名稱:Lcd_Write_Command() * 功 能:寫指令代碼 * 入口參數(shù):無 * 出口參數(shù):無 *********************************************************************************************/ void Lcd_Write_Command(uchar temp) { port=temp; rs=0; rw=0; e=1; e=0; } /******************************************************************************************** * 函數(shù)名稱:Lcd_Write_Byte() * 功 能:寫數(shù)據(jù) * 入口參數(shù):無 * 出口參數(shù):無 *********************************************************************************************/ void Lcd_Write_Byte(uchar temp) { port=temp; rs=1; rw=0; e=1; e=0; } 3、按鍵程序 void key() { if (RB0 == 0)// { delay(10); //延時(shí) if (RB0 == 0)// { while (RB0== 0); mode=!mode; if(mode==0){ dangwei=2;pwm(20);} } } if (RB1 == 0)// { delay(10); //延時(shí) if (RB1== 0)// { while (RB1== 0); if(mode==1) { dangwei++; if(dangwei>6)dangwei=1; pwm(dangwei*10);
} } }
if (RB2 == 0)// { delay(10); //延時(shí) if (RB2 == 0)// { while (RB2== 0); if(mode==1) {
if(dangwei>1)dangwei--; pwm(dangwei*10);
} } }
}
4、核心算法程序 while (1) {
Lcd_Character_16X16(0,0,8,data_shuju[2]); //顯示溫 Lcd_Character_16X16(0,0,24,data_shuju[3]); //顯示度 Lcd_Character_16X8( 0,0,40, data_shuju1[10]);//顯示: Lcd_Character_16X8( 0,0,48, data_shuju1[ad/100]);//顯示: Lcd_Character_16X8( 0,0,56, data_shuju1[ad%100/10]);//顯示: Lcd_Character_16X8( 0,0,64, data_shuju1[ad%10]);//顯示:
Lcd_Character_16X16(0,2,8,data_shuju[0]); //顯示溫 Lcd_Character_16X16(0,2,24,data_shuju[1]); //顯示度 Lcd_Character_16X8( 0,2,40, data_shuju1[10]);//顯示: Lcd_Character_16X8( 0,2,48, data_shuju1[temp/10]);//顯示: Lcd_Character_16X8( 0,2,56, data_shuju1[temp%10]);//顯示:
Lcd_Character_16X16(0,4,8,data_shuju[4]); //顯示溫 Lcd_Character_16X16(0,4,24,data_shuju[5]); //顯示度 Lcd_Character_16X8( 0,4,40, data_shuju1[10]);//顯示: if(mode==0) { Lcd_Character_16X16(0,4,48,data_shuju[6]); //顯示溫 Lcd_Character_16X16(0,4,64,data_shuju[7]); //顯示度
} else { Lcd_Character_16X16(0,4,48,data_shuju[8]); //顯示溫 Lcd_Character_16X16(0,4,64,data_shuju[9]); //顯示度
}
Lcd_Character_16X16(0,6,8,data_shuju[10]); //顯示溫 Lcd_Character_16X16(0,6,24,data_shuju[11]); //顯示度 Lcd_Character_16X8( 0,6,40, data_shuju1[10]);//顯示 Lcd_Character_16X8( 0,6,48, data_shuju1[dangwei]);//顯示:
ad=get_ad(); key();
temp=DS18B20_Get(); if((ad>alarm)||(temp>th)) TMR1ON=1; else { TMR1ON=0;RC7=1;}
} 四、proteus仿真設(shè)計(jì) Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺(tái)的基礎(chǔ)上通過自身的軟件仿真出硬件平臺(tái)的運(yùn)行情況,這樣就可以通過軟件仿真來驗(yàn)證我們?cè)O(shè)計(jì)的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達(dá)到我們?cè)O(shè)定的目的,避免我們搭建實(shí)物的時(shí)候,如果當(dāng)初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測(cè)試,這樣會(huì)浪費(fèi)人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個(gè)問題,我們?cè)谠O(shè)計(jì)之初,就使用該軟件進(jìn)行模擬仿真,測(cè)試,選擇滿足我們?cè)O(shè)計(jì)的最優(yōu)方案。最后根據(jù)測(cè)試沒問題的仿真圖紙,焊接實(shí)物,調(diào)試,最終完成本設(shè)計(jì)的作品。
3.png (142.25 KB, 下載次數(shù): 66)
下載附件
2023-8-25 16:24 上傳
|