本次实验是通过上上位机控制实验一的升级,通过输入数字来控制流水灯的速度和方向。在窗口输入3,流水灯向右流动;在窗口输入4,流水灯向左流动;在窗口输入5,流水灯左右流动;在窗口输入0,流水灯慢速流动;在窗口输入1,流水灯中速流动;在窗口输入2,流水灯快速流动
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include "reg51.h"
- #define u8 unsigned char//0--255
- #define u16 unsigned int//0--65535
- void delay16(u16 i){while(i--);}
- #include "uart.h"
- u8 code tab[15]={1,2,4,8,16,32,64,128,64,32,16,8,4,2,1};
- u16 sudu=20000;
- u8 fang=0;//0向右,1向左,2左右
- void loop(u8 d1,u8 d2)//流水灯效果
- {
- u8 i=0;
- for(i=d1;i<d2;i++)
- {
- P1=~tab[i];
- delay16(sudu);
- }
- }
- void main()
- {
- UART1_init();
- while(1)
- {
- if(fang==0)loop(0,8);//向左
- if(fang==1)loop(7,15);//请补充代码,向右
- if(fang==2)loop(0,15);//请补充代码,左右
- }
- }
- void UART_INT(void) interrupt 4//暂时只接收1个数
- {
- u8 i=0;//获取串口发送过来的数
- if(RI)//如果是串口输入引起的中断
- {
- i=SBUF & 0x0F;//或者if(i>0x2F && i<0x3A)i=SBUF-0x30;
- switch(i)
- {
- case 0:sudu=60000;break;
- case 1:sudu=30000;break;
- case 2:sudu=3000;break;
- case 3:fang=1;break;
- case 4:fang=0;break;
- case 5:fang=2;break;
- }//请补充代码,输入0慢1中2快3右4左5左右
- RI=0;
- }
- else TI=0;//串口输出引起的中断,不管
- }
复制代码
所有资料51hei提供下载:
串口控制2-控制流水灯方向速度.7z
(108.79 KB, 下载次数: 21)
|