标题:
单片机串口控制流水灯方向速度 Proteus仿真程序
[打印本页]
作者:
cangyuan
时间:
2021-7-18 20:29
标题:
单片机串口控制流水灯方向速度 Proteus仿真程序
本次实验是通过上上位机控制实验一的升级,通过输入数字来控制流水灯的速度和方向。在窗口输入3,流水灯向右流动;在窗口输入4,流水灯向左流动;在窗口输入5,流水灯左右流动;在窗口输入0,流水灯慢速流动;在窗口输入1,流水灯中速流动;在窗口输入2,流水灯快速流动
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
捕获.PNG
(73.43 KB, 下载次数: 66)
下载附件
2021-7-19 03:07 上传
单片机源程序如下:
#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)
2021-7-19 03:08 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1