標題: RS232單片機串口實驗 [打印本頁]

作者: 黑點子12    時間: 2017-3-22 15:44
標題: RS232單片機串口實驗
RS232串口實驗,在附件里,一共有4個程序 分別實現(xiàn)4個不同的功能。

LCD1602顯示接收到HEX數(shù)據(jù)
數(shù)碼管顯示接收到的HEX數(shù)據(jù)
返回接收到的數(shù)據(jù)
發(fā)送數(shù)據(jù)



下面是數(shù)碼管的那個源碼:
  1. /*******************************************************************************
  2. *                 
  3. *                                        普中科技
  4. --------------------------------------------------------------------------------
  5. * 實 驗 名                 : RS232串口試驗
  6. * 實驗說明       : 單片機將串口接收到的數(shù)據(jù)以10進制顯示在數(shù)碼管上。
  7. * 連接方式       : 見連接圖
  8. * 注    意                 :
  9. *******************************************************************************/

  10. #include<reg51.h>

  11. //--定義使用的IO--//
  12. #define GPIO_DIG P0

  13. sbit LSA=P2^2;
  14. sbit LSB=P2^3;
  15. sbit LSC=P2^4;

  16. //--定義全局變量--//
  17. unsigned char code DIG_CODE[17]={
  18. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  19. 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  20. //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
  21. unsigned char DisplayData[8];
  22. //用來存放要顯示的8位數(shù)的值

  23. //--聲明全局函數(shù)--//
  24. void DigDisplay();         //動態(tài)顯示函數(shù)          
  25. void UsartConfiguration();
  26. /*******************************************************************************
  27. * 函 數(shù) 名         : main
  28. * 函數(shù)功能                   : 主函數(shù)
  29. * 輸    入         : 無
  30. * 輸    出         : 無
  31. *******************************************************************************/

  32. void main()
  33. {
  34.         unsigned char receiveData;

  35.         UsartConfiguration();
  36.         while(1)
  37.         {
  38.                 if(RI == 1)                                //查看是否接收到數(shù)據(jù)
  39.                 {
  40.                         receiveData = SBUF;        //讀取數(shù)據(jù)
  41.                         RI = 0;                                //清除標志位

  42.                         //--因為一次接受只能接收到8位數(shù)據(jù),最大為255,所以只用顯示百位之后--//
  43.                         DisplayData[0] = 0x00;
  44.                         DisplayData[1] = DIG_CODE[receiveData / 100];      // 百位
  45.                         DisplayData[2] = DIG_CODE[receiveData % 100 / 10]; // 十位
  46.                         DisplayData[3] = DIG_CODE[receiveData % 10];           // 個位
  47.                         DisplayData[4] = 0x00;
  48.                         DisplayData[5] = DIG_CODE[receiveData / 100];      // 百位
  49.                         DisplayData[6] = DIG_CODE[receiveData % 100 / 10]; // 十位
  50.                         DisplayData[7] = DIG_CODE[receiveData % 10];
  51.                 }
  52.                 DigDisplay();
  53.         }
  54. }
  55. /*******************************************************************************
  56. * 函 數(shù) 名         :UsartConfiguration()
  57. * 函數(shù)功能                   :設(shè)置串口
  58. * 輸    入         : 無
  59. * 輸    出         : 無
  60. *******************************************************************************/

  61. void UsartConfiguration()
  62. {
  63.         SCON=0X50;                        //設(shè)置為工作方式1
  64.         TMOD=0X20;                        //設(shè)置計數(shù)器工作方式2
  65.         PCON=0X80;                        //波特率加倍
  66.         TH1=0XF3;                    //計數(shù)器初始值設(shè)置,注意波特率是4800的
  67.         TL1=0XF3;
  68.         TR1=1;                                            //打開計數(shù)器
  69. }
  70. /*******************************************************************************
  71. * 函 數(shù) 名         : DigDisplay
  72. * 函數(shù)功能                   : 使用數(shù)碼管顯示
  73. * 輸    入         : 無
  74. * 輸    出         : 無
  75. *******************************************************************************/
  76. void DigDisplay()
  77. {
  78.         unsigned char i;
  79.         unsigned int j;
  80.         for(i=0;i<8;i++)
  81.         {
  82.                 switch(i)         //位選,選擇點亮的數(shù)碼管,
  83.                 {
  84.                         case(0):
  85.                                 LSA=0;LSB=0;LSC=0; break;//顯示第0位
  86.                         case(1):
  87.                                 LSA=1;LSB=0;LSC=0; break;//顯示第1位
  88.                         case(2):
  89.                                 LSA=0;LSB=1;LSC=0; break;//顯示第2位
  90.                         case(3):
  91.                                 LSA=1;LSB=1;LSC=0; break;//顯示第3位
  92.                         case(4):
  93.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  94.                         case(5):
  95.                                 LSA=1;LSB=0;LSC=1; break;//顯示第5位
  96.                         case(6):
  97.                                 LSA=0;LSB=1;LSC=1; break;//顯示第6位
  98.                         case(7):
  99.                                 LSA=1;LSB=1;LSC=1; break;//顯示第7位       
  100.                 }
  101.                 GPIO_DIG=DisplayData[i];//發(fā)送段碼
  102.                 j=10;                                                 //掃描間隔時間設(shè)定
  103.                 while(j--);       
  104.                 GPIO_DIG=0x00;//消隱
  105.         }
  106. }
復(fù)制代碼


21、RS232串口實驗.rar

2.91 MB, 下載次數(shù): 24, 下載積分: 黑幣 -5






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1