如何用C语言编程使单片机产生方波信号?
- 提问者网友:锁深秋
- 2021-11-17 05:11
- 五星知识达人网友:woshuo
- 2021-11-17 05:21
#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); //延时
}
}
- 1楼网友:轻雾山林
- 2021-11-17 09:30
- 2楼网友:詩光轨車
- 2021-11-17 09:06
- 3楼网友:迷人又混蛋
- 2021-11-17 07:54
普通51的话需要模拟PWM,如果是加强版51有内置PWM模块,
PIC和AVR以及430还有STM也有集成PWM的型号!
如果是单纯输出方波的话就简单了。
程序如下:
//功能,按下P1_0的开关降低频率,按P1_1为升高频率
#include //引用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;
}
}
}
}
- 4楼网友:时间的尘埃
- 2021-11-17 06:55
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