51单片机 通过串口发送控制LED灯 闪烁频率 c代码 跪求!!

其实质就是通过电脑串口调试助手控制发送多少则led灯就闪烁多少的#include<reg52.h>sbitLED0=P1^0;unsignedintt;voidmain(... 其实质就是通过电脑 串口调试助手控制 发送多少 则led灯 就闪烁 多少的
#include <reg52.h>
sbit LED0=P1^0;
unsigned int t;

void main ()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA= 1;
REN=1;
SM0=0;
SM1=1;
ES = 1;
//此方法使用bit位对单个端口赋值
while(1)
{
if(RI==1){ /*有串口数据过来*/
RI = 0;
t= SBUF;
}
}
}

void ser() interrupt 4
{
TH1=(65536-10^6/t) /256;
TL1=(65536-10^6/t) %256;
LED0=!LED0;
//打开串口中断
}
展开
 我来答
嘲讽帅哥
推荐于2017-09-05 · TA获得超过1186个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:185万
展开全部
下面的程序我已经调试过了,你可以直接使用,但是一秒闪烁次数告祥t的最大为2000,如果要大于这个数,你必须改小dalay1ms ()内的j值,就可以改大t
#include <reg52.h>
sbit LED0=P1^0;
unsigned int t=0,k;
void dalay1ms (unsigned int i) //晶振选用11.0592
{
unsigned int j;
for(i;i>0;i--)
for(j=922;j>0;j--);
}

void main ()
{

EA=1;
ES=1;
TMOD=0x20; //定时器T1方式为2
TH1=0xfa; //波御友搜特率设定为9600
TL1=0xfa;

while(1)
{
if(t!=0)
{
k=2000/镇历t;
dalay1ms (k) ;
LED0=!LED0;
}
if(t==0)
LED0=0;
}
}
void counter4(void) interrupt 4
{
while(RI==0);
RI = 0;
t= SBUF;
}
追问
这个程序 串口调试 输入值不改变灯的闪烁  急求···我会追加赏分的
追答
哦,对了,是我疏忽了,main()函数下,通讯部分要加上
PCON=0x80; // 波特率倍增.
SCON = 0x50; // 串行口工作方式.
TR1 = 1; // 启动T1
这时候才是波特率9600,其他没问题
宿兴电子
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
百度网友41d469f
2011-07-27
知道答主
回答量:11
采纳率:0%
帮助的人:5.6万
展开全部
问题不是很具体
可以控制的灯数有多少,是走马灯,还是只控制频率。
请写详细些。
追问
只需要控制一盏led灯,然后 通过串口通讯 就是在串口调试助手中 控制他的闪烁频率  例如在串口调试助手中输入50 那么led灯的闪烁频率 为 一秒钟闪烁50下  我再补充下程序 你能帮我修正下吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伯盈秀
2011-07-21 · TA获得超过1444个赞
知道小有建树答主
回答量:3051
采纳率:0%
帮助的人:0
展开全部
顺序写也没问题,把他们的时序弄清就行棚肆了扰和肢 。点亮第一组要亮的灯,延时,在改成第二组再延时,继续第缓世三组。延时时还可以干别的,算好时间回来改灯就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式