搜档网
当前位置:搜档网 › 51单片机基本程序

51单片机基本程序

51单片机基本程序
51单片机基本程序

1第一位隔一秒闪烁一次

#include<>

#define uint unsigned int

sbit led1=P1^0;

uint i;

uint j;

void main()

{

while(1)

{

%

led1=0;

for(i=1000;i>0;i--)

for(j=110;j>0;j--);

led1=1;

for(i=1000;i>0;i--)

for(j=110;j>0;j--);

}

}

2复杂广告灯

#include<>

#define uint unsigned int

#define uchar unsigned char

uchar discode[]={ 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,sbit k2=P3^5; sbit k3=P3^6;

sbit k4=P3^7;

sbit d=P1^2;

sbit c=P1^3;

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

0xc6,0xa1,0x86,0x8e};

void delayms(uint);

uchar numt0,num;

void display(uchar numdis) //显示59s的常用方式

!

{ uchar shi,ge;

shi=numdis/10;

ge=numdis%10;

P1=0xff; //控制十位数字

P1=0xfd;

P0=table[shi];

delayms(10);

P1=0x00;

P1=0xff; //控制个位数字

P1=0xfe;

P0=table[ge];

delayms(10);

P1=0x00;

}

void delayms(uint xms) //简单的延时程序/

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void init() //初始化函数

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ET0=1;

}

void keyscan() //控制键盘的程序{

if(k1==0)

{

delayms(10); //去抖动延时

\

if(k1==0)

{

num++;

if(num==60)

num=0;

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

}

\

if(k2==0)

{

delayms(10);

if(k2==0)

{

if(num==0)

num=60;

num--;

while(!k2);

]

}

}

if(k3==0)

{

delayms(10);

if(k3==0)

{

num=0;

~

while(!k3);

}

}

if(k4==0)

{

delayms(10);

if(k4==0)

{

while(!k4);

TR0=~TR0;

}

}

}

void main() //主函数

{

init(); //1,先初始化数据init()

while(1)

{

keyscan(); //键盘选择

display(num); //显示两位数字函数

}

}

void T0_time()interrupt 1 //中断服务程序{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

numt0++;

if(numt0==20) //1s的判断

{

numt0=0;

num++;

if(num==60)

num=0;

}

}

-

矩阵键盘使用

#include<>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

>

0xc6,0xa1,0x86,0x8e};

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void display(uchar num)

{

P0=table[num];

·

P1=0xf0;

}

void jianpan()

{

uchar temp,key;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe) //11111高位没有零,(没有键按下){

delayms(10);

temp=P3; //随时可能有键按下

temp=temp&0xf0;

if(temp!=0xfe)

{

temp=P3;

switch(temp)

{

case 0xee:

key=0;

|

break;

case 0xde:

key=1;

break;

case 0xbe:

key=2;

break;

case 0x7e:

key=3;

break;

while(temp!=0xf0) //等待键盘释放

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe) //222222高位没有零,(没有键按下){

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe)

{

,

temp=P3;

switch(temp)

{

case 0xed:

key=4;

break;

case 0xdd:

key=5;

break;

case 0xbd:

)

key=6;

break;

case 0x7d:

key=7;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

display(key);

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe) //333333高位没有零,(没有键按下){

`

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe)

{

temp=P3;

switch(temp)

{

case 0xeb:

key=8;

`

break;

case 0xdb:

key=9;

break;

case 0xbb:

key=10;

break;

case 0x7b:

key=11;

break;

*

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

*

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe) //44444高位没有零,(没有键按下){

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xfe)

{

temp=P3;

switch(temp)

{

case 0xe7:

key=12;

break;

case 0xd7:

key=13;

%

break;

case 0xb7:

key=14;

break;

case 0x77:

key=15;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

display(key);

}

}

}

void main(void)

{

P1=0x0f; //打开数码管选通开关

while(1)

{

jianpan(); //扫描键盘程序

}

}

相关主题