标题:
频率可调的方波发生器(protues仿真+单片机源码)
[打印本页]
作者:
wei1994
时间:
2018-7-1 22:54
标题:
频率可调的方波发生器(protues仿真+单片机源码)
方波发生器仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(14.1 KB, 下载次数: 99)
下载附件
2018-7-2 00:27 上传
0.png
(47.74 KB, 下载次数: 88)
下载附件
2018-7-2 00:27 上传
单片机源程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
float fosc=12000000; //系统时钟频率
sbit KEY1=P1^0; //控制频率百位;
sbit KEY2=P1^1; //控制频率十位;
sbit KEY3=P1^2; //控制占空比十位;
sbit KEY4=P1^3; //控制占空比个位;
sbit OUTPUT=P2^0; //方波输出端口;
uchar zkb;
uint freq;
uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定
/****************************
延时子程序
****************************/
void delay(uchar n) //延时
{
uchar i;
while(n--)
{for(i=255;i>0;i--)
{}
}}
/*******************
系统初始化
*******************/
void chushihua(void)
{
P1=0x0f;
freq=50;
zkb=50;
TIMER0_L=0xe0;
TIMER0_H=0xb1;
TIMER1_L=0xf0;
TIMER1_H=0xd8;
TL0=0xe0; //初始频率 50Hz 定时 20ms
TH0=0xb1;
TL1=0xf0; //初始占空比 50%定时 10ms
TH1=0xd8;
TMOD=0x11; //定时器 1 和定时器 0 工作在方式 1
IT0=1; //选择 INT0 为下降沿触发方式
EX0=1; //外部中断 0 允许
ET0=1; //定时器 1 和定时器 0 中断允许
ET1=1;
EA=1; //系统中断允许
TR0=1; //定时器 1 和定时器 0 开始定时
TR1=1;
}
/*********************
主函数
*********************/
void main(void)
{
chushihua(); //系统初始化
while(1)
{ }
}
/************************
定时器中断子程序
************************/
void Timer0_freq() interrupt 1 //频率定时器 0 中断
{
TR1=1; //启动定时器 1,占空比定时
TL0=TIMER0_L;
TH0=TIMER0_H;
OUTPUT=1; //输出高电平
}
void Timer1_zkb() interrupt 3 //占空比定时器 1 中断
{
TR1=0; //定时器 1 停止
TL1=TIMER1_L;
TH1=TIMER1_H;
OUTPUT=0; //输出低电平
}
/***********************
键盘扫描子程序
***********************/
void keyscan() interrupt 0 using 1 //外部中断 0
{float TF0,TZ1;
EX0=0; //关中断
delay(10); //延时消抖
if(P1!=0x0f) //判断是否有键按下
{
if(KEY1==0) freq+=100; //按键为 1 号,频率加 100
if(KEY2==0) freq-=100; //按键为 2 号,频率减 100
if(freq>5000) freq=50; //频率大于 5000Hz,重新赋值为 5
if(KEY3==0) zkb+=10; //按键为 3 号,占空比加 10
if(KEY4==0) zkb-=10; //按键为 4 号,占空比减 10
if(zkb>100) zkb=1; //占空比大于 100,重新赋值为
TF0=(65536-fosc/(12.0*freq));//频率定时初值
TZ1=(65536-(fosc*zkb)/(12.0*100*freq)); //占空比定时
TIMER0_H=(uint)TF0/256;
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;
}
P1=0x0f; //给键盘扫描口赋初值
EX0=1; //开中断
TR0=1; //定时器 1 和定时器 0 开始定时
TR1=1;}
复制代码
所有资料51hei提供下载:
频率可调方波发生器(protues仿真).zip
(52.7 KB, 下载次数: 130)
2018-7-1 22:53 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
GZD123
时间:
2022-5-18 15:54
我这有三个问题能佛麻否烦你回答一下1.怎么样转化为ADPWM波?
作者:
GZD123
时间:
2022-5-18 15:56
2.4个按键如何共用一个中断。3.请用程序解释一下用的是延时还是定时。
作者:
两人鹏34
时间:
2022-5-20 17:34
能否实现编码控制
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1