㈠ stc89c52單片機如何燒程序
利用串口燒寫,和電腦連接硬體可以是RS232轉TTL,也可以是USB轉232,再轉TTL,也可以直接用uSB轉TTL,最後一種最簡單,開發板還可以用轉換線提供的電源。硬體搭建好後,打開STC提供的燒寫軟體,經簡單設置即可進行下載。
㈡ stc89c52單片機下載程序時一直停在 「正在檢測目標單片機」 怎麼解決
stc89c52單片機下載程序時一直停在 「正在檢測目標單片機」,是設置錯誤造成的,解決方法如下:
1、首先打開電腦中的keil軟體,點擊「工程」新建一個工程,命名為「點亮LED」,點擊確定。

㈢ STC89C52單片機C語言程序求解
你的問題是什麼,要大膽說出來啊
㈣ 怎樣用stc89c52單片機控制蜂鳴器發出音樂的c語言程序
#include
#include
//本例採用89C52,晶振為11.0592MHZ
//關於如何編制音樂代碼,其實十分簡單,各位可以看以下代碼.
//頻率常數即音樂術語中的音調,而節拍常數即音樂術語中的多少拍;
//所以拿出譜子,試探編吧!
sbitBeep=P1^5;
unsignedcharn=0;//n為節拍常數變數
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,0x10,//格式為:頻率常數,節拍常數,頻率常數,節拍常數,
0x20,0x40,0x1C,0x10,
0x18,0x10,0x20,0x10,
0x1C,0x10,0x18,0x40,
0x1C,0x20,0x20,0x20,
0x1C,0x20,0x18,0x20,
0x20,0x80,0xFF,0x20,
0x30,0x1C,0x10,0x18,
0x20,0x15,0x20,0x1C,
0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0xFF,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x80,
0x20,0x30,0x1C,0x10,
0x20,0x10,0x1C,0x10,
0x20,0x20,0x26,0x20,
0x2B,0x20,0x30,0x20,
0x2B,0x40,0x20,0x15,
0x1F,0x05,0x20,0x10,
0x1C,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x30,
0x20,0x30,0x1C,0x10,
0x18,0x40,0x1C,0x20,
0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,
0x15,0x40,0x13,0x40,
0x18,0x80,0x00
};
voidint0()interrupt1//採用中斷0控制節拍
{TH0=0xd8;
TL0=0xef;
n--;
}
voiddelay(unsignedcharm)//控制頻率延時
{
unsignedi=3*m;
while(--i);
}
voiddelayms(unsignedchara)//豪秒延時子程序
{
while(--a);//採用while(--a)不要採用while(a--);各位可編譯一下看看匯編結果就知道了!
}
voidmain()
{unsignedcharp,m;//m為頻率常數變數
unsignedchari=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a:p=music_tab[i];
if(p==0x00){i=0,delayms(1000);gotoplay;}//如果碰到結束符,延時1秒,回到開始再來一遍
elseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延時100ms,繼續取下一音符
else{m=music_tab[i++],n=music_tab[i++];}//取頻率常數和節拍常數
TR0=1;//開定時器1
while(n!=0)Beep=~Beep,delay(m);//等待節拍完成,通過P1口輸出音頻(可多聲道哦!)
TR0=0;//關定時器1
}
}
你參考這個吧
㈤ STC89C52單片機C程序求解(有完整程序)
我給你解釋一下吧 希望幫得上你
#include <reg52.h> // 頭文件
#define uint unsigned int //宏定義 把uint 等價為 unsigned int
#define uchar unsigned char
sbit CS = P2^0; //定義三個特殊功能位, 我感覺應該是驅動一個東西吧,CS
sbit CLK = P2^1; 是片選 高選中或者低選中, CLK是通信的時鍾線,
sbit SDO = P2^2; SDO應該是驅動晶元的數據輸出口, 不過應該有輸入口的??
怎麼沒看到程序里有????
void DELAY(void) //簡單的延時子程序
{
uint x,y;
for(y = 5;y > 0;y--)
for(x = 110;x > 0;x--);
}
void main(void)
{
uint i = 0;
uint j = 0;
uint k = 0; 定義三個變數
TMOD = 0X20;
TH1 = 0XF3; 定時器工作方式 和初值
TL1 = 0XF3;
TR1 = 1; 打開定時器
REN = 1; REN SM0 SM1 是串口這里的設置 具體的你自己看文檔 我就不
SM0 = 0; 細說了
SM1 = 1;
while(1)
{
CLK = 0;
CS = 1;
SDO = 0;
DELAY();
for(i=0;i<16;i++) 循環16次 應該是要傳輸2個位元組的數據吧吧
{
CS = 0; 這個片選貌似應該放在循環外面
CLK = 1; 時鍾線的控制
DELAY();
k = SDO; 把驅動晶元輸出的數據賦值給K
j = j + k;
j = j << 1; 剛才的K 只是一個位, 這里兩句是要把它整理成uint型的即16位的,
DELAY();
CLK = 0; 進行延時 和CLK時鍾控制,即模擬驅動晶元的驅動時序
DELAY();
DELAY();
}
CS = 1; 選中或者取消片選 我感覺應該是取消
SBUF = (j >> 8) & 0XFF; 把剛才從驅動晶元里讀出的uint 16位數據 取高八位 送入
while(!TI); 串口的SBUF 寄存器 貌似是要傳給電腦 或者上位機軟體
TI = 0; 等待傳輸完成 清 標志位
SBUF = j & 0XFF; 把剛才從驅動晶元里讀出的uint 16位數據 取低八位 送入
while(!TI); 串口的SBUF 寄存器 貌似是要傳給電腦 或者上位機軟體
TI = 0; 等待傳輸完成 清 標志位
上面這次 正好把 UINT型的 16位 2個位元組全部傳輸到上位機
SBUF = 0XFF; 最後在傳輸0xff 這個數據給上位機
while(!TI);
TI = 0;
}
}
好了 回答完了 , 希望能幫得上你。
㈥ STC89C52單片機避障小車程序編寫
void Avoid()
{
while(S<400)//小於避障距離就停車同時報警
{
beep=0;//使能蜂鳴器
stop();//停車
}
beep=1;//一直到移除障礙,則關閉蜂鳴器報警回到主程序。
}