打印

手把手教你学习单片机(2.2)——缝鸣器电路及实验

[复制链接]
2436|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ahai0306|  楼主 | 2009-2-26 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手把手教你学习单片机(2.2)——缝鸣器电路及实验
[原创]转贴请标明出处!ahai0306/mcu_51
    http://blog.**/ahai0306/
前段时间写了手把手教你学习单片机的第一章和第二章的第一节。
首先看一下蜂鸣器的常用电路


在本电路中,BB标号直接连接到单片机的IO口上,本开发板是连接到了P3.3上了,由于P3口本身带弱上拉,所以此电路中不需要再接上拉电阻了。
此电路的三极管电路,就是一个(三极管)BJT反向器,当BB是低电平时,此三极管处于饱和状态,电路导通,电流流过蜂鸣器,此时蜂鸣器发声;反之,当BB是高电平时,此三极管处于截止状态,电路关断,时蜂鸣器停止发声。
蜂鸣器发声的长短和频率,完全有单片机控制导通时间,一般都是设定一段延时就可以了,长短可以自己实验。
下面给出C语言程序和汇编程序(带注释):




#include <reg52.h>
//调用头文件(单片机内部的寄存器定义)


/******本段为硬件I/O口定义********/


sbit 
LED0
= P0 ^ 0; //发光二极管0


sbit 
BUZZ
= P3 ^ 3;
//蜂鸣器


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


** 函数名称: dellay


** 入口参数:h(双字节型)


** 出口参数:无


** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS


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


void dellay(unsigned int
h)


{



while(h--);

//0.01MS


}


/************主程序**************/


main()


{



while(1)


//单片机在此反复循环



{




LED0=0;
//发光管0亮



BUZZ=0;
//蜂鸣器叫



dellay(40000);




LED0=1;
//发光管0灭



BUZZ=1;
//蜂鸣器停



dellay(60000);




}





;***********本段为硬件I/O口定义************
LED0
EQU
P0.0
BUZZ
EQU
P3.3

ORG 0000H            ;上电后程序从这里运行

AJMP MAIN

ORG 0100H
MAIN:

ORL
P0,#01H

CLR
LED0             ;LED0发光二极管亮

CLR
BUZZ             ;蜂鸣器叫

LCALL DELAY400MS

SETB
LED0

;LED0发光二极管灭

SETB
BUZZ               ;蜂鸣器停

LCALL DELAY600MS

LJMP
MAIN

DELAY400MS:
MOV R5,#40
    ;延时子程序,延时约0.4秒
D10:
MOV R6,#20
D20:
MOV R7,#248

DJNZ R7,$

DJNZ R6,D20

DJNZ R5,D10

RET
DELAY600MS:
MOV R5,#60

;延时子程序,延时约0.6秒
D11:
MOV R6,#20
D21:
MOV R7,#248

DJNZ R7,$

DJNZ R6,D21

DJNZ R5,D11

RET
END
我的新Q Q:464976346
http://blog.**/ahai0306/(我的博客首页)

相关链接:http://blog.**/ahai0306/

相关帖子

沙发
ahai0306|  楼主 | 2009-2-26 16:23 | 只看该作者

终于显示出图了

刚才没有显示出图形

使用特权

评论回复
板凳
ahai0306|  楼主 | 2009-2-27 14:23 | 只看该作者

手把手教你学习单片机(2.3)——数码管电路及实验

                    数码管电路及实验
[原创]转贴请标明出处!ahai0306/mcu_51
    http://blog.**/ahai0306/

    今天讲数码管电路,数码管分为共阴极和共阳极,顾名思义大家应该能理解其意思。
对于数码管的驱动,常用的有IO口直接驱动,三极管驱动,芯片驱动,大功率的还要增加驱动能力。
开发板中选择的是常用的2位数码管,这样的可以采取IO口直接驱动,电路如下:


上面的段码SEG[A..H]连到开发板的P1口,位码Dig0和Dig1分别连接到IO口的P04和P05,由于采用的IO直接驱动,选择了共阴极数码管,并且在P1口上拉1K电阻, 增强P1口驱动能力。在1-2位数码管的时候,完全可以采用IO直接驱动,而没有必要增加三极管驱动电路,这个电路已经经过实践验证的,没有问题的。
再看一下三极管驱动电路,



这个电路采用的数码管驱动电路是三极管驱动,共阳极数码管,另外在SEG[A..H]中,要串联个270欧姆左右的限流电阻,具体值可根据实际亮度调整。
再举一种常用的键盘数码芯片ZLG7289,如下图,64个按键,8位数码管,直接和单片机进行SPI通信就可以了。


象数码管的电路还有很多,比如使用74595芯片,74164芯片,还有好几种其它的键盘显示芯片,价格上都相差不是太大,三极管驱动的最为便宜,但程序要动态扫描占用CPU资源多。使用专用键盘显示芯片的要贵一点,但单片机处理起来很简单。
对与第一种图,本博客以前发过其静态,动态的C和汇编语言程序,大家可以在本博客08年的**中找找,现在只把动态C语言的贴出来:
#include <reg52.h>   //调用头文件(单片机内部的寄存器定义)
/******本段为硬件I/O口定义********/
sbit  LED0   = P0 ^ 0;
sbit  LED1   = P0 ^ 1;
sbit  LED2   = P0 ^ 2;
sbit  LED3   = P0 ^ 3;
sbit  DIG0   = P0 ^ 4;  //数码管位0
sbit  DIG1   = P0 ^ 5;  //数码管位1
sbit  BUZZ   = P3 ^ 4;  //蜂鸣器

//数码管显示0~9,定义到代码段,和程序数据烧在FLASH中
code unsigned  char DispBuf[10]= {0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f};
void  disp_selec(unsigned  char bit_selec,unsigned  char  seg);
/**************************************************
** 函数名称: dellay
** 入口参数:h(双字节型)
** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS
****************************************************/
void dellay(unsigned int  h)
{
  while(h--);    //0.01MS
}

/************主程序**************/
main()
{
unsigned  char  i="0";      //要显示的数
unsigned  char  temp_a,temp_b; //个位、十位数
     
while(1)     
  {unsigned  int temp;
    temp_b=i/10;
temp_a=i%10;
    for(temp=0;temp<100;temp++)
    {
    disp_selec(0,temp_a);   //显示个位数
     dellay(100);
    disp_selec(1,temp_b);    //显示十位数
    dellay(100);
     }        //显示数加1
      i++;
   if(i>99)
      i="0";   
  }   

/**************************************************
** 函数名称: disp_selec
** 入口参数:bit_selec,seg
** 出口参数:无
** 功能描述: 选择相应数码管,进行显示
****************************************************/
void  disp_selec(unsigned  char bit_selec,unsigned  char  seg)
{
   if(bit_selec==0)   //数码管位选0
{
   DIG0=0;
   DIG1=1;
  }
if(bit_selec==1)   //数码管位选1
  {
    DIG0=1;
    DIG1=0;
  }
   P1=DispBuf[seg];
}
大家参考参考吧,学习靠实践,看别人的永远学不到真东西,但学习别人的经验可以加快自己的学习速度。

以前写的,请在这里打开链接:
相关链接:http://blog.**/ahai0306/

使用特权

评论回复
地板
ahai0306|  楼主 | 2009-3-3 23:07 | 只看该作者

让高手见笑了

但对初学者来说还是有一定帮助的

使用特权

评论回复
5
HotC51| | 2009-3-3 23:12 | 只看该作者

鼓励鼓励~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

158

帖子

1

粉丝