當前位置:編程學習大全網 - 編程語言 - 如何用C語言編程使單片機產生方波信號?

如何用C語言編程使單片機產生方波信號?

普通51的話需要模擬PWM,如果是加強版51有內置PWM模塊,

PIC和AVR以及430還有STM也有集成PWM的型號!

如果是單純輸出方波的話就簡單了。

程序如下:

//功能,按下P1_0的開關降低頻率,按P1_1為升高頻率

#include<AT89X52.H> ?//引用AT89X52的庫文件

#define?uchar?unsigned?char ?//替換簡稱

#define?uint?unsigned?int ?//替換簡稱

uchar?sm; //定義臨時變量

void?delay_ms(uint?ms) //延時子函數,壹個循環12uS

{

while(--ms);

}

void?T0_IRQ(void)?interrupt?TF0_VECTOR ?//定時器0中斷函數

{

TH0=sm; ?//將變量賦予定時器0的高位

P2_0=!P2_0; ?//翻轉IO

}

?//寄存器初始化子函數

void?mcu_init()

{

ET0=1; //開定時器0中斷

EA=1; //開總中斷

TMOD=0x01;? //設置為16位定時器0

TH0=0xFF; //填充定時器高位

TR0=1; //開定時器0

sm=0xFF; //變量初始化

}

void?main() //主函數

{

mcu_init(); //調用初始化函數

while(1) //主循環

{

if((!P1_0)||(!P1_1))? //檢測是否有按鍵按下

{

delay_ms(8333); //延時去抖

if(!P1_0) //如果是P1_0按鍵按下

{

while(!P1_0); //等待按鍵放手

if(sm) //檢測變量不為0

{

? --sm; //自減1

P2_1=1; //取消邊界LED

}

else?P2_1=0; //到達邊界點亮LED

}

else?if(!P1_1) //否則如果P1_1按鍵按下

{

while(!P1_1); //等待按鍵放手

if(sm<0xFF) //檢測變量小於0xFF

{

? ++sm; ? //自加1

P2_1=1;

}

else?P2_1=0;

}

}

}

}

  • 上一篇:用while語句求100以內偶數之和
  • 下一篇:請問有前輩知道西安電力電子技術研究所的情況麽?最近參加這個單位的招聘會,但網上資料不多,高分在西安
  • copyright 2024編程學習大全網