1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//输出0 -1方波,由键盘输入频率值,可由键盘调节频率和占空比
#include #include #define uint unsigned int static unsigned int pwno,n; //pwno 占空比;n 频率; uint counter=0; //计数器; ***it out = P1^0; //波形输出端口 void delay(uint xms) //延迟函数 { uint i,j; for(j=xms;j>0;j--) for(i=110;i>0;i--); } int keyCheck() //键盘检测按键,并输出key值 { char temp; uint key=0; while(1) { if(key!=0) break;//如果key被赋值了证明键盘被按下,跳出循环,返回key值 //******************************** 扫描第四列 P2= 0xfe; temp= P2; if(temp!=0xfe) { delay(10); if(temp!=0xfe) //防抖 { switch(temp) { case 0xee: key= 14;break; case 0xde: key= 16;break; case 0xbe: key= 15;break; case 0x7e: key= 13;break; } } } //******************************** 扫描第三列 P2= 0xfd; temp= P2; if(temp!=0xfd) { delay(10); if(temp!=0xfd) { switch(temp) { case 0xed: key= 7;break; case 0xdd: key= 8;break; case 0xbd: key= 9;break; case 0x7d: key=12;break; } } } //******************************** 扫描第二列 P2= 0xfb; temp= P2; if(temp!=0xfb) { delay(10); if(temp!=0xfb) { switch(temp) { case 0xeb: key= 4;break; case 0xdb: key= 5;break; case 0xbb: key= 6;break; case 0x7b: key= 11;break; } } } //******************************** 扫描第一列 P2= 0xf7; temp= P2; if(temp!=0xf7) { delay(10); if(temp!=0xf7) { switch(temp) { case 0xe7: key= 1;break; case 0xd7: key= 2;break; case 0xb7: key= 3;break; case 0x77: key= 10;break; } } } }; return key; } void main() { uint i,j,c; i=0; j=0; c=0; n=100; out = 0; P2 = 0xff; while(1) { i=keyCheck(); while(1) { c=keyCheck(); if(c==14) break; }; j = keyCheck(); n = 100000/(i*pow(10,j)); //计数需要达到的个数,即为频率 pwno = n/2; //占空比初值为50% TMOD = 0x02; //定时器 TH0 = 256-92; //100us TL0 = TH0; EA = 1; ET0 = 1; TR0 = 1; //中断返回点 while(1) //后续调整频率和占空比,并有reset功能(c=15) { c=keyCheck(); if(c==10) n--; if(c==11) n++; if(c==12) pwno++; if(c==13) pwno--; if(c==15) break; }; }; } timer0()interrupt 1 using 1 { counter++; //中断一次为100us if(counter>n) counter=0; //大于n时候 归0; if(counter<=pwno) out = 1; else out = 0; }
|
|
相关推荐
11个回答
|
|
程序没仔细看,所以不知道你要表达的具体问题,个人只是感觉,你那个keycheck()里头太啰嗦,是思路不清的表现,建议你先优化键盘检测程序后
理清楚思路,这样有助于发现解决问题。 另外,问问题的核心;你遇到什么问题? 你贴了代码,贴了图,难道你觉得别人会复制你的代码去仿真吗?一般人没这个时间与精力。
最佳答案
|
|
|
|
各位大哥大神帮帮忙。耐心看下。
|
|
|
|
|
|
|
|
|
|
|
|
这里没人的么。求高手啊
|
|
|
|
|
|
|
|
|
|
救命啊~~~~急急急
|
|
|
|
287530891 发表于 2015-5-2 09:19 = =忘记说了,谢谢提醒 整体思路 是 先由键盘输入一个值(频率值的数值位),再按确认(c=14),再输入一个值(频率值的数量级位),之后就进入波形输出,期间可以由 键盘控制频率和占空比。你看看哪里有问题。 keycheck 程序 由于16键,只能这样写了。每一行每一行的扫。 仿真 后,波形起初为0(设置好的初值);但是按完确认(c=14)后;波形就一直是1了。 要求我写程序第一行了。 没有得到输出要求的波形。 我也觉得keycheck 有问题。但是按程序执行来看没问题啊- -。。 回头我在看看, 不会调试.....哭啊。 大神救命 |
|
|
|
|
|
|
|
已经解决了。。自己跳进自己的陷阱里了。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
386 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1670 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1123 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1005 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1229 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12018 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:36 , Processed in 0.759322 second(s), Total 94, Slave 76 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号