玩的51系列對吧? 你現在估計才剛開始接觸單片機.記住一個重點,重中之重:不要用delay_延時.不要用delay_延時.不要用delay_延時.
現在給你一個思路,你可以做下參考.
void main (void)
{
POWER_INITIAL(); //單片機初始化:IO口輸出輸入定義;上下拉設置;IO口初始電平;單片機晶振頻率選擇,晶振頻率根據需要選
//合適的頻率.選好之后后面需要用到的都是在選的頻率之上計算
TIME0_INITIAL(); //定時器初始化設置.這個開中斷,設置4MS一次定時中斷.后面所有的計數都是在4MS以上進行計算的
//比如你要延時1秒,直接用變量累加,累加到250次的時候執行你延時1秒之后的程序,沒有累加到1S的時候
//可以執行其它程序,因為delay延時程序是在哪里空跑,其它的程序跑不了,用變量延時,可以跑其它的程序,
//比如我按鍵還沒有到的時候我可以執行燈里面的程序.
TIME1_INITIAL(); //模擬蜂鳴器的定時4K的頻率,125US進一次中斷,進一次翻轉一直蜂鳴器電平,組成一個250US,4K頻率的蜂
//鳴器方波
WTD_INITAL(); //看門狗初始化 ,這個我不知道C51系列用到沒有但是前面的肯定是用到了
//開T0 定時器中斷 //這個我沒有玩過C51不知道那一段代碼
//開T1 定時器中斷 //
//開總中斷.
while(1)
{
if(F_4MS)
{
F_4MS=0;
//清看門狗程序 //這一段代碼是清看門狗的,防止看門狗復位
//////////////////////// //下面是所有程序的子函數,你把子函數模塊寫好嵌套進去就可以了
KEY_SCAN(); //按鍵掃描
LED_DISPLAY(); //指示燈
PWM_OUT(); //馬達輸出
}
}
}
因為我不是寫C51的.但是我寫的都是51內核的.和它差距不大.所以整體上是一個思路.這是出來工作后的思路, 你的那個思路學習可以.但是想要學習好,學習精,你那個思路要把不好的去掉. 因為我沒有玩過51,我只看了它的教程,所以不知道定時器怎么配,下面是中斷函數處理:
void interrupt(void)
{
//T0中斷處理
//這個T0主程序定時的到了之后把4_4MS這個標志位置1;下面while(1)哪里就是靠這個標志位來進入主程序里面的子程序模塊
F_4MS=1;
//T2處理 模擬蜂鳴器的
//51的我不知道到了之后有沒有標志位什么的,你只需要把下面這個放到T2中斷里面去就可以了
if(F_BELL_WORK)
{
P_BELL=!P_BELL;
}
}
void TIME0_INITIAL(void)
{
//操作T0定時器中斷的寄存器,讓它定時為4MS進一次中斷
}
void TIME2_INITIAL(void);
{
//操作T2定時器中斷的寄存器,讓它定時為125US進一次中斷
}
可能寫的有點亂. 但是我想這個你應該能看懂 |