标题: 单片机串口控制流水灯方向速度 Proteus仿真程序 [打印本页]

作者: cangyuan    时间: 2021-7-18 20:29
标题: 单片机串口控制流水灯方向速度 Proteus仿真程序
本次实验是通过上上位机控制实验一的升级,通过输入数字来控制流水灯的速度和方向。在窗口输入3,流水灯向右流动;在窗口输入4,流水灯向左流动;在窗口输入5,流水灯左右流动;在窗口输入0,流水灯慢速流动;在窗口输入1,流水灯中速流动;在窗口输入2,流水灯快速流动
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include "reg51.h"
  2. #define u8 unsigned char//0--255
  3. #define u16 unsigned int//0--65535
  4. void delay16(u16 i){while(i--);}
  5. #include "uart.h"
  6. u8 code tab[15]={1,2,4,8,16,32,64,128,64,32,16,8,4,2,1};
  7. u16 sudu=20000;
  8. u8 fang=0;//0向右,1向左,2左右

  9. void loop(u8 d1,u8 d2)//流水灯效果
  10. {
  11.         u8 i=0;
  12.         for(i=d1;i<d2;i++)
  13.         {
  14.                 P1=~tab[i];
  15.                 delay16(sudu);
  16.         }
  17. }

  18. void main()
  19. {
  20.         UART1_init();
  21.         while(1)
  22.         {
  23.                 if(fang==0)loop(0,8);//向左
  24.                 if(fang==1)loop(7,15);//请补充代码,向右
  25.                 if(fang==2)loop(0,15);//请补充代码,左右
  26.         }
  27. }

  28. void UART_INT(void) interrupt 4//暂时只接收1个数
  29. {
  30.         u8 i=0;//获取串口发送过来的数
  31.         if(RI)//如果是串口输入引起的中断
  32.         {
  33.                 i=SBUF & 0x0F;//或者if(i>0x2F && i<0x3A)i=SBUF-0x30;
  34.                 switch(i)
  35.                         {
  36.                           case 0:sudu=60000;break;
  37.                                 case 1:sudu=30000;break;
  38.                                 case 2:sudu=3000;break;
  39.                                 case 3:fang=1;break;
  40.                                 case 4:fang=0;break;
  41.                                 case 5:fang=2;break;
  42.                         }//请补充代码,输入0慢1中2快3右4左5左右
  43.                 RI=0;
  44.         }
  45.         else TI=0;//串口输出引起的中断,不管
  46. }
复制代码

所有资料51hei提供下载:
串口控制2-控制流水灯方向速度.7z (108.79 KB, 下载次数: 21)






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1