单片机设计,设计用一个LED灯通过“亮”、“灭”的方式传送1字节信息,使得用户看到LED灯后能根据闪烁的某种信息,将这个字节记下来。
应该通过什么方式好呢?比如我现在想到的一种方式是:
1. 有发送的信息时,LED开始点亮。
2. 发送逻辑“1”的时候灯会按照100ms的周期闪烁2下。
3. 发送逻辑“0”的时候灯会按照100ms的周期闪烁1下。
4. 发送结束,LED灯熄灭。没有数据的空闲时期LED常灭。
这样在发送数据0x5a时(二进制01011010),灯会按照:单双单双双单双单 的方式闪烁。
但是在实际使用中就会发现,在单片机发送信号的时候,很难记得住闪烁的次数,记录下的数据也经常错。
而我同学使用的是节拍型的记录方式,比如亮灭灭亮是1001,亮亮灭灭是1100,这样的程序应该按照怎么样的逻辑实现呢?
LED灯用“亮”、“灭”方式传送单片机调试信息,有什么好方法吗?
答案:3 悬赏:20 手机版
解决时间 2021-02-21 04:50
- 提问者网友:世勋超人
- 2021-02-20 15:43
最佳答案
- 五星知识达人网友:蓝房子
- 2021-02-20 17:06
个人觉得,关键在于你使用哪种方式更容易接受到LED灯亮与灭表示的信息,而不是先确定怎么发送数据。
相当于约定好 发送与接受之间的协议。
我觉得你的方式挺不错,只是还没把发送与接受的协议弄完整。比如,你怎么确定LED要发送数据了?什么时候开始发送数据?什么时候数据发送完毕?如果你能解决这三个问题,程序也就可以设计出来了~
你同学的也是可以的,但是需要配合其它东西进行读取,比如需要秒表计时配合等,但是还是没有完整解决三面三个问题,如果使用程序进行读取就没那样的问题,问题是你现在是用人去判断,所以,要设计更适合人分辩出来的显示效果才是关键!
相当于约定好 发送与接受之间的协议。
我觉得你的方式挺不错,只是还没把发送与接受的协议弄完整。比如,你怎么确定LED要发送数据了?什么时候开始发送数据?什么时候数据发送完毕?如果你能解决这三个问题,程序也就可以设计出来了~
你同学的也是可以的,但是需要配合其它东西进行读取,比如需要秒表计时配合等,但是还是没有完整解决三面三个问题,如果使用程序进行读取就没那样的问题,问题是你现在是用人去判断,所以,要设计更适合人分辩出来的显示效果才是关键!
全部回答
- 1楼网友:神也偏爱
- 2021-02-20 18:48
#include
#define uchar unsigned char
uchar dat,num;
sbit bell=P1^0;
sbit LED=P1^1;
bit flag=0;
void senddat(uchar a)
{
dat=a;
num=8;
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag=~flag;
if(flag)
{
if(num!=0)
{
num--;
LED=dat&0x01;
dat>>=1;
}
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
while(1)
{
if(num==0)
{
senddat(0xa9);
}
}
}
- 2楼网友:低血压的长颈鹿
- 2021-02-20 18:27
你参考串口的传输方式,在每次开始传输前要发一定长度的开始信号,然后定时采集LED的状态作为数据的bit。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯