如何用C语言编程使单片机产生方波信号? 试用c语言编写一个能输出方波信号的单片机程序。
\u5982\u4f55\u7528C\u8bed\u8a00\u7f16\u7a0b\u8ba92051\u5355\u7247\u673a\u4ea7\u751f\u65b9\u6ce2\u53ef\u8c03\u4fe1\u53f7\u7a0b\u5e8f\u6ca1\u6709\uff0c\u61d2\u5f97\u5199\uff0c\u601d\u8def\u544a\u8bc9\u4f60\u5427
\u5b9a\u65f6\u65f6\u95f4=1/2(1/\u9891\u7387\uff09
\u518d\u7b97\u51fa\u5b9a\u65f6\u5668\u5230\u521d\u503c
\u6216\u8005\u7528\u67e5\u8868\u7ed9\u51fa40\u4e2a\u521d\u503c
\u6ce8\u610f\uff1a\u65f6\u949f\u9891\u7387\u9009\u5b9a\u5f88\u91cd\u8981\uff0c\u770b\u8303\u56f4\u80fd\u4e0d\u80fd\u9002\u5408\uff0c\u8fd8\u6709\u5b9a\u65f6\u5668\u4f4d\u6570\u591f\u4e0d
\u8fd8\u4e0d\u5927\u660e\u767d\uff0c\u4f60\u53ef\u4ee5\u5199\u5173\u952e\u68c0\u6d4b
\uff08\u5173\u952e\uff09/ /\u6d4b\u8bd5\u6309\u94ae\u88ab\u6309\u4e0b
{
\uff1f\uff1f\u5ef6\u8fdf\uff082\uff09;/ /\u53bb\u6296
\uff1f\uff1f\uff08\u952e\uff09;/ /\u786e\u8ba4\u952e\u88ab\u6309\u4e0b
\uff1f\uff08\u952e\uff09/ /\u7b49\u5f85\u653e\u624b
\uff1f\uff1f\uff1f
\uff1f\uff1f\uff1f/ /\u5199\u529f\u80fd\u952e\u88ab\u6309\u4e0b\u5f88\u957f\u4e00\u6bb5\u65f6\u95f4
\uff1f\uff1f}
}
普通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;
}
}
}
}
#include<reg52.h> //51内核的单片机的头文件
#define uchar unsigned char
#define CLOCK P1.0
void delay_ms(uchar ms) //延时函数
{
uchar i,j;
for(i=ms;ms>0;i--)
for(j=0;j<110;j++)
}
void main() //主函数
{
while(1)
{
CLOCK=0; //P1.0输出低电平
delay_ms(50); //延时
CLOCK=1; //P1.0输出高电平
delay_ms(50); //延时
}
}
这个简单啊,最简单的就是高电平是5V低电平是0V这也是方波啊。用单片机的定时器就可以形成方波信号。不明白1819944815可以交流,验证就输单片机
方波就是高低电平的转换啊
MOV R1,#72
MOV A,#00H
MOV DPTR,#6000H
LOOP4:MOV 20H,A
MOVC A,@A+DPTR
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#0FEFFH
MOVX @DPTR,A
MOV DPL,R2
MOV DPH,R3
MOV A,20H
INC A
DJNZ R1,LOOP4
LJMP START
while(1) P1.0 ^= 1;
绛旓細杩樺皢涓浜涘浐瀹氱殑绋嬪簭锛堟瘮濡備腑鏂叆鍙c佷富绋嬪簭鍏ュ彛銆佹椂閽熻缃瓑锛夌敤姹囩紪鍐欏ソ鍚庯紝宓屽叆鍒c璇█绋嬪簭鐨勫伐绋嬩腑锛屼娇C璇█鏇撮傚悎鍗曠墖鏈虹紪绋銆傚仛浜嗚繖涔堝宸ヤ綔鍚庯紝鐢ㄨ繖绉嶇紪璇戝櫒缂栬瘧鐨勭▼搴忓氨鍙互涓嬭浇鍒板崟鐗囨満涓墽琛屼簡銆傚綋鐒朵細浜嗭紝鍙槸鏈変竴浜涘叿浣撶殑鍊肩紪璇戝櫒甯綘瀹屾垚浜嗭紝鎸囬拡灏辨槸鍦板潃銆
绛旓細鍙互杩欎箞鑰冭檻!鍗曠墖鏈鐨処O鍙g己鐪佹椂涓鑸兘鏄弻鍚戯紝鏃㈠彲浠ユ槸杈撳叆鍙堝彲浠ユ槸杈撳嚭锛C璇█涓垽鏂繖涓彛鏄緭鍏ヨ繕鏄緭鍑鸿鐪嬭〃杈惧紡鐨勫舰寮忥紝姣斿锛歴bitkey=P1^0;if(key==1)...杩欓噷鏄綔涓鸿緭鍏ョ殑锛屽洜涓烘槸璇诲叆锛屽啀鍒ゆ柇鍊 key=1;杩欓噷鏄綔涓鸿緭鍑猴紝鍥犱负鐩存帴缁欏叾璧嬪笺
绛旓細125khz鏄8us鍛ㄦ湡锛屽鏋滃嚭鏂规尝鐨勮瘽锛屾瘡4us灏辫鍙嶈浆涓娆$數骞炽11.0592MHZ涓嬶紝51鍙兘璺戝埌1.08us鐨勫懆鏈燂紝鏇存湰鏉ヤ笉鍙婂鐞嗐備互51鐨勭壒鎬э紝鎹㈢敤24Mhz鐨勬櫠鎸紝姣8涓懆鏈熶竴娆″弽杞紝浼拌闄や簡鍑烘柟娉㈠氨浠涔堜篃涓嶈兘骞蹭簡銆C璇█灏辩畻浜嗭紝51鍘嬫牴灏卞仛涓嶄簡銆傛庝箞鏀癸紵鎹鍗曠墖鏈銆
绛旓細include <reg51.h> sbit K1=P1^0;sbit K2=P1^1;sbit K3=P1^2;unsigned char K1n;void main(){ P2=0xff;while(1){ if(!K1){ while(!K1);K1n++;if(K1n==2)K1n=0;if(K1n==0)P2=0xfd;if(K1n==1)P2=0xfe;} if(!K2){while(!K2);P2=0xfb;} if(!K3){while(!K3);...
绛旓細绗簩涓瑙e喅鐨勬槸鍗曟満鐨勭‖浠惰祫婧.鍥犱负鍗曠墖鏈涓嶅悓浜嶱C,褰撴妸C绋嬪簭绉诲煎埌鍗曠墖鏈烘垨鍦ㄥ崟鐗囨満闂寸Щ鍊兼椂,鐢变簬纭欢宸埆寰堝ぇ,瑕佹敼鐨勫緢澶.姣斿瀹氭椂鍣,鍦╒C涓彲鑳藉彧瑕佽皟鐢ㄤ竴涓嚱鏁板氨鍙互鍚姩,浣嗗湪鍗曠墖鏈轰腑,瑕佽繘琛屽緢澶氬瘎瀛樺櫒璁剧疆.鑰屼笉鍚岀殑鍗曠墖鏈鸿缃柟娉曞張涓嶅悓.濡傛灉浣犲彧鏄兂瀛︿竴涓嬪崟鐗囨満鐨,鑰屼笉鏄凡缁忕‘瀹氶」鐩鍋...
绛旓細C51搴撳嚱鏁颁腑绫诲瀷鐨勯夋嫨鑰冭檻鍒颁簡8051鍗曠墖鏈虹殑缁撴瀯鐗规э紝鐢ㄦ埛鍦ㄨ嚜宸辩殑搴旂敤绋嬪簭涓簲灏藉彲鑳藉湴浣跨敤鏈灏忕殑鏁版嵁绫诲瀷锛屼互鏈澶ч檺搴﹀湴鍙戞尌8051鍗曠墖鏈虹殑鎬ц兘锛屽悓鏃跺彲鍑忓皯搴旂敤绋嬪簭鐨勪唬鐮侀暱搴︺鍗曠墖鏈篶璇█缂栫▼鏄熀浜嶤璇█鐨鍗曠墖鏈虹紪绋銆傚崟鐗囨満鐨凜璇█閲囩敤C51缂栬瘧鍣紙绠绉癈51锛夈傜敱C51浜х敓鐨勭洰鏍囦唬鐮佺煭锛岃繍琛岄熷害楂橈紝瀛樺偍...
绛旓細涓銆 濡備綍鎻愰珮C璇█缂栫▼浠g爜鐨勬晥鐜 閭撳畯鏉版寚鍑猴紝鐢–璇█杩涜鍗曠墖鏈虹▼搴璁捐鏄崟鐗囨満寮鍙戜笌搴旂敤鐨勫繀鐒惰秼鍔裤備粬寮鸿皟锛氣滃鏋滀娇鐢–缂栫▼鏃讹紝瑕佽揪鍒版渶楂樼殑鏁堢巼锛屾渶濂界啛鎮夋墍浣跨敤鐨凜缂栬瘧鍣ㄣ傚厛璇曢獙涓涓嬫瘡鏉璇█缂栬瘧浠ュ悗瀵瑰簲鐨勬眹缂栬瑷鐨勮鍙ヨ鏁帮紝杩欐牱灏卞彲浠ュ緢鏄庣‘鐨勭煡閬撴晥鐜囥傚湪浠婂悗缂栫▼鐨勬椂鍊欙紝浣跨敤缂栬瘧鏁堢巼鏈楂...
绛旓細TR0=1; //閲嶆柊鍚姩瀹氭椂鍣0锛屽叾瀹炴槸浣滀负璁℃暟鍣ㄦ潵鐢 } } } void t0(void) interrupt 1 using 0 //姣忎釜璁℃暟涓柇涓娆 { T0count++; //璁℃暟鍔犱竴 } void t1(void) interrupt 3 using 0 //5ms浜х敓涓娆′腑鏂 { TH1=(65536-5000)/256; // TL1=(65536-5000)%256; //閲嶈鍒濆 timecount++;if...
绛旓細include<REG52.h> sbit LED1=P0^0;sbit LED2=P0^1;sbit LED3=P0^2;sbit LED4=P0^3;sbit LED5=P0^4;sbit LED6=P0^5;sbit LED7=P0^6;sbit LED8=P0^7;sbit K1=P3^3;sbit K2=P3^5;void delay(){ unsigned int x,y;gor(x=0;x<100;x++)for(y=0;y<100;y++);} void ...
绛旓細include <reg51.h> define uchar unsigned char define uint unsigned int main(){ uint xdata *xp;//瀹氫箟鎸囧悜鐗囧RAM鐨勬寚閽 uint data *p;//瀹氫箟鎸囧悜鐗囧唴RAM鐨勬寚閽 uchar i;//瀹氫箟寰幆鍙橀噺 xp=0x100;//鎸囧悜鐗囧RAM鐨100H鍗曞厓 p=0x30;//鎸囧悜鐗囧唴RAM鐨30H鍗曞厓 for(i=0;i<10;i++){//...