久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2147|回復: 9
打印 上一主題 下一主題
收起左側

單片機串行通信遇到 問題,求大神指點

[復制鏈接]
跳轉到指定樓層
樓主
ID:429598 發表于 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];
       
        }          
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:554109 發表于 2019-6-8 12:35 | 只看該作者
我覺得很大可能性是你的硬件方面存在問題。數碼管使用的位數也需要注意。一位數碼管和4位一體或者6位一體都不一樣的
回復

使用道具 舉報

板凳
ID:10947 發表于 2019-6-8 14:06 | 只看該作者
數碼管顯示數字,對應的筆畫亮,哪幾個筆畫亮,是從哪里定義的?
回復

使用道具 舉報

地板
ID:517466 發表于 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中的處理被執行一次。
回復

使用道具 舉報

5#
ID:517466 發表于 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;
}
回復

使用道具 舉報

6#
ID:517466 發表于 2019-6-8 15:49 | 只看該作者
你現在的現象,很正常,由于0x01被保持,主循環處理很快從0到9,以至于你觀察不到數碼管的顯示過程。
回復

使用道具 舉報

7#
ID:293387 發表于 2019-6-8 18:46 | 只看該作者
定義一個全局變量flag,在串口發送中斷時置flag=1;在主函數里取判斷這個flag==1,并且清零。也就是檢測是否發生串口中斷。
回復

使用道具 舉報

8#
ID:519141 發表于 2019-6-8 19:29 | 只看該作者
首先if(recv_dat==0x01)這條語句會一直滿足,肉眼是看不出來數碼管的變化,你可以加兩條調試語句進去查看數值的變化;
回復

使用道具 舉報

9#
ID:519141 發表于 2019-6-8 19:30 | 只看該作者
其次,你需要確認數碼管的引腳定義或者硬件連線上有沒有問題
回復

使用道具 舉報

10#
ID:93224 發表于 2019-6-9 17:27 | 只看該作者
這個不能只看程序的,還要看你的數碼管的具體電路
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黑人精品欧美一区二区蜜桃 | 国产精品视频导航 | 亚洲91| 亚洲高清成人在线 | 免费久 | 91麻豆精品国产91久久久久久久久 | 国产精品99久久免费观看 | 正在播放一区二区 | 日韩区 | 日韩欧美三级在线 | 免费毛片网| 亚洲欧美中文日韩在线v日本 | 日本一区二区不卡 | 一区二区三区欧美大片 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 日韩一区二区av | 亚洲午夜精品一区二区三区他趣 | 日韩中文一区 | 亚洲午夜精品 | 国产成人免费视频网站高清观看视频 | 欧美中国少妇xxx性高请视频 | 中文在线a在线 | 精品欧美一区二区三区精品久久 | 亚洲综合在线视频 | 国产做a爱免费视频 | 国产成人一区二区三区电影 | 国产香蕉视频 | 免费观看一级特黄欧美大片 | 久久久久九九九女人毛片 | 综合久久综合久久 | 夜夜草 | 亚洲影音先锋 | 国产欧美日韩一区 | 国产一级片 | 久久伊人亚洲 | 精品久久一区二区三区 | 亚洲乱码一区二区三区在线观看 | 欧美啪啪| 欧美一区中文字幕 | 男人的天堂久久 | 超碰91在线 |