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

標題: 單片機串口控制16位流水燈 仿真及源程序 [打印本頁]

作者: 51黑電子迷    時間: 2017-2-19 01:08
標題: 單片機串口控制16位流水燈 仿真及源程序
51單片機串口控制16位流水燈的仿真原理圖如下:


單片機源程序:
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define FOSC 11059200L      //System frequency
  4. #define BAUD 9600           //UART baudrate

  5. #define Level_1   10
  6. #define Level_2   20
  7. #define Level_3   30
  8. #define Level_4   40

  9. unsigned char count = 0;
  10. unsigned char count_max = Level_1;
  11. char  Current_LED = 1;

  12. bit busy;
  13. bit DIR  = 0;
  14. bit Start_Stop = 0;          //0開始 ,1停止


  15. void UARTInit(void);
  16. void SendData(unsigned char dat);
  17. void SendString(char *s);
  18. void Timer0Init(void);
  19. void Light_Current_LED(void);


  20. void main()
  21. {
  22.         UARTInit();
  23.         Timer0Init();
  24.     while(1)
  25.         {
  26. //                  SendString("STC89");
  27.                   Light_Current_LED();
  28.         }
  29. }

  30. /*----------------------------
  31. UART interrupt service routine
  32. ----------------------------*/
  33. void Uart_Isr() interrupt 4 using 1
  34. {
  35.         unsigned char temp,command;
  36.         
  37.     if (RI)
  38.     {
  39.         RI = 0;             //Clear receive interrupt flag
  40.         temp = SBUF;          //P0 show UART data
  41.                 command =  temp & 0XF0;
  42.                 switch(command)
  43.                 {
  44.                    case 0x10 :         Start_Stop = 0;break;
  45.                    case 0x20 :        Start_Stop = 1;break;
  46.                    case 0x30 :        if(DIR) Current_LED =1;else Current_LED =16;break;
  47.                    case 0x40 :        temp &= 0x0f;  if(temp>0) count_max = Level_1 * temp;break;
  48.                    case 0x50 :        if(DIR)         DIR = 0; else DIR = 1;        break;
  49.                 }

  50.     }
  51.     if (TI)
  52.     {
  53.         TI = 0;             //Clear transmit interrupt flag
  54.         busy = 0;           //Clear transmit busy flag
  55.     }
  56. }
  57. void Timer0_Isr() interrupt 1 using 1
  58. {
  59.         TL0 = 0x00;                //設置定時初值
  60.         TH0 = 0xA6;                //設置定時初值
  61.    count++;
  62.    if(count >= count_max)
  63.    {
  64.              count = 0;
  65.              if(Start_Stop == 1)
  66.           {
  67.                    return        ;
  68.           }
  69.           if(DIR == 0)         //順時針        右移
  70.           {
  71.                     Current_LED ++;
  72.                  if(Current_LED>16)
  73.                  {
  74.                  Current_LED = 1;
  75.                  }
  76.           }
  77.           else           //逆時針                   左移
  78.           {
  79.               Current_LED --;
  80.                  if(Current_LED<0)
  81.                  {
  82.                  Current_LED = 16;
  83.                  }
  84.           }
  85.    }
  86. }
  87. /*----------------------------
  88. Send a byte data to UART
  89. Input: dat (data to be sent)
  90. Output:None
  91. ----------------------------*/
  92. void SendData(unsigned char dat)
  93. {
  94.     while (busy);           //Wait for the completion of the previous data is sent
  95.     ACC = dat;              //Calculate the even parity bit P (PSW.0)
  96.     busy = 1;
  97.     SBUF = ACC;             //Send data to UART buffer
  98. }
  99. /*----------------------------
  100. Send a string to UART
  101. Input: s (address of string)
  102. Output:None
  103. ----------------------------*/
  104. void SendString(char *s)
  105. {
  106.     while (*s)              //Check the end of the string
  107.     {
  108.         SendData(*s++);     //Send current char and increment string ptr
  109.     }
  110. }

  111. void UARTInit()
  112. {
  113.     SCON = 0x50;            //8-bit variable UART

  114.     TMOD = 0x20;            //Set Timer1 as 8-bit auto reload mode
  115.     TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
  116.     TR1 = 1;                //Timer1 start run
  117.     ES = 1;                 //Enable UART interrupt
  118.     EA = 1;  
  119. }

  120. void Timer0Init(void)                //25毫秒@11.0592MHz
  121. {
  122. //        AUXR &= 0x7F;                //定時器時鐘12T模式
  123.         TMOD &= 0xF0;                //設置定時器模式
  124.         TMOD |= 0x01;                //設置定時器模式
  125.         TL0 = 0x00;                //設置定時初值
  126.         TH0 = 0xA6;                //設置定時初值
  127.         TF0 = 0;                //清除TF0標志
  128.         TR0 = 1;                //定時器0開始計時
  129.         ET0 = 1;
  130. }

  131. void Light_Current_LED()
  132. {
  133.   switch(Current_LED)
  134.   {
  135.   case 1 : P1 = ~0X01;P2 = ~0X00;        break;
  136.         case 2 : P1 = ~0X02;P2 = ~0X00;        break;
  137.          case 3 : P1 = ~0X04;P2 = ~0X00;        break;         
  138.         case 4 : P1 = ~0X08;P2 = ~0X00;        break;
  139.         case 5 : P1 = ~0X10;P2 = ~0X00;        break;
  140.         case 6 : P1 = ~0X20;P2 = ~0X00;        break;
  141.         case 7 : P1 = ~0X40;P2 = ~0X00;        break;
  142.         case 8 : P1 = ~0X80;P2 = ~0X00;        break;         
  143.         case 9 : P1 = ~0X00;P2 = ~0X01;        break;
  144.         case 10 : P1 = ~0X00;P2 = ~0X02;        break;
  145.         case 11 : P1 = ~0X00;P2 = ~0X04;        break;
  146.         case 12 : P1 = ~0X00;P2 = ~0X08;        break;
  147.          case 13 : P1 = ~0X00;P2 = ~0X10;        break;         
  148.         case 14 : P1 = ~0X00;P2 = ~0X20;        break;
  149.         case 15 : P1 = ~0X00;P2 = ~0X40;        break;
  150.         case 16 : P1 = ~0X00;P2 = ~0X80;        break;

  151.   
  152.   
  153.   }

  154. }
復制代碼




仿真和源碼下載:
串口控制流水燈.rar (61.82 KB, 下載次數: 55)






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲精品1区 | 国产一级在线视频 | 亚洲高清av在线 | 国产成人精品免费视频大全最热 | 日韩午夜影院 | 在线亚州 | 日韩在线播放av | 成人国产在线视频 | 91久久| 91精品成人久久 | 99爱国产 | 在线只有精品 | 国产精品日日摸夜夜添夜夜av | 国产精品永久久久久久久www | 久久国产精品一区二区三区 | 午夜国产精品视频 | 国产小视频在线 | 一区二区三区 在线 | 在线婷婷| 天啪| av在线一区二区三区 | 日韩精品一区二区三区在线播放 | 国产精品久久av | 男女精品网站 | 久久精品视频免费看 | 国产欧美一区二区三区久久 | 日本一卡精品视频免费 | 夜夜夜久久久 | 日韩视频 中文字幕 | 久久国产婷婷国产香蕉 | av黄色在线观看 | 久久最新| 日日夜夜天天综合 | 久久成人国产精品 | 91精品国产一二三 | 欧美福利影院 | 伦理二区| 一区二区三区国产好 | 91精品国产综合久久婷婷香蕉 | 亚洲精品美女视频 | 一区二区三区在线 |