51单片机的电子测速里程防盗报警器设计

控制/MCU

1879人已加入

描述

//标题:4乘4键盘的输入函数

// 函数描述: char gotkey(void)

// 从4*4小键盘输入数据,返回0~9,及其它数据。

//***********************************************************

//时间迟延函数

//*********************************************************

void delay (void)

{

unsigned char i,j;

for(i=0;i《5;i++)

for(j=0;j《255;j++);

}

//*************************************************

//检查是否有按键按下

//*************************************************

char keypad_sCAN()

{

char key,i;

p2=0xF0;

while(p2!=0XF0);

do{

for(i=0;i《=3;i++)

{ p2=ksp;

if(p2!=ksp)

{

delay();

key=p2;

if(key!=ksp)

{

return(key);

}

}

}

}while(1);

}

//***************************************

//取得键值

//***************************************

char gotkey()

{

char temp,i;

temp=keypad_scan();

for(i=0;i《=15;i++)

{

if(temp==key_code)

return(i);

}

}

//**************************************

//93c66驱动程序

//**************************************

//********************************************

unsigned char read_byte(int address)

{int i, command;

unsigned char temp;

CS=1;

command=(READ|address);

write_command(command);

for(i=0;i《8;i++)

{SK=1;

SK=0;

temp=(temp《《1);

if(DO==1)

temp=(temp|0X01);

}

CS=0;

return(temp);

}

//**********************************************

void write_enable()

{int command;

CS=1;

command=EWEN;

write_command(command);

CS=0;

}

//***********************************************

void write_dISAble()

{int command;

CS=1;

command=EWDS

write_command(command);

CS=0;

}

//************************************************

void write_byte(int address,unsigned char write_date)

{int i,command;

write_enable();

CS=1;

command=(WRITE|address);

write_command(command);

for(i=0;i《8;i++)

{if(write_date&0X80)}

DI=1;

elae

DI=0;

SK=1;

SK=0;

write_date=(write_data《《1);

}

check_busy();

write_disable();

}

//*************************************************

void write_command(int command)

{int i;

command=(command《for(i=0;i《12;i++)

{if(command&0X8000)

DI=1;

else

DI=0;

SK=1;

SK=0;

command=(command《《1);

}

}

//***********************************************

void check_busy(void)

{CS=0;

CS=1;

while(DO==0);

}

//******************************************

//标题:ISD4004驱动法程序

//功能:语音选段播放

//******************************************

void delay(unsigned int time) //延迟n微秒

{

while(time!=0)

{

time-- ;

}

}

void delayms(unsigned int time) //延迟n毫秒

{ TMOD=0x01;

for(time;time》0;time--)

{

TH0=0xfc;

TL0=0x18;

TR0=1;

while(TF0!=1)

{;}

TF0=0;

TR0=0;

}

}

//************************************

//ISD4004 spi串行发送子程序,16位数据

//************************************

void spi_send(unsigned char isdx)

{ unsigned char isx_counter;

SS=0; //ss=0,打开spi通信端

SCLK=0;

for(isx_counter=0;isx_counter《8;isx_counter++)

//先发低位再发高位,依次发送。

{ if ((isdx&0x01)==1)

MOSI=1;

else

MOSI=0;

isdx=isdx》》1;

SCLK=1;

delay(2);

SCLK=0;

delay(2);

}

}

//*******************************

//发送stop指令

//*******************************

void isd_stop(void)

{ delay(10);

spi_send(0x30);

SS=1;

delayms(50);

}

//*******************************

//发送上电指令,并延迟50ms

//*******************************

void isd_pu(void)

{ delay(10);

SS=0;

spi_send(0x20);

SS=1;

delayms(50);

}

//*******************************

//发送掉电指令,并延迟50ms

//*******************************

void isd_pd(void)

{ delay(10);

spi_send(0x10);

SS=1;

delayms(50);

}

//*******************************

//发送分段语音setplay指令

//*******************************

void isd_setplay(unsigned char adl,unsigned char adh)

{

isd_pd();

delayms(1);

spi_send(adl);

delay(2);

spi_send(adh);

delay(2);

spi_send(0xe0);

SS=1;

spi_send(0xf0);

SS=1;

if(ISD_INT==0)

isd_stop();

isd_pd();

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分