导航:首页 > 操作系统 > jd51单片机

jd51单片机

发布时间:2022-08-26 03:33:35

① 51单片机 10个按键控制10个继电器 按第一个按键第一个继电器吸合1小时后自动断开 第二个同样 互不影响

#include<reg51.h>
#defineucharunsignedchar
ucharflag[10],cnt,sec[10],min[10];
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
sbitk4=P1^3;
sbitk5=P1^4;
sbitk6=P1^5;
sbitk7=P1^6;
sbitk8=P1^7;
sbitk8=P0^0;
sbitk10=P0^1;

sbitjdq1=P0^2;
sbitjdq2=P0^3;
sbitjdq3=P0^4;
sbitjdq4=P0^5;
sbitjdq5=P0^6;
sbitjdq6=P0^7;
sbitjdq7=P2^0;
sbitjdq8=P2^1;
sbitjdq9=P2^2;
sbitjdq10=P2^3;

voidt0isr()interrupt1
{
uchari;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=20)
{
cnt=0;
for(i=0;i<10;i++)
{
sec[i]++;
if(sec[i]>59)
{
sec[i]=0;
min[i]++;
if(min[i]>59)
{
min[i]=0;
flag[i]=1;
}
}
}
}
main()
{
uchari;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(k1==0)
{
while(k1==0);
cnt=0;
flag[0]=0;
sec[0]=0;
min[0]=0;
jdq1=0;
}
.......共10个键,差不多
switch(i)
{
case0:if(flag[0]==1)jdq1=1;break;
case1:if(flag[1]==1)jdq2=1;break;
case2:if(flag[2]==1)jdq3=1;break;
case3:if(flag[3]==1)jdq4=1;break;
case4:if(flag[4]==1)jdq5=1;break;
case5:if(flag[5]==1)jdq6=1;break;
case6:if(flag[6]==1)jdq7=1;break;
case7:if(flag[7]==1)jdq8=1;break;
case8:if(flag[8]==1)jdq9=1;break;
case9:if(flag[9]==1)jdq10=1;break;
}
i++;
}
}

② 51单片机如何控制蜂鸣器发出不同声调

我这里有现成的程序,把分给我,留下信箱,我就给你发过去,呵呵。我利用软件定时和中断方式都有,可以演奏音乐,不过蜂鸣器演奏的实在够难听。

看来楼主对程序不感兴趣,我还是告诉你吧,你定时必须知道准确的定时时间,音乐中DO RE MI-----SI都是有一定的频率也就是Hz,都如下:
c1:262Hz--thtl=0xf8b3
d1:294Hz--0xf972
e1:330Hz--0xfa14
f1:349Hz--0xfa66
g1:392Hz--0xfb03
a1:440Hz--0xfb8f
b1:494Hz--0xfc0b
前面是HZ,后面是我用硬件定时得到的TH和TL的值。
比如你想发C1的音,先用软件定一个262*2Hz的延时反复调用,在一个周期内使buzzer响,再接着一个周期使buzzer不响,如此反复就得到了262Hz的声音,也就类似发出了C1的声音。
反正是够难听的。

③ 51单片机,为什么当jdq1==1时,不进行串口发送,请高手

检查一下你的串口初始化是否正确
void commInit()
{
SCON = 0x52;
PCON = 0x80;
TMOD = 0x21;
TH1 = 0x0FA;
TL1 = 0x0FA;
TCON = 0x40;
}
波特率可以更加你的需要设置,如果你的串口初始化正确,你要看一下你的RTS引脚是否一直处于复位状态,这将导致单片机不能向串口发送数据。

④ 51单片机绝对的难题。。

程序一开始,flage=0,if 不成立,程序结束,没有循环,Game Over,这就是 俗称 的 单次系统。
这样的问题 也敢提出来 当 绝对难题!!偶 很 佩服 LZ 的勇气!!

⑤ 51单片机控制舵机,舵机不转

虽然这种“锅派”程序烂了点,但舵机还是可以控制的。其中 占空比范围是 1/40 ~ 5/40,至于能转多大角度,LZ 先算下能不能看出来。
另外,LZ 说的 分2种情况,那都不是正确的硬件。应该把2种情况合起来。独立5V 跟 GND,然后把GND 跟 开发板 连起来。

⑥ 菜鸟求问 51单片机 舵机 手机蓝牙APP设置

1、以上程序写在串口中断中,读串口BUFF数据赋给a变量
2、手机app与单片机蓝牙进行连接
3、设置相同波特率、停止位、校验码
4、app发送字符型的‘3’,‘4’,‘5’

⑦ 有使用jd51单片机的同学吗

这不是个二选一的问题,首先.
做自动化的,相当多的人是这两种都有深入了解的.
建议从51开始,这个是基础,也容易上手,了解这个,后续的东西就容易了,
还有个好处,有这个基础(硬件,软件C51之类),PLC的东西,你就会觉得顺理成章.
本来PLC设计出来就是为了降低使用难度的,但那是要至少对通常硬件有个大致了解的基础上的,
若一开始就局限于PLC,一些基本特征的理解反而会成为障碍.
看看现在知道上对PLC的提问集中在什么范围内,你会有同感.

⑧ 谁可以帮我编一个51单片机型号为STC89C52RC 舵机型号为mg995的转向程序

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,jd;
sbit pwm=P1^0;
sbit jia=P3^2;
sbit jian=P3^3;
uchar code table[10] = {0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
//延时函数
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);
}
//定时器初始化
void Time0_init()
{
TMOD=0x01; //定时器0工作方式1
IE=0x82;
TH0=0xfe;
TL0=0x33; //11.0592MHZ晶振,0.5ms
TR0=1;
}
//定时器0中断程序
void Time0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd) //判断0.5ms次数是否小于角度标识
pwm=1; //是,pwm输出高电平
else
pwm=0; //否,输出低电平
count=count+1;
count=count%40; //次数始终保持为40,即保持周期为20ms
}
//按键扫描
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd++; //角度增加 1
count=0; //按键按下则20ms周期重新开始计时
if(jd==6)
jd=5; //已经是180度,保持
while(jia==0);
}
}
if(jian==0)
{
delay(10);
if(jian==0)
{
jd--;
count=0;
if(jd==0)
jd=1; //已经0度,保持
while(jian==0);
}
}
}
//数码管显示
void display()
{
uchar ,shi,ge ;
switch(jd)
{
case 1:
=0;
shi=0;
ge=0;
break;
case 2:
=0;
shi=4;
ge=5;
break;
case 3:
=0;
shi=9;
ge=0;
break;
case 4:
=1;
shi=3;
ge=5;
break;
case 5:
=1;
shi=8;
ge=0;
break;
}
P0=table[];
P2=1;
delay(5);
P0=table[shi];
P2=2;
delay(5);
P0=table[ge];
P2=3;
delay(5);
}
void main()
{
//jd=1;
count=0;
Time0_init();
while(1)
{
keyscan();
display();
}
}

⑨ 51单片机识别0x10及其以上的十六进制数不成功

你这程序写的也没谁了,都是重复代码,更有意思是,sw_out( )子程序中却用了while(1),然后再用break中止循环,这样写毫无意义,干脆去掉这一对代码,没有这么写程序的,太不规范。还有向串口发回原数据,每段都重复,那就放在串口中断程序中,接收后立即返回呀。主程序在b==1时才调sw_out( )函数,这样,sw_out( )只做识别a是什么值,做什么动作。

那么,你的问题的原因是,在主程序调用sw_out( )中发送a,采用查询方式,但串口却是开中断的,所以,在主程序中发送数据之前必须关串口中断,ES=0; 等发送完再开,ES=1; 太麻烦。不如在串口中断程序中,接收完就马上发送,少了很多麻烦和错误。

⑩ 如何用51单片机控制舵机的单片机程序是怎么写的希望你也能给我发一个编写程序和电路图

单片机系统实现对舵机输出转角的控制,必须首先完成两项任务:首先,产生基本的PWM周期信号,即产生20ms的周期信号;其次,调整脉宽,即单片机调节PWM信号的占空比。单片机能使PWM信号的脉冲宽度实现微秒级的变化,从而提高舵机的转角精度。单片机完成控制算法,再将PWM信号输出到舵机。
发一个自己原来写的简单的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar count,jd;
sbit pwm=P1^0;
sbit jia=P3^2;
sbit jian=P3^3;
uchar code table[10] = {0x3f,0x06,0x5b,
0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
//延时函数
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=125;j>0;j--);

}
//定时器初始化
void Time0_init()
{
TMOD=0x01; //定时器0工作方式1
IE=0x82;
TH0=0xfe;
TL0=0x33; //11.0592MHZ晶振,0.5ms
TR0=1;
}
//定时器0中断程序
void Time0() interrupt 1
{
TH0=0xfe;
TL0=0x33;
if(count<jd) //判断0.5ms次数是否小于角度标识
pwm=1; //是,pwm输出高电平
else
pwm=0; //否,输出低电平
count=count+1;
count=count%40; //次数始终保持为40,即保持周期为20ms
}
//按键扫描
void keyscan()
{
if(jia==0)
{
delay(10);
if(jia==0)
{
jd++; //角度增加 1
count=0; //按键按下则20ms周期重新开始计时
if(jd==6)
jd=5; //已经是180度,保持
while(jia==0);
}
}
if(jian==0)
{
delay(10);
if(jian==0)
{
jd--;
count=0;
if(jd==0)
jd=1; //已经0度,保持
while(jian==0);
}
}
}
//数码管显示
void display()
{
uchar ,shi,ge ;
switch(jd)
{
case 1:
=0;
shi=0;
ge=0;
break;
case 2:
=0;
shi=4;
ge=5;
break;
case 3:
=0;
shi=9;
ge=0;
break;
case 4:
=1;
shi=3;
ge=5;
break;
case 5:
=1;
shi=8;
ge=0;
break;
}
P0=table[];
P2=1;
delay(5);
P0=table[shi];
P2=2;
delay(5);
P0=table[ge];
P2=3;
delay(5);
}
void main()
{
//jd=1;
count=0;
Time0_init();
while(1)
{
keyscan();
display();
}
}
电路图很简单的,几个按键,再在单片机最小系统上接出一个信号线,再给舵机供上电就可以了。

阅读全文

与jd51单片机相关的资料

热点内容
广东加密货币 浏览:214
利用python批量查询系统 浏览:493
什么app看左右脸 浏览:302
台湾小公主s解压密码 浏览:568
易语言锁机软件源码 浏览:156
迅雷下载完成无法解压 浏览:592
硬盘分区命令图解 浏览:445
当前云服务器如何关闭 浏览:78
mac下python在哪 浏览:641
广东惠州DNS服务器地址 浏览:357
编译影片时软件渲染错误 浏览:625
流星蝴蝶剑解压失败 浏览:294
如何确认方舟编译器 浏览:664
奶粉源箱源码什么意思 浏览:178
台州程序员兼职一般去哪些网站 浏览:404
旧版本怎么下载到新的安卓 浏览:970
flash个人网站源码下载 浏览:724
javasocketbyte 浏览:268
素描基础教程pdf 浏览:542
香港商报pdf版 浏览:428