51单片机复习001
扫描二维码
随时随地手机看文章
1、更改keil uvision3的字体以及关键字颜色的设置:
修改顺序入下1打开edit2打开edit最下方configuration3打开colars4选择8051editcfile可以修改C语言的大小和关键词着色问题。
源自http://zhidao.baidu.com/question/137561189.html
voiddelay1ms(unsignedinti)
{
unsignedcharj;
while(i--)
{
for(j=0;j<125;j++)//1ms基准延时程序
{
;
}
}
//j<125是因为for(){;}循环每循环一次括号内消耗3个指令周期,{;}内执行一个空语句消耗1个指令周期,即:每循环一次消耗4个指令周期(12M晶振:1us*4)
//注意在写延时函数时while(){}和for(;;){}的区别。
最好利用定时器实现,这样比较精确。通过延时函数实现也行,不过要确保延时的精确度,最好不要使用带有参数的延时函数。
示例如下:
无源蜂鸣器要发声音,必须给它提供一定频率(1KHz左右)的方波。(声音频率)
实现方法:周期性的将打片机引脚“置位、延时、复位、延时”
示例中无源蜂鸣器接在AT89S52单片机的P3^6引脚:
/******************************************************************************
*说明: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); } } 将delay500ms()函数 和 beep_sound()函数改成如下形式,蜂鸣器的声音频率和发声时长完全面目全非了,很无解!欢迎有经验的朋友通过评论的方式进行交流。 /****************************************************************************** *名称:delay500us() *功能:延时500us *参数:intt *返回:无 ******************************************************************************/ voiddelay500us(intt) { inti; for(i=0;i<63*t;i++) { ; } } /****************************************************************************** *名称:beep_sound() *功能:产生FMQ发声需要的1KHz的声音频率 *参数:无 *返回:无 ***********