永发信息网

LED灯用“亮”、“灭”方式传送单片机调试信息,有什么好方法吗?

答案:3  悬赏:20  手机版
解决时间 2021-02-21 04:50
单片机设计,设计用一个LED灯通过“亮”、“灭”的方式传送1字节信息,使得用户看到LED灯后能根据闪烁的某种信息,将这个字节记下来。

应该通过什么方式好呢?比如我现在想到的一种方式是:
1. 有发送的信息时,LED开始点亮。
2. 发送逻辑“1”的时候灯会按照100ms的周期闪烁2下。
3. 发送逻辑“0”的时候灯会按照100ms的周期闪烁1下。
4. 发送结束,LED灯熄灭。没有数据的空闲时期LED常灭。
这样在发送数据0x5a时(二进制01011010),灯会按照:单双单双双单双单 的方式闪烁。
但是在实际使用中就会发现,在单片机发送信号的时候,很难记得住闪烁的次数,记录下的数据也经常错。
而我同学使用的是节拍型的记录方式,比如亮灭灭亮是1001,亮亮灭灭是1100,这样的程序应该按照怎么样的逻辑实现呢?
最佳答案
个人觉得,关键在于你使用哪种方式更容易接受到LED灯亮与灭表示的信息,而不是先确定怎么发送数据。

相当于约定好 发送与接受之间的协议。

我觉得你的方式挺不错,只是还没把发送与接受的协议弄完整。比如,你怎么确定LED要发送数据了?什么时候开始发送数据?什么时候数据发送完毕?如果你能解决这三个问题,程序也就可以设计出来了~

你同学的也是可以的,但是需要配合其它东西进行读取,比如需要秒表计时配合等,但是还是没有完整解决三面三个问题,如果使用程序进行读取就没那样的问题,问题是你现在是用人去判断,所以,要设计更适合人分辩出来的显示效果才是关键!
全部回答
#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);   }  } }
你参考串口的传输方式,在每次开始传输前要发一定长度的开始信号,然后定时采集LED的状态作为数据的bit。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
从2016年2月8日到2017年2月10日,一共多少天
打在中间的是唇钉可以换唇环吗?
为什么有的苹果手机屏幕黑的点两下就亮了
哈弗h6自动档磨合期最高实速是多少
天蝎座的女生,拜不拜金?
潍城京华门诊部怎么去啊,有知道地址的么
大巴车上需要安装监控吗
保定火车站预订电话是多少〖←〗
那里可以下载叮叮叮叮叮叮的纯下课铃声
黄氏玉器我想知道这个在什么地方
下列物质中,不能被人体消化道直接吸收的是CA
艾玛尔陶瓷官方旗舰店地址在哪,我要去那里办
有关下图的叙述,正确的是 ⑴①→②表示DNA转
有首歌的歌词是 我在乖乖的
三翼服装总汇在什么地方啊,我要过去处理事情
推荐资讯
出国旅游要有无违法犯罪的证明吗
公共汽车写着新能源,反正我在加油站加气站
去台湾旅游需要什么手续
花菜怎么做好吃又简单
Basic house(金源时代购物中心店)地址在什么
我们的用古文怎么说
女朋友 今天QQ不在线 电话不接 短信也不回
葫芦晒干是否需要把皮刮掉?
一封朝奏九重天,夕贬潮州路八千.
永兴房地产信息咨询服务有限公司地址在哪,我
【一提人都认识】...若S中任意4个人当中都至
单位和个人在异地、同城或统一票据交换区域的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?