仿真原版本:proteus 7.8
程序編譯器:keil 4/keil 5
編程語(yǔ)言:C語(yǔ)言
設(shè)計(jì)編號(hào):S0019
設(shè)計(jì)要求
導(dǎo)盲手杖主要用于幫助視覺(jué)有障礙的人解決行動(dòng)不便問(wèn)題,具有成本低,使用方便等特點(diǎn)。主要要求有:
1.顯示前方障礙物距離;
2.實(shí)時(shí)測(cè)量距離,并通過(guò)蜂鳴器提醒距離過(guò)短,蜂鳴器蜂鳴發(fā)出預(yù)警;
3.可以通過(guò)按鍵調(diào)整蜂鳴器預(yù)警的距離;
4.附加要求,可以顯示實(shí)際溫度,根據(jù)溫度調(diào)整傳感器測(cè)試計(jì)算,減少誤差。
仿真電路
可以通過(guò)按鍵調(diào)整蜂鳴器預(yù)警的距離,從而調(diào)整安全距離。
原理圖
PCB圖
源程序
主程序
/主函數(shù)
void main()
{
Init_ultrasonic_wave();
//屏幕初始化
Init1602();
//溫度初始化
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
tmpchange();
t_=tmp();
//循環(huán)顯示
while(1)
{
Key();
//正常顯示
if(mode==0)
{
StartModule();//啟動(dòng)超聲波
while(!RX); //當(dāng)RX為零時(shí)等待
TR0=1; //開(kāi)啟計(jì)數(shù)
while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
TR0=0; //關(guān)閉計(jì)數(shù)
delayms(20); //20MS
tmpchange(); //溫度轉(zhuǎn)換
t_=tmp(); //度溫度
Conut(t_/10); //計(jì)算距離
if(L_<Min)
{
Feng_Start();
}
/* if(FW=0)
Feng_Stop();
*/
Display_1602(t_/10,L_);
}
//調(diào)整顯示
else if(mode!=0)
{
//最大最小值
Init_MaxMin();
while(mode!=0)
{
Key();
/*if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x8d);//設(shè)置位置
}
*/
if(k==1&&mode==1)
{
Init_MaxMin();
write_com(0x89);//設(shè)置光標(biāo)位置
}
k=0;
}
//界面初始化
Init1602();
}
}
}
按鍵檢測(cè)
//按鍵檢測(cè)
void Key()
{
//功能鍵按下
if(K1==0)
{
Feng_Start();//蜂鳴器開(kāi)
delay_key(); //消抖
while(K1==0);//等待松手
Feng_Stop(); //蜂鳴器關(guān)閉
mode++; //模式++
if(mode==2) //達(dá)到最大限度歸為
mode=0;
k=1; //按鍵標(biāo)志位
}
//+鍵
else if(K2==0)
{
Feng_Start();//蜂鳴器開(kāi)
delay_key(); //消抖
while(K2==0);//等待松手
Feng_Stop(); //蜂鳴器關(guān)閉
//最大值調(diào)整
/*if(mode==1) //在最大值調(diào)整下
{
Max++; //調(diào)整最大值
if(Max==201)//到達(dá)201歸為200
{
Max=200;
}
}*/
//最小值
if(mode==1)//最小模式下調(diào)整
{
Min++; //調(diào)整最小值
/*if(Min>Max) //最小值不能大于最大值
{
Min=Max;
}
*/
}
k=1;
}
//-鍵
else if(K3==0)
{
Feng_Start();
delay_key();
while(K3==0);
Feng_Stop();
//最大值調(diào)整
/*if(mode==1)
{
Max--;
if(Max<Min)
{
Max=Min;
}
}*/
//最小值
if(mode==1)
{
Min--;
if(Min==0xff)
{
Min=0;
}
}
k=1;
}
}
資料清單
下載
閱讀全文