51单片机基础程序文档格式.docx
《51单片机基础程序文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机基础程序文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
b++);
while
(1)
{
delay();
led0=1;
led1=0;
led1=1;
led2=0;
led2=1;
led3=0;
led3=1;
led4=0;
led4=1;
led5=0;
led5=1;
led6=0;
led6=1;
led7=0;
led7=1;
}
方法2总线方法
#defineucharunsignedchar
#defineuintunsignedint
unsignedchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchara,b;
uchari;
while
(1)
for(i=0;
i<
8;
i++)
P0=table[i];
//11111110
//P0=0xfd;
//11111101
方法三移位流水
uchark,i;
k=0xfe;
//11111110<
<
P0=k;
k=k<
1;
//11111100|
k=k|0x01;
//把最低位置1
//11111101
}//11111010
}//00000001
//11111011
}
方法四函数调用
intrins.h>
uchark;
k=_crol_(k,1);
蜂鸣器继电器1月28号
sbitbeep=P0^1;
beep=1;
sbitrelay=P0^0;
relay=1;
relay=0;
_
_____________________________________________________________
步进电机的按键控制1月29号
voiddelay(unsignedintt);
//Motor
sbitk1=P2^7;
sbitk2=P2^6;
sbitF1=P1^0;
sbitF2=P1^1;
sbitF3=P1^2;
sbitF4=P1^3;
unsignedcharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
//反转
unsignedcharcodeFFZ[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
//正转
/*步进电机驱动
*/
voidmotor_ffw()
unsignedchari;
unsignedintj;
for(j=0;
j<
12;
j++)//转1*n圈
for(i=0;
i<
i++)//一个周期转30度
P1=FFW[i]&
0x1f;
//取数据
delay(10);
//调节转速
voidmotor_ffz()
P1=FFZ[i]&
voidmotor_stop()
{P1=1;
voiddelay(unsignedintt)
{
unsignedintk;
while(t--)
for(k=0;
k<
80;
k++)
{}
main()
{P2=0xff;
switch(P2)
{case(0xfe):
motor_ffw();
break;
case(0xfd):
motor_ffz();
default:
motor_stop();
break;
__
____________________________________________________________
呼吸灯4月13号
#include<
reg51.h>
#defineuintunsignedintuinti;
sbitled=P2^3;
voiddelay(uinta)
while(a-=1);
voidbreath()
{uinti;
for(i=1;
=499;
{led=0;
delay(i);
led=1;
delay(501-i);
for(i;
i>
=1;
i--)
{while
(1)
{breath();
}
_______________________________________________________________________________
流水呼吸灯4月15号
//调用库函数
#defineuintunsignedint//宏定义
uinti;
ucharbb;
{while(a--);
//定义延时函数
voidbreath()//定义呼吸函数
i++)//FOR循环
{P2=bb;
//控制BB位的LED
//延时,随着FOR循环延时点亮的时间逐渐缩短,即每次循环的时间减少,亮度减弱
P2=0XFF;
//BB位LED为低电平的时间增长,高电平时间为0
i--)//由高电平时间为0转换为低电平为0
{bb=0xfe;
while
(1)//循环主函数
bb=_crol_(bb,1);
//_crol_带循环
//<
是位左移,后面补0
//数码管动态显示7月21号
intduanxuan[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
inti,k,e,z=0xfe;
voiddelay(intj)
{while(j--);
voiddisp()
{P0=0x00;
P1=0xff;
P0=duanxuan[k];
P1=z;
delay(200);
z=z<
z=z|0x01;
voidmain()
{for(k=0;
k<
=8;
k++)
{
disp();
___
____________________________________________________________________________
点阵显示7月23号
没有取模软件,懒得算数
______________________________________________________________________________
独立按键7月23号
unsignedcharsmg_gy[]={~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7f,~0x6f};
sbitk1=P3^0;
sbitled=P0^0;
voiddelay(intt)//误差0us
unsignedcharj;
for(;
t>
0;
t--)
for(j=19;
j>
j--);
{intnum;
P3=0xff;
//消抖
{if(k1==0)
{delay(200);
if(k1==0)
{num++;
led=0;
if(num==8)
num=0;
while(!
k1);
}else
P1=smg_gy[num];
__________________________________________________________88月2号矩阵键盘
#defineuintunsignedint
ucharduanxuan[16]={
~0x3f,~0x06,~0x5b,~0x4f,
~0x66,~0x6d,~0x7d,~0x07,
~0x7f,~0x6f,~0x77,~0x7c};
uchartable[12]={
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
voiddisplay(uchari)
P1=duanxuan[i];
voiddelay_50us(uintt)
ucharj;
for(;
unsignedchari,key_1,key_2,hh;
while
(1)
P3=0xf0;
key_1=P3;
if(key_1!
=0xf0)
delay_50us(200);
key_1=P3;
{
P3=0x0f;
key_2=P3;
hh=key_1|key_2;
for(i=0;
{
if(hh==table[i])
{
display(i);
break;
}
}
___________________________________________________________
8月7号中断函数
sbitp=P0^0;
while(a--);
//定义延时函数
}
voidclock(void)
p=0;
delay(100);
IT0=0;
EA=1;
EX0=1;
P2=0x00;
clock();
voidit0()interrupt0
P2=0xf0
__________________________________________________________
8月11号定时器方式的数码管动态显示
unsignedcharnum,k=0,z=0xfe;
intduanxuan[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
TMOD=0X01;
//设置定时器工作方式为定时方式1
TH0=(65536-500)/256;
//装入初值12M晶振定时
TL0=(65536-500)%256;
//打开总中断开关
ET0=1;
//打开定时器开关
TR0=1;
//启动定时器
if(num==5)
k++;
k=k%8;
z=_crol_(z,1);
}//等待中断响应
voidtime0()interrupt1
num++;