51单片机如何扩展外部端口

时间:2023-03-19作者:佚名
我们知道 51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。

要用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多少个时间基准n'。
那么就可以编写程序,根据定的时间基准t给定时器赋值初始化,然后开启定时器,定义一个标志位flag,根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平,用一个变量去记录定时器中断的次数,每次中断就让记录中断次数的变量 1,在中断程序里面判断这个变量的值是否到了 n,如果到了说明高电平的时间够了,那么就改变flag为0,输出低电平,同时记录中断变量的值清零,每次中断的时候依旧 1,根据flag=0的情况跳去判断记录变量的值是否到了n' 如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到想要的PWM波形。

51单片机如何扩展外部端口

/******************************************************************************************
* 文件:PWM.c         
* 备注:51单片机PWM完全注释          *
******************************************************************************************/
#i nclude
unsigned char CYCLE;      /*PWM周期长度*/
unsigned char count = 0;        /*记录中断次数*/
unsigned char PWM_ON;      /*PWM高电平时间计数*/
void delay()          /*延时约78ms*/
{
unsigned char i, j;
for(j = 100; j; j--)
for(i = 255; i; i--)
;
}
void main()
{
bit Flag;       /*变化状态标志,0:渐亮,1:渐暗*/
TMOD = 0x01;           /*时间基准为1ms*/
TH0 = (65536 - 100) / 256;      /*右端表达式编译后为0xFF*/
TL0 = (65536 - 100) % 256;      /*同上*/
IE = 0x82;       /*开定时器0中断0x82 = 10000010*/
TR0 = 1;          /*启动定时器0*/
CYCLE = 10;           /*十级亮度,即十级PWM*/
while(!Flag)          /*渐亮,每一次变化亮度增加1*/
{
delay();          /*延时*/
PWM_ON ;       /*高电平脉宽延长,即亮度增加*/
if(PWM_ON == CYCLE)       /*若高电平脉宽增长到整个周期*/
{
Flag = 1;       /*则转为渐暗*/
}
}
while(Flag)       /*渐暗,每一次变化亮度减少1*/
{
delay();       /*延时*/
PWM_ON--;       /*高电平脉宽缩短,即亮度降低*/
if(PWM_ON == 0)      /*若高电平脉宽缩短到0*/
{
Flag = 0;      /*则转为渐亮*/
}
}
}
void time0_server() interrupt 1 using 1
{
TH0 = (65536 - 100) / 256;      /*时间基准为1ms*/
TL0 = (65536 - 100) % 256;      /*即每1ms触发一次中断*/
if(count == PWM_ON)      /*若中断次数达到亮度设定值*/
{
P2 = 0xFF;        /*则熄灯*/
}
count ;        /*每次中断记录 1*/
if(count == CYCLE)      /*若中断次数达到PWM周期长度*/
{
count = 0;       /*则清零中断记录*/
if(PWM_ON != 0)       /*若此时亮度值非零*/
{
P2 = 0;        /*则点灯*/
}
}
}

相关阅读

MG26/27型多用钳形表电路,建议收藏

MG26/27型袖珍钳形表为可携式磁电系多量限仪表,本表可在机械运行中不用停电的情况下,测量工作频率为50Hz,电压不超过600V的交流网路中的电流及电压。 仪表有一副可开口的导磁铁芯...
2023-07-05
MG26/27型多用钳形表电路,建议收藏

家庭装修电路布线,超详细,速收藏!

布线原则 ① 强弱电的间距要在30-50公分,因为强电会干扰你的电视信号。 布线原则 ② 强弱电不能同穿一根管内。 强电主要指家里用的交流电。弱电主要是指网线,电话线一类的电线...
2023-06-11
家庭装修电路布线,超详细,速收藏!

学习16个电工入门基础知识

   1.三相交流异步电动机控制系统中常用的保护环节有哪些?   短路保护,过载保护,零压和欠压保护,过电流保护,断相保护。    2.电气控制系统图分哪儿类?   电气控制系统图分...
2023-06-27
学习16个电工入门基础知识

史上最全电工口诀,必备205条!建议收藏

本文电工口诀共分3个部分,总字数18600,文章篇幅较长,建议先收藏,留着以后慢慢看! 目录 第一部分:25条电工基础应用口诀 第二部分:电工常用口诀 第一节:已知容量求电流 21条...
2023-06-11
史上最全电工口诀,必备205条!建议收藏

电气故障排查五步法,一看就会

做电工、设备维修的都懂,现场遇到电气故障,最头疼的就是盲目拆、盲目测,费时间还找不到问题。今天给大家分享一套简单、实用的电气故障快速排查五步法,不管是电工、设备维修还是...
2026-04-11
电气故障排查五步法,一看就会

热销商品

连发瓦斯枪通用瓦斯射钉钢钉枪瓦斯气体高强度瓦斯射钉枪165气罐

连发瓦斯枪是一款专为高强度瓦斯射钉设计的工具,其特点在于能够连续发射瓦斯气体,适用于多种需要快速穿透和固定材料的场景。这款瓦斯枪配备了165气罐,容量足够满足...
4.5

黄铜镀镍金属电缆防水接头EWM密封格兰头HSM电线固定填料函M20M16

黄铜镀镍金属电缆防水接头EWM密封格兰头(HSM型)是一款高性能电线固定与密封装置,适用于M16和M20螺纹规格。采用优质黄铜材质并表面镀镍处理,具备优异的防腐蚀性、机械...
1.14

消防配件二氧化碳灭火器2 3 5 7KG弯头喷管24Kg干冰CO2外喷头喷嘴

二氧化碳灭火器配件中的2357KG弯头喷管与24Kg干冰CO₂外喷头喷嘴,是专业消防设备的重要组成部分。该弯头喷管采用高强度耐腐蚀材料制造,连接灵活,适用于高压CO₂灭火...
4.5

雷士照明led筒灯孔灯客厅吊顶天花灯嵌入式过道筒灯射灯桶灯家用

雷士照明LED筒灯是一款专为现代家居设计的嵌入式照明产品,适用于客厅、吊顶、过道、卧室等空间。采用高品质LED光源,光线柔和均匀,显色指数高,有效还原真实色彩,营造舒...
5.78

雷士照明嵌入式防眩筒灯射灯窄边过道灯深杯客厅无主灯天花灯米雪

雷士照明嵌入式防眩筒灯射灯——“米雪”系列,专为现代无主灯设计打造。采用窄边深杯结构,有效控制杂散光,实现精准防眩,营造舒适柔和的光环境。适用于客厅、过道、天...
25.67

网站栏目