历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2019年12月18日 | 51单片机测量PWM脉冲宽度LCD1602显示当前PWM占空比频率

2019-12-18 来源:51hei

此程序通过两个定时器一个外部中断,测量PWM高电平时间以及周期,计算并在1602显示出占空比 周期 高电平时间,只需让脉冲在P3^2口输入即能测得数据。。

单片机源程序如下:

#include

#include


typedef unsigned char uint8;

typedef unsigned int  uint16;//数据类型重定义


uint8 count = 0; //计进入外部中断次数

bit flag = 1;  //捕获结束标志位

long Pwm_All; //PWM的周期

long Pwm_High; //PWM的高电平时间                   占空比=Pwm_High/Pwm_All

void delay(long i)

{

        while(i--);

}


void Interrupt_Init()

{

        /*定时器1为工作模式1 16位计数器 由TR1直接启动

                定时器0为工作模式1 16位计数器 由GATE和TR0共同启动*/

        TMOD = 0x19; 

        

        TH1 = 0;

        TL1 = 0;

        TH0 = 0;

        TL0 = 0;

        

        IT0 = 1;//下降沿触发

        IT1 = 1;

        //TR0 = 1; //GATE高电平启动

        

        EX0 = 1;

        EA = 1;        

}


void main()

{

        uint16 Pwm_percentage; //PWM占空比

        Interrupt_Init();

        LCD1602_Initialize( );

        LCD1602_PrintString(1,1,"ALL:");

        LCD1602_PrintString(1,10,"us");

        LCD1602_PrintString(2,1,"HIGH:");

        LCD1602_PrintString(2,11,"us");

        while(1)

        {

                

                if(flag)

                {

                        Pwm_percentage = Pwm_High*1000 / Pwm_All;

                        LCD1602_PrintChar(1,12,0x30+Pwm_percentage/100);

                        LCD1602_PrintChar(1,13,0x30+Pwm_percentage%100/10);

                        LCD1602_PrintChar(1,14,'.');

                        LCD1602_PrintChar(1,15,0x30+Pwm_percentage%10);

                        LCD1602_PrintChar(1,16,'%');

                        

                        LCD1602_PrintChar(1,5,0x30+Pwm_All/10000);

                        LCD1602_PrintChar(1,6,0x30+Pwm_All%10000/1000);

                        LCD1602_PrintChar(1,7,0x30+Pwm_All%1000/100);

                        LCD1602_PrintChar(1,8,0x30+Pwm_All%100/10);

                        LCD1602_PrintChar(1,9,0x30+Pwm_All%10);

                        LCD1602_PrintChar(2,6,0x30+Pwm_High/10000);

                        LCD1602_PrintChar(2,7,0x30+Pwm_High%10000/1000);

                        LCD1602_PrintChar(2,8,0x30+Pwm_High%1000/100);

                        LCD1602_PrintChar(2,9,0x30+Pwm_High%100/10);

                        LCD1602_PrintChar(2,10,0x30+Pwm_High%10);

                        flag = 0; //计算完一次清零

                }

                delay(70000);

        }

        

}


void EXTI0 () interrupt 0

{

                count++;

        if(count == 1) //第一次下降沿,启动定时器1

        {

                TR1 = 1;

                TR0 = 1;

        }

        if(count == 2) //第二次下降沿,一整个周期完毕

        {

                EX0 = 0; //关闭外部中断,防止被其他打断计算

                TR1 = 0;        //周期停止计数

                TR0 = 0;        //高电平时间停止计数

                Pwm_All = TH1; //获取数据

                Pwm_All = (Pwm_All<<8)+TL1;

                Pwm_High = TH0;

                Pwm_High = (Pwm_High<<8)+TL0;

                TH1 = 0; //清零为下一次做准备

                TL1 = 0;

                TH0 = 0;

                TL0 = 0;

                count = 0;

                flag = 1;        

                EX0 = 1; //开启下一次计算

                TR1 = 0;

                TR0 = 0;

        }

        

}


推荐阅读

史海拾趣

Epistar Corp公司的发展小趣事

面对不断变化的市场需求和行业竞争格局Epistar始终保持创新精神不断探索新的技术方向和应用领域。公司加强与高校和研究机构的合作共同研发新技术、新产品;同时,Epistar还积极参与制定行业标准推动LED行业的健康发展。这些创新举措使Epistar在行业中始终保持领先地位引领着未来LED技术的发展方向。

Circuit Technology Inc公司的发展小趣事

面对电子行业的快速变化和技术更新,CTI始终保持敏锐的洞察力。公司不断加大研发投入,引进高端人才,建立研发团队,致力于开发具有自主知识产权的新技术、新产品。通过不断创新,CTI成功推出了一系列具有竞争力的新产品,不仅满足了市场需求,也提升了公司的核心竞争力。

DREMEL公司的发展小趣事

在电子行业的快速发展中,Dremio公司以其独特的数据治理技术崭露头角。他们开发了一种新型的数据处理引擎,能够直接在云数据湖中查询和分析数据,无需将数据复制到专有数据仓库中。这一创新技术大大提高了数据处理效率,降低了成本,并为企业提供了更灵活的数据管理方式。Dremio凭借这一技术,迅速在电子行业中树立了领先地位。

Heraeus公司的发展小趣事

随着电子行业的不断发展,数据治理和云数据湖领域也面临着越来越多的挑战。Dremio公司始终保持敏锐的市场洞察力,积极应对各种挑战。他们不断投入研发资源,推出了一系列创新产品和技术解决方案。例如,他们开发了一种基于人工智能的数据分析引擎,能够自动识别和预测数据中的异常和趋势。这一技术不仅提高了数据分析的准确性和效率,也为企业提供了更全面的数据支持。

Easy Magnet Corp公司的发展小趣事

为了拓宽市场渠道,Easy Magnet Corp公司积极寻求与国际知名企业的合作。通过与国外企业的技术交流和合作研发,公司不仅获得了先进的生产技术和管理经验,还成功地将产品推向了国际市场。这一过程中,公司不仅提升了品牌影响力,还增强了自身的研发实力和市场竞争力。

DLG Hanbit公司的发展小趣事

面对数字化转型的浪潮,DLG Hanbit公司积极拥抱变革。公司加大了对云计算、大数据、人工智能等技术的研发投入,推出了一系列智能电子产品和解决方案。同时,公司还加强了与互联网企业、电信运营商等合作伙伴的合作,共同打造智能生态圈。未来,DLG Hanbit公司将继续秉承创新、品质、环保的理念,致力于成为全球领先的半导体设计和制造企业。

问答坊 | AI 解惑

请问专门学了单片机,考研应报哪个方向更有戏

我学的电气工程及其自动化,准备报个单片机提高班,我的考研有控制理论和电气工程两个大专业,电气工程里面的专业如下080801电机与电器 080802电力系统及其自动化 080803高电压与绝缘技术 080804电力电子与电力传动 080805电工理论与新技术 感觉 ...…

查看全部问答>

DSP SM510仿真器电路图

DSP SM510仿真器电路图…

查看全部问答>

关于PROTEL99中的schlib

想要向元件库中添加元件,可是画图过程中,主菜单中的PLACE下的pin原本应该是管脚线,但现在变成了一个点了,这是怎么回事啊?请高手指教!…

查看全部问答>

C语言-预处理程序

我们可以在C源程序中插入传给编译程序的各中指令,这些指令被称为预处理器指令,它们扩充了程序设计的环境。现把常用的预处理命令总结如下: 1.      预处理程序 按照ANSI标准的定义,预处理程序应该处理以下指令: #if #i ...…

查看全部问答>

vhdl中赋值问题

    书中说下面的进程可以完成一个硬件求平均的功能,每一个时钟脉冲由a输入一个数值,4个时钟脉冲后将获得4个数值的平均值.     可是我觉得:进程中的语句是顺序执行的,但同时也有并行的特点.当clk上升沿到来时 ave …

查看全部问答>

一段usbd的中断服务程序——为什么第4次中断以后,不再进入这段中断服务程序

这是我在网上找到的一个跟我有着同样原因的人的帖子: 通过串口打印,可以知道当usb线插入pc时,有中断产生. void __irq IsrUsbd(void) //usb设备中断服务程序 { U8 usbdIntpnd,epIntpnd; U8 saveIndexReg=rINDEX_REG; usbdIntpnd=rUSB_I ...…

查看全部问答>

串口调试

研究了几天的串口驱动,今天想调试一下,不知道怎么样才能实现板子和PC机的通讯,请各位指点 PS:我在网上Google了一下,看到好多是说将两个串口引脚短接就行了,而我要实现的是能够和上位机通讯。…

查看全部问答>

想在笔记本上进行调试

没有仿真器,不用j-tag。可以用usb转串口不?…

查看全部问答>

发个软件bf531 jtag的软件,有条件帮忙测试一下,顺便散点分

是ADI,blackfin533系列的Jtag Flash下载器,穷人用用的. 我是有官方的仿真器,刚好这段时间做个东西,需要操作bf531的jtag口,所以 干脆做了这个小东西玩玩. 有条件的兄弟帮忙测试一下. 好久也没来,顺便散分露个脸: 介绍地址: http://www.fcdpj.c ...…

查看全部问答>

(郭天祥)新概念51单片机C语言教程 入门、提高、开发、拓展全攻略

谈起我学单片机经历,可以说是从郭天祥老师51视频教程开始入门的,可以说是他把我代入单片机的世界!!下面是郭老师写的一本书,非常经典!!值得看N边! 可以引导单片机初学者少走弯路。。。。努力学习!!鄙视光下不回帖的!!…

查看全部问答>