本文为博主 LED-执棋困局,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!
> 发布人:LED-执棋困局
> 欢迎你为独创博主LED-执棋困局点赞❤❤❤+关注👍+收藏🌹+评论☺。
系列专栏:CSDN-单片机学习系列🎁
> 我的格言是:“尽最大努力,做最好的自己!💪
版权声明:本文为CSDN博主「LCD-执棋困局」的原创文章,CSDN独一份。
如需转载,还请通知一声噢⚠!
————————————————
版权声明:本文为CSDN博主「LCD-执棋困局」的原创文章,转载请附上原文出处链接及本声明。
————————————————— CSDN ——————————————————————
目录
————————————————— CSDN ——————————————————————
一、PWN的概念及占空比
1.1PWN概念
PWN是模拟信号数字化的一种表现形试,信号通常是方波、正弦波等。主要参数有频率、占空比。目前PWM已经被广泛应用在各种控制系统中,特别是各种模拟电路的控制,多数离不开PWM信号。
1.2占空比
占空比是描述PWN的参数,其定义是一个周期内高电平所占时间的占比,即占空比= t / T(其中t是高电平在一个周期内的所占时间,T为最小正周期)
————————————————— CSDN ——————————————————————
二、项目设计-检测PWN
2.1项目要求
(1)能通过示波器检测到PWN方波。
(2)数码管能显示当前PWN波形的占空比。
优化:出于减小功耗的考虑,占空比在数码管显示中多余的0不显示,例如本应显示"0050",实际显示" 50";本应显示"0006",实际显示" 6"。
(3)按键采用行列扫描,第一个按键功能是将占空比+1,第二个按键功能是将占空比-1。
(4)LED显示流水灯,每过一个PWN方波周期,下一个LED灯亮,当前LED灯灭。每个LED灯亮多久与方波低电平"0"所占时间成正比。
2.2整体设计
模块可以PWN模块、定时器模块、数码管模块、按键模块、LED模块。PWN模块可以作为主模块,因为其他模块多多少少与PWN方波占空比有关,其他模块应为子模块。先解决主模块,再一步步解决子母模块。
2.3PWN模块设计
我们选择频率f=200hz的方波。T=1/200s=5000us。将T分成100份,后面有用,即T/100=50us。
2.4定时器设计
经过2.3,将T分成100份,一份为50us,定时器就定时50us,即中断50us一次,高电平占多少份,占空比就是多少。现在先定义记录中断次数变量,然后用if语句,中断次数不超过占空比为高电平,超过为低电平。
2.5数码管模块设计
采用多个if语句,占空比变量pwn≤100(三位数)时,显示三位,在其基础上 ,pwn≤99(两位数)时,显示两位,最后,在其两个基础上,pwn(一位数)<10,显示一位。本次会介绍两种编程方法。
2.6按键模块设计
调用key.h模块,采用switch-case语句,利用返回值实现不同的功能。
2.7LED模块设计
使用库函数法,引用_crol_()循环左移函数完成流水灯功能。
————————————————— CSDN ——————————————————————
三、软件编码
3.1主程序
/******************************************************************************************
时间:2023/10/20
功能:
1.制作pwn,空占比可以通过按键自调,第一个按键空占比+1,第二个按键空占比+1
2.空占比由数码管显示
3.流水灯
4.示波器显示波形
模块:
1.主程序模块
2.定时器模块
3.数码管显示模块
4.按键模块
5.led模块
******************************************************************************************/
#include <reg51.h>
#include "display.h"
#include "delay.h"
#include "key.h"
#include <intrins.h>
void key_service();
void dis_service();
void led_service();
void Timer0_Init();
void Timer1_Init();
sbit IO3_7=P3^7;
#define IOP1 P1
unsigned char pwn=25;
unsigned char numcnd=0;
unsigned char ledcnd=0;
void main()
{
Timer0_Init();
Timer1_Init();
while(1)
{
key_service();
dis_service();
led_service();
}
}
3.2定时器模块
void Timer0_Init(void) //50微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xCE; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TF0 = 0; //清除TF0标志
EA=1;
ET0=1;
TR0 = 1; //定时器0开始计时
}
void timer0() interrupt 1
{
TR0=0;
numcnd++;
if(numcnd>100)
{
numcnd=0;
}
if(numcnd<pwn)
{
IO3_7=1;
}
else
{
IO3_7=0;
}
TL0 = 0xCE; //设置定时初始值
TH0 = 0xFF; //设置定时初始值
TR0=1;
}
3.3数码管模块
void dis_service()
{
//方法一:
unsigned char temp1,temp2,temp3,temp4;
temp1=23;//千位数不显示,pwn范围为0~100
temp2=pwn/100;//百位数
temp3=pwn/10%10;//十位数
temp4=pwn%10;//个位数
LEDBuf[0]=temp1;
if(pwn<100) pwn:0-99
{
LEDBuf[1]=23;
}
else //pwn:100
{
LEDBuf[1]=temp2;
}
if(pwn<10) //pwn:0-9
{
LEDBuf[2]=23;
}
else
{
LEDBuf[2]=temp3;
}
LEDBuf[3]=temp4;
//方法二:
// if(pwn==100) //pwn:100
// {
// LEDBuf[0]=23;
// LEDBuf[1]=pwn/100;
// LEDBuf[2]=pwn/10%10;
// LEDBuf[3]=pwn%10;
// }
// else if(10<=pwn&&pwn<=99) //pwn:10-99
// {
// LEDBuf[0]=23;
// LEDBuf[1]=23;
// LEDBuf[2]=pwn/10%10;
// LEDBuf[3]=pwn%10;
// }
// else if(0<=pwn&&pwn<10) pwn:0-9
// {
// LEDBuf[0]=23;
// LEDBuf[1]=23;
// LEDBuf[2]=23;
// LEDBuf[3]=pwn%10;
// }
}
void Timer1_Init(void) //1毫秒@12.000MHz
{
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x18; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TF1 = 0; //清除TF1标志
ET1=1;
TR1 = 1; //定时器1开始计时
}
void timer1() interrupt 3
{
TR1=0;
display(); //数码管显示延时1ms
TL1 = 0x18; //设置定时初始值
TH1 = 0xFC; //设置定时初始值
TR1=1;
}
3.4按键模块
void key_service()
{
switch(key())
{
case 1:pwn++;if(pwn>100)pwn=0;break;//pwn加一
case 2:pwn--;if(pwn>100)pwn=100;break;//pwn减一
default:break;
}
}
3.5LED模块
void led_service()
{
static unsigned char temp=0xfe;
unsigned char i;
for(i=0;i<100-pwn;i++)
{
IOP1=temp;//IOP1是P1接口
temp=_crol_(temp,1);//左循环1位
delay(5);
}
}
————————————————— CSDN ——————————————————————
四、仿真结果
4.1波形图
占空比25%:
空占比50%:
空占比100:
空占比0%:
4.2数码管显示
4.3流水灯
———————————————————————————————————————————
本次介绍了PWN和占空比,同时提供模块代码和仿真图,帮助大家理解相关编码思路。
hi!我是博主LED-执棋困局🔥,喜欢或期待更好作品的,可以关注一下我🙏🙏🙏,我们一起进步,另外欢迎大家的点评😊!!!
下一文:电子时钟,下集更精彩。
关注博主:点击支持——LED-执棋困局
———————————————————————————————————————————
版权声明:本文为CSDN博主「LCD-执棋困局」的原创文章,转载请附上原文出处链接及本声明。
原文链接:LCD-执棋困局的文章---PWN