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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

在單片機串口上發數用數碼管上接收 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:433804 發表于 2018-11-26 22:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
新手一枚,這個程序調試了很久了,一直達不到想要的效果,求救

  1. #include <reg52.h>    //此文件中定義了單片機的一些特殊功能寄存器
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. typedef unsigned int u16;   //對數據類型進行聲明定義
  5. typedef unsigned char u8;
  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;
  9. u16 s,c;
  10. u8 disp[4];
  11. u8 temp[3]={0};
  12. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  13. /*******************************************************************************
  14. * 函數名         :UsartInit()
  15. * 函數功能     :設置串口
  16. * 輸入           : 無
  17. * 輸出           : 無
  18. *******************************************************************************/
  19. void UsartInit()
  20. {
  21. SCON=0X50;   //設置為工作方式1
  22. TMOD=0X20;   //設置計數器工作方式2
  23. PCON=0X80;   //波特率加倍
  24. TH1=0XF3;    //計數器初始值設置,注意波特率是4800的
  25. TL1=0XF3;
  26. ES=1;      //打開接收中斷
  27. EA=1;      //打開總中斷
  28. TR1=1;     //打開計數器
  29. }
  30. /*******************************************************************************
  31. * 函 數 名         : delay
  32. * 函數功能     : 延時函數,i=1時,大約延時10us
  33. *******************************************************************************/
  34. void delay(u16 i)
  35. {
  36. while(i--);
  37. }
  38. /*******************************************************************************
  39. * 函數名         :datapros()
  40. * 函數功能   :數據處理函數
  41. * 輸入           : 無
  42. * 輸出           : 無
  43. *******************************************************************************/
  44. void datapros()
  45. {
  46. disp[0]=smgduan[0];//千位
  47. disp[1]=smgduan[temp[0]];//百位
  48. disp[2]=smgduan[temp[1]];//十位
  49. disp[3]=smgduan[temp[2]];//個位
  50. }

  51. /*******************************************************************************
  52. * 函數名         :DigDisplay()
  53. * 函數功能   :數碼管顯示函數
  54. * 輸入           : 無
  55. * 輸出           : 無
  56. *******************************************************************************/
  57. void DigDisplay()
  58. {
  59. u8 i;
  60. for(i=0;i<4;i++)
  61. {
  62.   switch(i)  //位選,選擇點亮的數碼管,
  63.   {
  64.    case(0):
  65.     LSA=0;LSB=0;LSC=0; break;//顯示第0位
  66.    case(1):
  67.     LSA=1;LSB=0;LSC=0; break;//顯示第1位
  68.    case(2):
  69.     LSA=0;LSB=1;LSC=0; break;//顯示第2位
  70.    case(3):
  71.     LSA=1;LSB=1;LSC=0; break;//顯示第3位
  72.   }
  73.   P0=disp[3-i];//發送數據
  74.   delay(100); //間隔一段時間掃描
  75.   P0=0x00;//消隱
  76. }  
  77. }
  78. /*******************************************************************************
  79. * 函 數 名       : main
  80. * 函數功能   : 主函數
  81. * 輸    入       : 無
  82. * 輸    出      : 無
  83. *******************************************************************************/
  84. void main()
  85. {
  86. UsartInit();
  87. while(1)
  88. {
  89.   datapros();  //數據處理函數
  90.   DigDisplay();//數碼管顯示函數  

  91. }  
  92. }
  93. /*******************************************************************************
  94. * 函數名         : Usart() interrupt 4
  95. * 函數功能    : 串口通信中斷函數
  96. * 輸入           : 無
  97. * 輸出           : 無
  98. *******************************************************************************/
  99. void Usart() interrupt 4
  100. {temp[c]=s;
  101. SBUF=temp[c];//將接收到的數據放入到發送寄存器
  102. while(!TI);    //等待發送數據完成
  103. TI=0;       //清除發送完成標志位
  104. s=SBUF;//出去接收到的數據
  105. RI = 0;//清除接收中斷標志位
  106. c++;
  107. temp[c]=s;

  108. }
復制代碼




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

使用道具 舉報

沙發
ID:94031 發表于 2018-11-27 13:16 | 只看該作者
你得把想要的效果寫出來。
回復

使用道具 舉報

板凳
ID:433804 發表于 2018-11-27 19:06 | 只看該作者
xuyaqi 發表于 2018-11-27 13:16
你得把想要的效果寫出來。

就是在串口上發一個0到255之間的數,然后數碼管能準確的顯示出這個數。
回復

使用道具 舉報

地板
ID:433804 發表于 2018-11-28 22:11 | 只看該作者
自問自答
給后人一點幫助
#include <reg52.h>                         //此文件中定義了單片機的一些特殊功能寄存器
#include <intrins.h>
#include <stdio.h>

typedef unsigned int u16;          //對數據類型進行聲明定義
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u16 s,c=0;
u8 disp[4],temp[2];
u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*******************************************************************************
* 函數名         :UsartInit()
* 函數功能                   :設置串口
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void UsartInit()
{
        SCON=0X50;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數器初始值設置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數器
}

/*******************************************************************************
* 函 數 名         : delay
* 函數功能                   : 延時函數,i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);       
}

/*******************************************************************************
* 函數名         :DigDisplay()
* 函數功能                 :數碼管顯示函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void DigDisplay()
{
       
        u8 i;
        for(i=0;i<3;i++)
        {
                switch(i)         //位選,選擇點亮的數碼管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0;P0=smgduan[temp[2-i]]; break;//顯示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0;P0=smgduan[temp[2-i]]; break;//顯示第1位
                        case(2):
                        LSA=0;LSB=1;LSC=0;P0=smgduan[temp[2-i]]; break;//顯示第2位
                }
                delay(100); //間隔一段時間掃描       
                P0=0x00;//消隱
        }               
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{
        UsartInit();
        while(1)
        {
                DigDisplay();//數碼管顯示函數                 
        }               
}
/*******************************************************************************
* 函數名         : Usart() interrupt 4
* 函數功能                  : 串口通信中斷函數
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/
void Usart() interrupt 4
{
        if(c>=3)
        c=0;
        s=SBUF;
        while(!RI); //串口接收
        RI=0;
        SBUF=s;
        while(!TI);         //串口發送
        TI=0;
        temp[c]=s-'0';
        c++;       
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产高清一区二区三区 | 亚洲国产精品日本 | 美女视频一区二区三区 | 99九九视频| 国产激情视频在线 | 国产精品视频一二三 | 久久一视频 | 北条麻妃视频在线观看 | 综合视频在线 | 欧美性猛交一区二区三区精品 | 久久国内精品 | 91免费版在线 | 国产精品成人一区二区三区夜夜夜 | 婷婷久久久久 | 国产精品久久久久久久久久久久 | 欧美久 | 久久久av中文字幕 | 99热.com| 视频二区国产 | 亚洲精品中文字幕在线观看 | 麻豆成人在线视频 | 日本午夜一区 | 天天拍天天操 | 国产一区二区高清在线 | 国产精品久久 | 婷婷福利| 国产农村妇女毛片精品久久麻豆 | 中国三级黄色录像 | 午夜三级视频 | 男人的天堂在线视频 | 欧美日韩精品一区二区天天拍 | 日韩国产精品一区二区三区 | 日本成人片在线观看 | 极品粉嫩国产48尤物在线播放 | 久久久久国产一区二区三区 | 日本人做爰大片免费观看一老师 | 国产大毛片 | 亚洲毛片在线观看 | 免费激情av | 波多野结衣精品在线 | 麻豆一区二区三区精品视频 |