单片机喇叭音量调节

来源:互联网 发布:广告牌制作什么软件 编辑:程序博客网 时间:2024/04/28 17:30
 #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include <intrins.h> //包含NOP空指令函数_nop_(); #define AddWr 0x90   //写数据地址  #define AddRd 0x91   //读数据地址  sbit Sda=P2^1;       //定义总线连接端口 根据此定义连接杜邦线 sbit Scl=P2^0; sbit spk=P1^2;       //喇叭端口/*------------------------------------------------                    延时程序------------------------------------------------*/ void mDelay(unsigned char j) {  unsigned int i;  for(;j>0;j--)     { for(i=0;i<125;i++)    {;} }  }/*------------------------------------------------                    初始化定时器1------------------------------------------------*/void Init_Timer1(void){ TMOD |= 0x10;      TH1=(65536-500)/256;       //初始化值 TL1=(65536-500)%256; //PT1=1;                   //优先级 EA=1;                      //中断使能 ET1=1;                     //定时器中断使能 TR1=1;                     //打开定时器} /*------------------------------------------------                    启动IIC总线------------------------------------------------*/  void Start(void)  {   Sda=1;   _nop_();   Scl=1;   _nop_();   Sda=0;   _nop_();   Scl=0; }/*------------------------------------------------                    停止IIC总线------------------------------------------------*/  void Stop(void)  {   Sda=0;   _nop_();   Scl=1;   _nop_();   Sda=1;   _nop_();   Scl=0;   }/*------------------------------------------------                   应答IIC总线------------------------------------------------*/   void Ack(void)   {    Sda=0;_nop_();Scl=1;_nop_();Scl=0;_nop_();}/*------------------------------------------------              发送一个字节------------------------------------------------*/void Send(unsigned char Data){  unsigned char BitCounter=8; unsigned char temp; do   {temp=Data;Scl=0;_nop_();if((temp&0x80)==0x80)   Sda=1;else   Sda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter--; } while(BitCounter);     Scl=0; }/*------------------------------------------------                    写入DA数模转换值------------------------------------------------*/ void DAC(unsigned char Data) {  Start();  Send(AddWr); //写入芯片地址  Ack();  Send(0x40);  //写入控制位,使能DAC输出  Ack();  Send(Data);  //写数据  Ack();  Stop();   }/*------------------------------------------------                   主程序------------------------------------------------*/void main(){unsigned char num;   //DA数模输出变量        Init_Timer1();while(1)     {            DAC(num);       //DA输出,可以用LED模拟电压变化  num++;          //累加,到256后溢出变为0,往复循环。显示在LED上亮度逐渐变化  mDelay(20);     //延时用于清晰看出变化   }}/*------------------------------------------------                   定时器中断程序------------------------------------------------*/void Timer1_isr(void) interrupt 3 using 1//定时器1{ TH1=(65536-500)/256;//重装初始化值 TL1=(65536-500)%256; spk=!spk;           //取反喇叭,产生固定频率方波,驱动喇叭发声 }

0 0
原创粉丝点击