专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
有没有活跃一点的51交流QQ群呀?
2020-02-02 09:18
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
10268
24
24
本人菜鸟一名,自学51一段时间(机械专业),其中很多不懂,有问题来论坛发帖也很久才有人回复,大多稍稍点到为止,所以本人想找个好一点的51QQ群,及时交流,更多更好的向51大神们学习。
另外发一下最近一直困扰我的一段程序,发了几次贴,问题还没有解决,再发一次,目的和问题都在里边,望大神们指点,本人不胜感激。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
renpeng009
2020-02-04 14:43
我修改了下,Keil软仿通过。因为我没有你的实物,请自行测试。
无标题.png
(51.52 KB, 下载次数: 0)
下载附件
2012-11-22 01:52 上传
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit U1=P1^1;
sbit U2=P1^2;
sbit KEY1=P3^4;
sbit KEY2=P3^3;
uchar num,num1,num2,num1_speed,num2_speed;
volatile uint keytime,numt;
void delayms(uchar xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void keyscan()
{
uchar keynum=0;
if((KEY1==0)||(KEY2==0))
{
delayms(5);
if((KEY1==0)||(KEY2==0))
{
TR0=1;
while((!KEY1)||(!KEY2))
{
if(KEY1==0) keynum=1;
else keynum=2;
}
TR0=0;
keytime=numt;
numt=0;
}
if(keytime>=40)
{
switch(keynum)
{
case 1:
{
num1_speed=num1_speed+1;
if(num1_speed>17)
num1_speed=8;
}
keynum=0;
break;
case 2:
{
num2_speed=num2_speed+1;
if(num2_speed>17)
num2_speed=8;
}
keynum=0;
break;
default: break; //keynum=0的情况直接跳出
}
}
if(keytime<40)
{
switch(keynum)
{
case 1:
{
num1_speed=num1_speed-1;
if(num1_speed<8)
num1_speed=8;
}
keynum=0;
break;
case 2:
{
num2_speed=num2_speed-1;
if(num2_speed<8)
num2_speed=8;
}
keynum=0;
break;
default: break;
}
}
keytime=0;
}
}
void init()
{
TMOD|=0x11;
TH0=(65536-20)/256; //20us
TL0=(65536-20)%256;
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
TR1=1; //启动定时器0
EA=1;
}
void main()
{
init();
num1_speed=12;
num2_speed=12;
while(1)
{
keyscan();
}
}
void Time0_Init() interrupt 1 using 1//定时器0作用是控制PWM
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
numt++;
}
void Time1_Init() interrupt 3 using 2
{
TH1=(65536-20)/256; //20us
TL1=(65536-20)%256;
num1++;
num2++;
if(num1<num1_speed)
U1=1;
else U1=0;
if(num1>17)
num1=0;
if(num2<num2_speed)
U2=1;
else U2=0;
if(num2>17)
num2=0;
}
复制代码
加载中...
查看其它24个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
无标题.png (51.52 KB, 下载次数: 0)
下载附件
2012-11-22 01:52 上传
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit U1=P1^1;
- sbit U2=P1^2;
- sbit KEY1=P3^4;
- sbit KEY2=P3^3;
- uchar num,num1,num2,num1_speed,num2_speed;
- volatile uint keytime,numt;
- void delayms(uchar xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void keyscan()
- {
- uchar keynum=0;
- if((KEY1==0)||(KEY2==0))
- {
- delayms(5);
- if((KEY1==0)||(KEY2==0))
- {
- TR0=1;
- while((!KEY1)||(!KEY2))
- {
-
- if(KEY1==0) keynum=1;
- else keynum=2;
- }
- TR0=0;
- keytime=numt;
- numt=0;
- }
- if(keytime>=40)
- {
- switch(keynum)
- {
- case 1:
- {
- num1_speed=num1_speed+1;
- if(num1_speed>17)
- num1_speed=8;
- }
- keynum=0;
- break;
- case 2:
- {
- num2_speed=num2_speed+1;
- if(num2_speed>17)
- num2_speed=8;
- }
- keynum=0;
- break;
- default: break; //keynum=0的情况直接跳出
- }
- }
- if(keytime<40)
- {
- switch(keynum)
- {
- case 1:
- {
- num1_speed=num1_speed-1;
- if(num1_speed<8)
- num1_speed=8;
- }
- keynum=0;
- break;
-
- case 2:
- {
- num2_speed=num2_speed-1;
- if(num2_speed<8)
- num2_speed=8;
- }
- keynum=0;
- break;
-
- default: break;
- }
- }
-
- keytime=0;
- }
- }
- void init()
- {
- TMOD|=0x11;
- TH0=(65536-20)/256; //20us
- TL0=(65536-20)%256;
- TH1=(65536-45872)/256;
- TL1=(65536-45872)%256;
-
- ET0=1; //开定时器0中断
- ET1=1; //开定时器1中断
- TR1=1; //启动定时器0
- EA=1;
- }
- void main()
- {
- init();
- num1_speed=12;
- num2_speed=12;
- while(1)
- {
- keyscan();
- }
- }
- void Time0_Init() interrupt 1 using 1//定时器0作用是控制PWM
- {
- TH0=(65536-45872)/256;
- TL0=(65536-45872)%256;
- numt++;
- }
- void Time1_Init() interrupt 3 using 2
- {
- TH1=(65536-20)/256; //20us
- TL1=(65536-20)%256;
- num1++;
- num2++;
- if(num1<num1_speed)
- U1=1;
- else U1=0;
- if(num1>17)
- num1=0;
- if(num2<num2_speed)
- U2=1;
- else U2=0;
- if(num2>17)
- num2=0;
- }
复制代码一周热门 更多>