微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Atmega16单片机实用程序

Atmega16单片机实用程序

时间:12-01 来源:互联网 点击:

連接:PB0~PB3為行;PB4~pb7為列;

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

uchar key_press()

{

uchar key;

DDRB=0XFF;

PORTB=0X0F;

DDRB=0XF0;

delayms(2); //此處要加上適當延時否則讀不到端口信息;

key=PINB;

key&=0x0f; //按下返回1,否則為0;

if(key==0x0f)

{

return 0;

}

else

return 1;

}

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

名稱:4*4矩陣按鍵掃描子程序

功能:掃描一個4*4矩陣案件,比返回相應按鍵值;

硬件連接:PB0~PB3為行;PB4~pb7為列;

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

uchar keyscan() //4*4鍵盤掃面程序,調試0K;

{

uchar keycode,keynum;

do{

}while(key_press()==0); //按鍵是否按下?

asm("nop");

asm("nop");

while(key_press()==1)

{

DDRB=0XFF; //PB0~PB3為列,PB4~PB7為行;

PORTB=0X0F; //列輸出高電平,行輸出低電平;

DDRB=0XF0;

delayus(10); //延時2毫秒,讀列狀態;

keycode=PINB;

keycode&=0x0f; //讀列狀態,屏蔽行狀態;

DDRB=0XFF;

PORTB=0XF0;

DDRB=0X0F;

delayus(10);

PINB&=0Xf0; //讀行狀態,屏蔽列狀態;

keycode|=PINB;

delayus(10);

do{

}while(key_press()==1); //按鍵是否釋放;

switch(keycode)

{

case 0xee:

keynum=0;

break;

case 0xde:

keynum=1;

break;

case 0xbe:

keynum=2;

break;

case 0x7e:

keynum=3;

break;

case 0xed:

keynum=4;

break;

case 0xdd:

keynum=5;

break;

case 0xbd:

keynum=6;

break;

case 0x7d:

keynum=7;

break;

case 0xeb:

keynum=8;

break;

case 0xdb:

keynum=9;

break;

case 0xbb:

keynum=10;

break;

case 0x7b:

keynum=11;

break;

case 0xe7:

keynum=12;

break;

case 0xd7:

keynum=13;

break;

case 0xb7:

keynum=14;

break;

case 0x77:

keynum=15;

break;

default :

keynum=16;

break;

}

}

return keynum;

}

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

名稱:六位密碼輸入比對程序

功能:輸入六位數並與存儲密碼比對,0K返回1,按錯或者順序錯返回0;

原始密碼654321

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

uchar securtcom() //6位密碼輸入比對程序0K;

{

uchar keycount=0;

while(key_press()==1);

delayms(3);

do{

while(key_press()==1);

delayms(1);

while(key_press()==0);

show(8,keycount);

securbuf[keycount++]=keyscan();

}while(keycount<6);

if(securbuf[0]==6) //初始比對,密碼654321;

{

if(securbuf[1]==5)

{

if(securbuf[2]==4)

{

if(securbuf[3]==3)

{

if(securbuf[4]==2)

{

if(securbuf[5]==1);

}

}

}

}

return 1; //密碼正確,返回1;

}

else

return 0; //密碼錯誤,返回0;

}

uchar serset() //密碼設定子程序;

{

}

uchar speci_keypress(uchar presstimes) //特殊按鍵F按下某一設定次數OK;

{

}

uchar key_longpress(uchar prst) //按鍵長按子程序

{

}

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

名稱: 直流蜂鳴器控制

功能: 控制蜂鳴器鳴響時間

硬件連接:PD5輸出控制信號

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

void dcbeep(uchar beeptime) //直流蜂鳴器,調試OK;

{uchar beep;

DDRD|=BIT(5);

PORTD&=~BIT(5);

PORTD|=BIT(5);

delayus(beeptime);

PORTD&=~BIT(5);

delayus(100-beeptime);

}

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

名稱:直流電機全橋控制

功能:fbw=1.正轉;fbw=0,反轉;

硬件連接:PD6與PD7口組合輸出控制信號;

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

void moto(uchar fbw) //直流電機正反轉程序,驅動全橋;

{

DDRD|=BIT(6);

DDRD|=BIT(7);

PORTD&=~BIT(6);

PORTD&=~BIT(7);

delayms(5);

if(fbw==1)

{

PORTD|=BIT(6);

delayms(500);

PORTD&=~BIT(6);

delayms(20);

}

else

{

}

if(fbw==0)

{

PO

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top