目录
具体实现功能
按键控制PWM波输出,通过按键控制PWM波占空比,改变PWM的波形。
设计介绍
51单片机简介
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得51系列单片机为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
51系列单片机具有以下标准功能:
8k字节Flash,512字节RAM,
32位I/O口线,看门狗定时器,
内置4KB EEPROM,
MAX810复位电路,
三个16位定时器/计数器,
一个6向量2级中断结构,
全双工串行口。
另外, 51系列在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机停止工作,直到下一个中断或硬件复位为止。本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。
设计思路
文献研究法:搜集整理相关研究资料,认真阅读文献,为研究做准备;
调查研究法:通过调查、分析、具体实验等方法,发现相关存在问题和解决办法;
比较分析法:比较不同设计的具体原理,以及同一类传感器性能的区别,分析系统的研究现状与发展前景;
软硬件设计法:通过软硬件设计实现具体硬件,最后测试各项功能是否满足要求。
设计内容
仿真图(protues8.7)
本设计利用protues8.7软件实现仿真设计,具体如图。
注:免费分享,请按照下图自行绘制仿真!!

程序(Keil5)
本设计利用KEIL5软件实现程序设计。
注:全部代码免费分享,请自行建立工程!!
本设计由汇编语言编写,全部代码如下:
PWMH DATA 30H ;高电平脉冲的个数PWM DATA 31H ;PWM周期COUNTER DATA 32HTEMP DATA 33HORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0100HMAIN:MOV SP,#60H ;给堆栈指针赋初值MOV PWMH,#02H ;MOV COUNTER,#01HMOV PWM,#15HMOV TMOD,#02H ;定时器0在模式2下工作MOV TL0,#38H ;定时器每200us产生一次溢出MOV TH0,#38H ;自动重装的值SETB ET0 ;使能定时器0中断SETB EA ;使能总中断SETB TR0 ;开始计时KSCAN:JNB P1.1,K1CHECK ;扫描KEY1,JNB P1.2,K2CHECK ;扫描KEY2,如果按下KEY2,跳转到KEY2处理程序SJMP KSCANK1CHECK:JB P1.1,K1HANDLE ;去抖动,如果按下KEY1,跳转到KEY1处理程序SJMP K1CHECKK1HANDLE:MOV A,PWMHCJNE A,PWM,K1H0 ;判断是否到达上边界SJMP KSCAN ;是,则不进行任何操作K1H0:MOV A,PWMHINC ACJNE A,PWM,K1H1 ;如果在加1后到达最大值CLR TR0 ;定时器停止SETB P1.0 ;P1.0为高电平SJMP K1H2K1H1:CJNE A,#02H,K1H2 ;如果加1后到达下边界SETB TR0 ;重开定时器K1H2:INC PWMH ;增加占空比SJMP KSCANK2CHECK:JB P1.2,K2HANDLE ;去抖动,如果按下KEY2,跳转到KEY2处理程序SJMP K2CHECKK2HANDLE:MOV A,PWMHCJNE A,#01H,K2H0 ;判断是否到达下边界SJMP KSCAN ;是,则不进行任何操作K2H0:MOV A,PWMHMOV TEMP,PWMDEC ACJNE A,#01H,K2H1 ;如果在减1后到达下边界CLR TR0 ;定时器停止CLR P1.0 ;P1.0为低电平SJMP K2H2K2H1:DEC TEMPCJNE A,TEMP,K2H2 ;如果到达上边界SETB TR0 ;启动定时器K2H2:DEC PWMH ;降低占空比SJMP KSCANINTT0:PUSH PSW ;现场保护PUSH ACCINC COUNTER ;计数值加1MOV A,COUNTERCJNE A,PWMH,INTT01 ;如果等于高电平脉冲数CLR P1.0 ;P1.0变为低电平INTT01:CJNE A,PWM,INTT02 ;如果等于周期数MOV COUNTER,#01H ;计数器复位SETB P1.0 ;P1.0为高电平INTT02:POP ACC ;出栈POP PSWRETIEND
运行结果如图:
本设计采用51单片机实现PWM波的输出,并可通过按键调整PWM波的占空比,进而改变波形。设计中使用了protues8.7进行仿真,Keil5进行程序开发。
&spm=1001.2101.3001.5002&articleId=128195062&d=1&t=3&u=4a16659840e54f0bb2ec586d07cf8b82)
4008

被折叠的 条评论
为什么被折叠?



