本文目录一览:
- 1、单片机中断函数C语言的问题?
- 2、单片机c语言,这份代码我看不懂,打打注释
- 3、K1、K2分别控制定时器T0、T1的启动停止, T0每2秒beep(蜂鸣器),T1每秒闪烁灯。求C语言单片机程序代码
- 4、c语言中,beep是个什么函数
- 5、单片机c语言中beep=~beep什么意思
单片机中断函数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