請問下面的代碼哪里有問題呀?
Protus仿真出來蜂鳴器就是只 噠噠 的聲音,沒有音調。仿真電路用CSDN上其他大神的代碼是可以發聲的
剛接觸單片機
求教!
#include <reg51.h>
#include <intrins.h>
sbit LED = P0^0;
sbit BUZZER = P2^2;
unsigned char timeH,timeL,time;
#define uchar unsigned char
#define uint unsigned int
/*
#define M1 0xF91E
#define M2 0xF9DE
#define M3 0xFA8A
#define M4 0xFAD8
#define M5 0xFB68
#define M6 0xFBE8
#define M7 0xFC5A
#define H1 0xFC8F
*/
code unsigned MUSICh[]=
{0xFC,0xFC,0xFB,0xFB,0xFA,0xFA,0xF9,0xF9};
code unsigned MUSICl[]=
{0x8F,0x5A,0xE8,0x68,0xD8,0x8A,0xDE,0x1E};
/*
code unsigned MUSIC[]=
{H1,M7,M6,M5,M4,M3,M2,M1};
*/
void Delay (unsigned char t)
{
do {
TH0 = 0xDC;
TL0 = 0X00;
TR0 = 1;
while (!TF0);
TR0=0;
TF0=0;
} while (--t!=0);
}
void T0INTSVS() interrupt 1
{
TR0=0;
TH0=timeH;
TL0=timeL;
TR0=1;
BUZZER = !BUZZER;
}
void PlayMusic()
{
TH0 = timeH;
TL0 = timeL;
TR0 = 1;
BUZZER = 1;
Delay(30);
BUZZER = 0;
Delay(70);
}
void main()
{
unsigned char i;
TMOD &= 0xF0;
TMOD |= 0x01;
ET1 = 1;
EA = 1;
/*
for (;;)
{
P0=0x00;
BUZZER = 0;
Delay (30);
P0=0xff;
BUZZER = 1;
Delay (70);
}
*/
while(1)
{
for (;;)
{
P0 = 0xFF;
timeH = MUSICh[0];
timeL = MUSICl[0];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[1];
timeL = MUSICl[1];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[2];
timeL = MUSICl[2];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[3];
timeL = MUSICl[3];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[4];
timeL = MUSICl[4];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[5];
timeL = MUSICl[5];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[6];
timeL = MUSICl[6];
PlayMusic();
P0 = _crol_(P0,1);
timeH = MUSICh[7];
timeL = MUSICl[7];
PlayMusic();
P0 = _crol_(P0,1);
}
}
}
uj5u.com熱心網友回復:
最好是用實物 proteus仿真有的時候和真實作象區別很大 畢竟是仿真的東西uj5u.com熱心網友回復:
你這個軟體邏輯看得有點暈,T0,T1 中斷究竟使用的是哪個?自己清楚沒有uj5u.com熱心網友回復:
啊,我自己用的t0,t1可能我有一段改成網上的了好像。。不過我的確不太懂。。
uj5u.com熱心網友回復:
然而沒有實物(哭)還在家里沒去學校~
uj5u.com熱心網友回復:
我也在弄畢業設計,糟心uj5u.com熱心網友回復:
這只是我們課程一個小作業
想不通了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/35594.html
標籤:單片機/工控
下一篇:【Godot】制作技能節點
