您的位置:

c语言单片机beep,C语言单片机是什么

本文目录一览:

单片机中断函数C语言的问题?

void Timer1() interrupt 3

{    TH1=xx;    TL1=xx;  //建议还是取定时值为1ms,或者是 0.5ms ;

  cnt++;

 if (s50)

 {

     if(cnt500)   { cnt=0; beep=~beep;}

 }

 else if (s=50 s100)

 {

     if(cnt1000)   { cnt=0; beep=~beep;}

 }

 .........

}

如果定时中断为20ms,对应的频率计数50Hz,这个频率已经很低了,那么再通过cnt计数500次,输出信号频率就远远超出音频范围,你根本就听不到声音;

另外,蜂鸣器的proteus仿真可能不太准确,可以通过仿真示波器看波形及频率就好了;

单片机c语言,这份代码我看不懂,打打注释

/* 

题目:同时用两个定时器控制蜂鸣器发声,

定时器0控制频率,定时器1控制同个

频率持续的时间,间隔2s依次输出

1,10,50,100,200,400,800,

1k(hz)的方波?

设晶振频率为12MHz。

*/

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

#includereg52.h //52单片机头文件

#include intrins.h //包含有左右循环移位子函数的库

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

sbit beep=P2^3;//应该是蜂鸣器吧采的

uchar tt;//自定义计数全局变量

uint fre,flag;//自定义全局变量

void main() //主函数

{

fre=50000;//设置主频50KHZ

beep=0;//应该是蜂鸣器关闭

TMOD=0x11;//设置定时器0,定时器1为工作方式1 ---16位计时器

TH0=(65536-fre)/256;//T0定时器高位计数设置 60

TL0=(65536-fre)%256;//T0定时器低位计数设置

TH1=(65536-50000)/256;//T1定时器高位计数设置

TL1=(65536-50000)%256;//T1定时器低位计数设置

EA=1;//开总中断

ET0=1;//开定时器0中断

ET1=1;//开定时器1中断

TR1=1;//启动定时器1

TR0=1;//启动定时器0

while(1);//等待中断产生

}

void timer0() interrupt 1 //定时器0中断

{

TR0=0; //进中断后先把定时器0中断关闭,防止内部程序过多而造成中断丢失

TH0=(65536-fre)/256;//重置定时器高位计数

TL0=(65536-fre)%256;//重置定时器低位计数

tt++;//累加,为了下面逻辑

//依据flag设置主频及翻转蜂鸣器

if(flag40) 

if(tt==10)

{

tt=0;

fre=50000;

beep=~beep;

}

if(flag=40flag80)

{

tt=0;

fre=50000;

beep=~beep;

}

if(flag=80flag120)

{

tt=0;

fre=10000;

beep=~beep;

}

if(flag=120flag160)

{

tt=0;

fre=5000;

beep=~beep;

}

if(flag=160flag200)

{

tt=0;

fre=2500;

beep=~beep;

}

if(flag=200flag240)

{

tt=0;

fre=1250;

beep=~beep;

}

if(flag=240flag280)

{

tt=0;

fre=625;

beep=~beep;

}

if(flag=280flag320)

{

tt=0;

fre=312;

beep=~beep;

}

if(flag=320flag360)

{

tt=0;

fre=156;

beep=~beep;

}

TR0=1;//T0使能

}

void timer1() interrupt 3 //定时器1中断用来产生2秒时间定时

{

TH1=(65536-50000)/256;//重置定时器高位计数

TL1=(65536-50000)%256;//重置定时器低位计数

flag++;//主频重置flag

if(flag==360)

{

flag=0;

fre=50000;

}

TR1=1;//这里少了个T1使能

}

K1、K2分别控制定时器T0、T1的启动停止, T0每2秒beep(蜂鸣器),T1每秒闪烁灯。求C语言单片机程序代码

#includereg51.h

sbit Beep = P1^0;

sbit Led = P1^1;

sbit K1 = P2^0;

sbit K2 = P2^1;

void ConfigTimer()

{

TMOD = 0x11;

TH1 = 0xFC;

TL1 = 0c18;

TH0 = 0xFC;

TL0 = 0x18;

ET0 = 1;

ET1 = 1;

EA = 1;

}

void delay(int z)

{

int i,j;

for(i=0; iz; i++)

for(j=0; j110; j++);

}

void main()

{

ConfigTimer();

while(1)

{

if(K1 == 0)

{

delay(10);

if(K1 == 0)

{

TR0 =~TR0;

while(!K1);

}

}

if(K2 == 0)

{

delay(10);

if(K2 == 0)

{

TR1 =~TR1;

while(!K2);

}

}

}

}

void timer0() interrupt 1

{

static unsigned int t = 0;

TH0 = 0xFC;

TL0 = 0x18;

t++;

if(t 2000)

{

if(t 200)

{

Beep = 0;

}

else

{

Beep = 1;

}

}

else

{

t = 0;

}

}

void timer0() interrupt 3

{

static unsigned int t = 0;

TH1 = 0xFC;

TL1 = 0x18;

t++;

if(t = 1000)

{

Led = ~Led;

t = 0;

}

}

我刚写出来,,没有试验,你编译下,更改引脚定义,试试,,应该是可以的

c语言中,beep是个什么函数

是发声函数,运行后通过主板喇叭唱出旋律,可以试试下面:

TC

试:

#includedos.h

#includeconio.h

#includestdlib.h

/*

this

founction

plays

sound

until

hit

any

key

*/

void

mysound()

{

long

freq

;

while(!kbhit()){/*

while

no

keyboard

hit,

play

sound

*/

for(freq=200L;freq2000L;freq+=200L){

sound(freq);/*play

freq

sound*/

delay(200);/*delay

200ms*/

}

}

nosound();/*

stop

playing

*/

}

void

main()

{

mysound()

;

}

---------------

VC++

试:

#include

stdio.h

#include

stdlib.h

#include

windows.h

main()

{

Beep(523,500);

Beep(587,500);

Beep(659,500);

Beep(698,500);

Beep(784,500);

Sleep(500);

Beep(523,500);

Beep(587,500);

Beep(659,500);

Beep(698,500);

Beep(784,500);

}

------

wintc

试验上两个。

单片机c语言中beep=~beep什么意思

按位取反。

如果你的beep只是一位的话,即

bit

beep

=

1

那beep

=

~beep结果就是0

如果是多位的变量的化就是用二进制取反,如

int

beep

=

11001(二进制,你看到的是二进制!!不是十进制)

那beep=~beep就是00110