#includereg51.h // 用定时器0 控制 PWM
#define ledConPort P2
#define dataPort P0
sbit P1_0 = P1^0; // P1.0 PWM 输出
sbit key10 = P3^2; // 调节 PWM0 占空比 按键
sbit key11 = P3^3;
sbit key12=P3^4;//调节频率的按键
sbit key13=P3^5;
unsigned int fadj;
unsigned char PWM0 = 2; // 占空比初始值
unsigned char counter = 0; // 计数的
unsigned char code ch[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
bit tt1; // 标志位
bit tt2;
void ledshow(void);
void main() // 主函数
{
TMOD=0x10;
fadj=100;
TH1=(65536-fadj)/256; // 定时时间
TL1=(65536-fadj)%256; // 12 MHz
EA=1; // 中断启动
ET1=1;
TR1=1;
while(1)
{
ledshow();
if(key10==0 tt1==0) {tt1 = 1; PWM0+=10;i=PWM0;ledshow();} // K10、K11 // 调节 PWM0 占空比
if(key11==0 tt1==0) {tt1 = 1; PWM0-=10;i=PWM0;ledshow();}
if(key10==1 key11==1) tt1=0;
if(key12==0 tt2==0) {tt2 = 1; fadj+=100;}// K12、 频率 +
if(key13==0 tt2==0) {tt2 = 1; fadj-=100;}// K13频率 -
if(key12==1 key13==1) tt2=0;
ledshow();
}
}
void Timer0(void) interrupt 3 // 定时器0 PWM 控制
{
TH1=(65536-fadj)/256; // 定 时时间
TL1=(65536-fadj)%256;
counter++;
if(counter = 100) counter = 0; // PWM 20级
if(counter = PWM0) P1_0 = 0; else P1_0 = 1;
}
40khz方波是周期为25us的方波,可以正负电平各延时大约12us 51单片机P1口输出40khz方波,汇编程序如下: L1:CLR A MOV P1,A LCALL DELAY SETB A MOV P1,A LCALL DELAY SJMP L1 DELAY:MOV R1,#6 L1:DJNZ R1,L1
使用方法按下向上键切换波形。按下回车键进入频率设置,输入数字再按回车后保存,如果不想保存按下ESC键退出设置。起始时可能需要调整示波器才能正常显示波形。频率可调方波发生器设计,有图,有代码,protues仿真,易于实现。
利用数模转换器PCF8591实现简易波形发生器(可以输出正弦波、方波、三角波和锯齿波。可以通过按键选择波形和频率。事先用MATLAB生成波形数据,点数越多,波形越逼真)。
PCF8951是一个单电源低功耗的8位CMOS数据采集器件,具有4路模拟输入,1路模拟输出,一个串行I2C总线接口用来与单片机通信。三个引脚A0,A1,A2,用于编程硬件地址,允许最多8个器件连接到I2C而不需要额外的电路。器件的地址,控制以及数据都是通过I2C总线来传输。其中引脚1,2,3,4是4路模拟输入,引脚5,6,7是I2C总线的硬件地址,引脚8为数字地,9脚和10脚是I2C总线的SDA和SCL。12脚是时钟选择引脚,高电平表示外部时钟输入,低电平表示使用内部时钟。14脚是基准源,15脚是DAC的模拟输出,16脚是供电电源VCC。
可以完成!但比较复杂。你可以用带有可编程时钟输出的芯片!如89S52得实现。
用S52定时计数器2,设置为可编程时钟输出,特方便
,几乎不会占用CPU执行其他程序的时间。
12M的晶振
振荡频率/(4*(65536-初装值))
12000000∕(4*(65536-65530))
=12000000∕(4*60)
=12000000∕240
=50000
汇编代码:
MOV
C9H,#00000010B
;定时器2设为时钟输出
MOV
CAH,#C3H
;T2寄存器低8位装入初值
MOV
CBH,#FFH
;T2寄存器高8位装入初值
MOV
C8H,#00000100B
;开定时计数器T2
运行此代码P1.0口输出50k方波
500K也可以实现
振荡频率/(4*(65536-初装值))
12000000∕(4*(65536-65530))
=12000000∕(4*6)
=12000000∕24
=500000
汇编代码:
MOV
C9H,#00000010B
;定时器2设为时钟输出
MOV
CAH,#F9H
;T2寄存器低8位装入初值
MOV
CBH,#FFH
;T2寄存器高8位装入初值
MOV
C8H,#00000100B
;开定时计数器T2
运行此代码P1.0口输出500k方波
方波发生器单片机的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:方波发生器单片机