完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
我用一下程序调试舵机的使用,其中P1.0-P1.4是数码管的位选,P0口是数码管的段选,P2.0是舵机的控制信号,P3.7和P3.6分别是角度加减的按键,但现在使用一下程序时,虽然舵机可以正常的旋转,但是转速很慢,而且数码管不停地闪烁,按键也没有发挥应有的作用,请大神指教#include
#define uint unsigned int #define uchar unsigned char uchar count,jd; ***it pwm=P2^0; ***it jia=P3^7; ***it jian=P3^6; uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x88,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=125;y>0;y--); } void timer0_init() { TMOD=0x01; IE=0x82; TH0=0xfe; TL0=0x33; TR0=1; } void timer0() interrupt 1 { TH0=0xfe; TL0=0x33; if(count pwm=1; } else pwm=0; count=(count+1); count=count%40; } void keyscan() { if(jia==0) { delay(10); if(jia==0) { jd++; count=0; if(jd==6) { jd=5; while(jia==0); } } } if(jian==0) { delay(10); if(jian==0) { jd--; count=0; if(jd==0) { jd=1; while(jian==0); } } } } void display() //数码管显示函数 { uchar bai,shi,ge; switch(jd) //根据角度标识显示相应的数值 { case 1: bai=0; shi=0; ge=0; break; case 2: bai=0; shi=4; ge=5; break; case 3: bai=0; shi=9; ge=0; break; case 4: bai=1; shi=3; ge=5; break; case 5: bai=1; shi=8; ge=0; break; } P1=0xfe; P0=table[bai]; delay(5); P1=0xfd; P0=table[shi]; delay(5); P1=0xfb; P0=table[ge]; delay(5); } void main() { jd=1; count=0; timer0_init(); while(1) { keyscan(); display(); } } |
|
相关推荐
1个回答
|
|
|
数码管是动态扫描的, 你的按键按下,等待按键放开这个时间比较长,导致数码管扫描频率过慢,造成闪烁
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
506 浏览 0 评论
607 浏览 0 评论
837 浏览 0 评论
832 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
768 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17037 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 20:44 , Processed in 0.478142 second(s), Total 72, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2634