本文目錄一覽:
- 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
原創文章,作者:GIRU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137144.html