单片机程序大全

  • 格式:doc
  • 大小:43.00 KB
  • 文档页数:29

1 独立按键

#include

#define uchar unsigned char

#define uint unsigned int

sbit P27=P2^7;

sbit K5=P1^4;

sbit fmq=P3^6;

uchar num;

unsigned char code s8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

void delay1ms(uint i)

{uchar j;

while(i—-)

{for(j=0;j<115;j++) //1ms基准延时程序

{;}

}

void beep() //产生1KHZ频率声音的函数

fmq=0;

delay500us(); 2 fmq=1;

delay500us();

void delay500us()

{

unsigned char j;

for(j=0;j<57;j++) //500us基准延时程序

{; }

void main()

{ uchar t;

P27=0;

while(1){

if(K5==0){

delay1ms(15);

if(K5==0){

for(t=0;t〈100;t++)

{ beep();}

num=num+1;

if(num==16){

num=0;

} 3 while(!K5);//等待按键释放

}

}

P0=s8[num];

}

#include

#define uchar unsigned char //数据类型的宏定义

#define uint unsigned int //数据类型的宏定义

sbit P27=P2^7;

unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF};

//共阳数码管显示字型码数组 1011 1111 "—”

void delay1ms(uint i)

uchar j;

while(i--)

{

for(j=0;j<115;j++); //1ms基准延时程序 4 }

void display(unsigned char i)

P27=0; //选通最有端的数码管显示

P0=table[i]; //显示i参数传来的字型码

}

void main(void)

{

unsigned char temp;

display(16); //初始显示 "-"

while(1)

{

P1=0xff; //先向P1口写1;端口读状态

P1=0xf0;

temp=P1;

if(temp!=0xf0)

{

delay1ms(15);

if(temp!=0xf0)

{

P1=0xfe; 5 temp=P1;

switch(temp)

case(0xee):display(0);break;

case(0xde):display(1);break;

case(0xbe):display(2);break;

case(0x7e):display(3);break;

}

P1=0xfd;

temp=P1;

switch(temp)

{

case(0xed):display(4);break;

case(0xdd):display(5);break;

case(0xbd):display(6);break;

case(0x7d):display(7);break;

}

P1=0xfb;

temp=P1;

switch(temp)

{ 6 case(0xeb):display(8);break;

case(0xdb):display(9);break;

case(0xbb):display(10);break;

case(0x7b):display(11);break;

}

P1=0xf7;

temp=P1;

switch(temp)

{

case(0xe7):display(12);break;

case(0xd7):display(13);break;

case(0xb7):display(14);break;

case(0x77):display(15);break;

}

}

/*行线接P1.0-P1。3,列线接P1。4-P1。7。

根据线反转法扫描键盘返回的键值编码查键值编码表,从而得到键值并送数码管显示.

开机时,数码管显示“-”。*/ 7 #include

#include 〈intrins。h〉

#define uchar unsigned char

#define uint unsigned int

sbit P27=P2^7;

sbit fmq=P3^6;

uchar key;

unsigned char code disp_code[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};

unsigned char code key_code[]={

0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,

0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

void delay1ms(uint i)

uchar j;

while(i--)

{

for(j=0;j<115;j++) //1ms基准延时程序

{;}

}

} 8 void delay500us()

unsigned char j;

for(j=0;j<57;j++) //500us基准延时程序

{ ;}

void beep() //产生1KHZ频率声音的函数

{

fmq=0;

delay500us();

fmq=1;

delay500us();

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

键盘扫描子函数

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

uchar keyscan()

uchar scan1,scan2,keycode,j;

P1=0xf0; 9 scan1=P1;

if((scan1&0xf0)!=0xf0) //判键是否按下

{

delay1ms(20); //延时20ms

scan1=P1;

if((scan1&0xf0)!=0xf0) //二次判键是否按下

P1=0x0f; //线反转法的核心

scan2=P1;

keycode=scan1|scan2; //组合成键编码

for(j=0;j〈=15;j++)

if(keycode== key_code[j]) //查表得键值

key=j;

return(key);

}

}

else 10 P1=0xff; //P1口写1 输入状态

return (16);//"-"

}

main()

{

uchar tt;

P0 = 0xbf;

P27 =0; //数码管显示”—”

P1 = 0xff;

while(1)

P1=0xf0;

if((P1&0xf0)!=0xf0){

keyscan();

P0=disp_code[key];

for(tt=0;tt〈200;tt++)

{ beep();}

fmq=1;

delay1ms(200);

}

} 11 }

中断

#include

#define uint unsigned int

#define uchar unsigned char

sbit dula=P2^6;

sbit wela=P2^7;

sbit d1=P1^0;

uchar num;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint z);

void main()

{

EA=1;//开总中断

EX0=1;//开外部中断0

//IT0=1;

//TCON=0x01;

wela=1;//11101010