資源簡(jiǎn)介
基于51單片機(jī)多路超聲波報(bào)警設(shè)計(jì)
代碼片段和文件信息
#include?
#include?
#define?uchar?unsigned?char //?以后unsigned?char就可以用uchar代替
#define?uint??unsigned?int //?以后unsigned?int?就可以用uint?代替
sfr?ISP_DATA??=?0xe2; //?數(shù)據(jù)寄存器
sfr?ISP_ADDRH?=?0xe3; //?地址寄存器高八位
sfr?ISP_ADDRL?=?0xe4; //?地址寄存器低八位
sfr?ISP_CMD???=?0xe5; //?命令寄存器
sfr?ISP_TRIG??=?0xe6; //?命令觸發(fā)寄存器
sfr?ISP_CONTR?=?0xe7; //?命令寄存器
sbit?LcdRs_P???=?P2^7; //?1602液晶的RS管腳???????
sbit?LcdRw_P???=?P2^6; //?1602液晶的RW管腳?
sbit?LcdEn_P???=?P2^5; //?1602液晶的EN管腳
sbit?Trig1_P???=?P2^3; //?超聲波模塊1的Trig管腳
sbit?Echo1_P???=?P2^4; //?超聲波模塊1的Echo管腳
sbit?Trig2_P???=?P1^5; //?超聲波模塊2的Trig管腳
sbit?Echo2_P???=?P1^6; //?超聲波模塊2的Echo管腳
sbit?KeySet_P??=?P1^0; //?設(shè)置按鍵的管腳
sbit?KeyDown_P?=?P1^1; //?減按鍵的管腳
sbit?KeyUp_P???=?P1^2; //?加按鍵的管腳
sbit?Buzzer_P??=?P2^0; //?蜂鳴器的管腳
sbit?Led1_P????=?P2^2; //?傳感器1報(bào)警燈
sbit?Led2_P????=?P3^3; //?傳感器2報(bào)警燈
uint?gAlarm; //?報(bào)警距離變量
/*********************************************************/
//?單片機(jī)內(nèi)部EEPROM不使能
/*********************************************************/
void?ISP_Disable()
{
ISP_CONTR?=?0;
ISP_ADDRH?=?0;
ISP_ADDRL?=?0;
}
/*********************************************************/
//?從單片機(jī)內(nèi)部EEPROM讀一個(gè)字節(jié),從0x2000地址開始
/*********************************************************/
unsigned?char?EEPROM_Read(unsigned?int?add)
{
ISP_DATA??=?0x00;
ISP_CONTR?=?0x83;
ISP_CMD???=?0x01;
ISP_ADDRH?=?(unsigned?char)(add>>8);
ISP_ADDRL?=?(unsigned?char)(add&0xff);
//?對(duì)STC89C51系列來說,每次要寫入0x46,再寫入0xB9ISP/IAP才會(huì)生效
ISP_TRIG??=?0x46; ???
ISP_TRIG??=?0xB9;
_nop_();
ISP_Disable();
return?(ISP_DATA);
}
/*********************************************************/
//?往單片機(jī)內(nèi)部EEPROM寫一個(gè)字節(jié),從0x2000地址開始
/*********************************************************/
void?EEPROM_Write(unsigned?int?addunsigned?char?ch)
{
ISP_CONTR?=?0x83;
ISP_CMD???=?0x02;
ISP_ADDRH?=?(unsigned?char)(add>>8);
ISP_ADDRL?=?(unsigned?char)(add&0xff);
ISP_DATA??=?ch;
ISP_TRIG??=?0x46;
ISP_TRIG??=?0xB9;
_nop_();
ISP_Disable();
}
/*********************************************************/
//?擦除單片機(jī)內(nèi)部EEPROM的一個(gè)扇區(qū)
//?寫8個(gè)扇區(qū)中隨便一個(gè)的地址,便擦除該扇區(qū),寫入前要先擦除
/*********************************************************/
void?Sector_Erase(unsigned?int?add) ??
{
ISP_CONTR?=?0x83;
ISP_CMD???=?0x03;
ISP_ADDRH?=?(unsigned?char)(add>>8);
ISP_ADDRL?=?(unsigned?char)(add&0xff);
ISP_TRIG??=?0x46;
ISP_TRIG??=?0xB9;
_nop_();
ISP_Disable();
}
/*********************************************************/
//?毫秒級(jí)的延時(shí)函數(shù),time是要延時(shí)的毫秒數(shù)
/*********************************************************/
void?DelayMs(uint?time)
{
uint?ij;
for(i=0;i for(j=0;j<112;j++);
}
/*********************************************************/
//?1602液晶寫命令函數(shù),cmd就是要寫入的命令
/*********************************************************/
void?LcdWriteCmd(uchar?cmd)
{?
LcdRs_P?=?0;
LcdRw_P?=?0;
LcdEn_P?=?0;
P0=cmd;
DelayMs(2);
LcdEn_P?=?1;????
Delay
- 上一篇:51單片機(jī)紅外智能小車
- 下一篇:C++程序設(shè)計(jì)精講
評(píng)論
共有 條評(píng)論