源码:基于51单片机可调PWM发生器 一、设计任务
- PWM信号频率范围为20Hz ~ 100kHz
- 占空比为5%~95%
- 键盘设置PWM频率和占空比
- 液晶模块显示输出频率和占空比
二、硬件设计 1、硬件总体框图 原理:采用8位的51单片机做控制器,程序采用C语言编程。利用定时器定时中断控制输出不同频率、占空比的PWM。采用矩阵键盘设置任意的频率和占空比。LCD1602屏幕显示当前的PWM。 2.单片机最小系统 最小系统由复位电路、晶振电路组成 3.LCD1602屏幕4.矩阵键盘
总电路 三、软件设计 1、定时器输出PWM 采用定时器定时中断输出PWM。开始时计算计算一个PWM周期所需的计数值,然后通过占空比计算出高电平计数值和低电平计数值。进入中断服务后,当为输出高电平时装载低电平值并输出低电平,当输出低电平时,装载高电平值并输出高电平。
void InterruptTimer0() interrupt 1
{
if (PWMOUT == 1)
{
TH0 = LowRH;
TL0 = LowRL;
PWMOUT = 0;
}
else
{
TH0 = HighRH;
TL0 = HighRL;
PWMOUT = 1;
}
}
2、矩阵按键检测 使用行列反转扫描法
unsigned int KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 0;break;
case 0x7d:return 1;break;
case 0x7b:return 2;break;
case 0x77:return 3;break;
case 0xbe:return 4;break;
case 0xbd:return 5;break;
case 0xbb:return 6;break;
case 0xb7:return 7;break;
case 0xde:return 8;break;
case 0xdd:return 9;break;
case 0xdb:return 10;break;
case 0xd7:return 11;break;
case 0xee:return 12;break;
case 0xed:return 13;break;
case 0xeb:return 14;break;
case 0xe7:return 15;break;
default:return 16;break;
}
}
四、实物图
|