欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機串行通信遇到 問題,求大神指點
[打印本頁]
作者:
鬼圣
時間:
2019-6-8 11:34
標題:
單片機串行通信遇到 問題,求大神指點
單片機串口通信,通過電腦發送01,02。當發送01時LED小燈亮,同時數碼管的顯示加1。發送02時小燈滅,數碼管不加。現在的問題是,小燈能夠正常亮與滅,但數碼管不正常顯示。即傳輸數據沒問題,但是數碼管會亂碼,數碼管使用的是共陽。發送01,小燈亮,數碼管從0變到了8。問題出在哪里?求大神指點
#include<reg51.h>
#define uchar unsigned char
sbit LED=P1^0;
unsigned char code SMG[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char cnt=0;
uchar recv_dat;
void RESV()interrupt 4
{
RI=0;
recv_dat=SBUF;
SBUF=recv_dat;
while(TI==0);
TI=0;
}
void main()
{
TMOD=0X20;
TH1=TL1=0XFD;
PCON=0X00;
SCON=0X50;
ES=1;
EA=1;
TR1=1;
while(1)
{
if(recv_dat==0x01)
{
LED=0;
cnt++;
}
else if(recv_dat==0x02)
{
LED=1;
}
P0 =SMG[cnt];
}
}
作者:
冰麒麟
時間:
2019-6-8 12:35
我覺得很大可能性是你的硬件方面存在問題。數碼管使用的位數也需要注意。一位數碼管和4位一體或者6位一體都不一樣的
作者:
lfc315
時間:
2019-6-8 14:06
數碼管顯示數字,對應的筆畫亮,哪幾個筆畫亮,是從哪里定義的?
作者:
suncat0504
時間:
2019-6-8 15:45
你的程序也有問題。對cnt沒有加以限制,串口發送0x01給單片機超過9次的時候,cnt>9了,數組越界。如果程序區內相應的下一個單元數據為0,會導致數碼管所有筆段全部被點亮。改成cnt=(cnt++)%10;不好嗎?
另外,recv_dat在被中斷程序中賦值以后,比如串口發了0x01,那么之后串口不發送任何數據,recv_dat會一直保持0x01,這樣的結果是,在while循環中,if(recv_dat==0x01)會一直滿足條件,一直執行cnt++;我覺得,你在完成if...else..處理中,最好加入recv_dat=0之類的清除處理,保證串口發來數據后,if...else中的處理被執行一次。
作者:
suncat0504
時間:
2019-6-8 15:47
if(recv_dat==0x01)
{
LED=0;
cnt=(cnt++)%10;
recv_dat=0;
}
else if(recv_dat==0x02)
{
LED=1;
recv_dat=0;
}
作者:
suncat0504
時間:
2019-6-8 15:49
你現在的現象,很正常,由于0x01被保持,主循環處理很快從0到9,以至于你觀察不到數碼管的顯示過程。
作者:
soy一sauce
時間:
2019-6-8 18:46
定義一個全局變量flag,在串口發送中斷時置flag=1;在主函數里取判斷這個flag==1,并且清零。也就是檢測是否發生串口中斷。
作者:
a452541823
時間:
2019-6-8 19:29
首先if(recv_dat==0x01)這條語句會一直滿足,肉眼是看不出來數碼管的變化,你可以加兩條調試語句進去查看數值的變化;
作者:
a452541823
時間:
2019-6-8 19:30
其次,你需要確認數碼管的引腳定義或者硬件連線上有沒有問題
作者:
lele5211314
時間:
2019-6-9 17:27
這個不能只看程序的,還要看你的數碼管的具體電路
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1