完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include "reg52.h"
***it pwm =P2^7 ; //PWM信号输出 ***it jia =P2^4; //角度增加按键检测IO口 ***it jan =P2^5; //角度减少按键检测IO口 unsigned char jd; //角度标识 unsigned char count; //0.5ms次数标识 void delay(unsigned char i)//延时 { unsigned char j,k; for(j=i; j>0; j--) for(k=110; k>0; k--); } void time0_Init() //定时器初始化 { TMOD = 0x01; //定时器0工作在方式1 IE = 0x82; TH0 = 0xfe; TL0 = 0x33; //11.0592MZ晶振,0.5ms TR0 = 1; //定时器开始 } void Time0_Int() interrupt 1 //中断程序 { TH0 = 0xfe; //重新赋值 TL0 = 0x33; if(count < jd) //判断0.5ms次数是否小于角度标识 pwm = 1; //确实小于,PWM输出高电平 else pwm = 0; //大于则输出低电平 ++ count; //0.5ms次数加1 count = count % 40; //次数始终保持为40 即保持周期为20ms } void keyscan() //按键扫描 { if(0 == jia) //角度增加按键是否按下 { delay(5); //按下延时,消抖 if(0 == jia) //确实按下 { ++ jd; //角度标识加1 count = 0; //按键按下 则20ms周期从新开始 if(6 == jd) jd = 5; //已经是180度,则保持 while(!jia); //等待按键放开 } } if(0 == jan) //角度减小按键是否按下 { delay(5); if(0 == jan) { -- jd; //角度标识减1 count = 0; if(0 == jd) jd = 1; //已经是0度,则保持 while(!jan); } } } void main() { jd = 3; //默认角度 count = 0; Time0_Init(); while(1) { keyscan(); //按键扫描 } } 比如说:按一下jia键,确实是增加了45°角,但是松开键盘之后又回到了最开始的角度,怎么回事啊??? |
|
相关推荐
3个回答
|
|
自己写程序不要一口气写完,最好一边写一边测试。。。
|
|
|
|
|
|
|
|
差不多 我的倒是能转动 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
788 浏览 0 评论
2275 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2141 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1682 浏览 0 评论
2930 浏览 3 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5551 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 14:10 , Processed in 0.478936 second(s), Total 66, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号