51单片机复习程序例举001
扫描二维码
随时随地手机看文章
1、点亮闪烁的LED灯。
#include
sbitLED00=P0^0;//位定义,定义单片机引脚
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
while(1)
{
LED00=0;//此开发板是低电平点亮
delay(5);
LED00=1;//此开发板是高电平熄灭
delay(5);
}
}
/******************************************************************************
*说明:AT89S52芯片,12M晶振
*P0、P1两个8位端口分别连接8个LED灯
*低电平点亮,高电平熄灭。
******************************************************************************/
#include
#include
//http://baike.baidu.com/view/1745068.htm?fromTaglist
//http://wenku.baidu.com/view/06ba3d00b52acfc789ebc97b.html
//sbitLED00=P0^0;//位定义,定义单片机引脚
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
P0=0xfe;//0b11111110
P1=0x7f;//0b01111111
while(1)
{
P0=_crol_(P0,1);//循环左移,每次循环1位
P1=_cror_(P1,1);//循环右移,每次循环1位
delay(5);
}
}
/******************************************************************************
*说明:AT89S52芯片,12M晶振
*此开发板继电器的控制端口和单片机的P3^7引脚相连接
*因为继电器的工作电流比较大,
*所以P3^7连接的是一个三极管,通过三极管驱动继电器
******************************************************************************/
#include
sbitJDQ=P3^7;//位定义,定义单片机引脚
voiddelay(intt)
{
inti,j;
for(i=0;i<100*t;i++)
{
for(j=0;j<125;j++)
{
;
}
}
}
voidmain(void)
{
while(1)
{
JDQ=0;
delay(5);//延时0.5s
JDQ=1;
delay(5);
}
}
4、控制无源蜂鸣器每隔1s响1s (有一个疑问)/******************************************************************************
*说明:AT89S52芯片,12M晶振
*此开发板蜂鸣器的控制端口和单片机的P3^6引脚相连接
*用三极管进行驱动
*无源蜂鸣器:需要写函数产生1KHz左右的声音频率(方波)
******************************************************************************/
#include
sbitFMQ=P3^6;//位定义,定义单片机引脚
/******************************************************************************
*名称:delay1ms()
*功能:延时1ms
*参数:intt
*返回:无
******************************************************************************/
voiddelay1ms(intt)
{
unsignedchari;
while(t--)
{
for(i=0;i<125;i++)
{
;
}
}
}
/******************************************************************************
*名称:delay500us()
*功能:延时500us
*参数:无
*返回:无
******************************************************************************/
voiddelay500us(void)
{
inti;
for(i=0;i<63;i++)
{
;
}
}
/******************************************************************************
*名称:beep_sound()
*功能:产生FMQ发声需要的1KHz的声音频率
*参数:无
*返回:无
******************************************************************************/
voidbeep_sound(void)
{
FMQ=0;
delay500us();
FMQ=1;
delay500us();
}
voidmain(void)
{
inti,t;
while(1)
{
t=1000;//蜂鸣器发声1000*1ms1KHz频率的方波,一个周期是1ms
for(i=0;i { beep_sound(); } FMQ=1;//关掉FMQ1s(延时) delay1ms(1000); } } 注意:尽量使用定时器产生标准频率的方波,或用延时函数产生时,函数最好不要通过参数来改变延时效果。 疑问:把500us延时函数改成可以传参数t的形式,结果蜂鸣器发出的声音频率和发声的时长变得面目全非,很无解。有经验的朋友欢迎通过评论的方式讨论一下。 改过后的delay500ms()函数 和 beep_sound()函数内容如下: /****************************************************************************** *名称:delay500us() *功能:延时500us *参数:intt *