51 单片机接收程序

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table[]= 
{
	0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,//0
	0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,//1
	0x00,0x7E,0x02,0x02,0x7E,0x40,0x40,0x7E,//2
	0x00,0x7E,0x02,0x02,0x7E,0x02,0x02,0x7E,//3
	0x00,0x48,0x48,0x48,0x7E,0x08,0x08,0x08,//4
	0x00,0x7E,0x40,0x40,0x7E,0x02,0x02,0x7E,//5
	0x00,0x7C,0x40,0x40,0x7C,0x44,0x44,0x7C,//6
	0x00,0x7C,0x04,0x04,0x04,0x04,0x04,0x04,//7
	0x00,0x7C,0x44,0x44,0x7C,0x44,0x44,0x7C,//8
	0x00,0x7E,0x42,0x42,0x7E,0x02,0x02,0x7E,//9
	
};
uint r= 0;
char offset = 0;
uchar Current_Level = 1,Dest_Level=1,x=0,t =0;

void main()
{
	Current_Level = 1;//?1????
	TMOD  = 0x01;	//T0????
	TH0 = -4000/256;//4ms//?????8??
	TL0 = -4000%256;
	TR0=1;
	IE = 0x82;
	EA =1;
	while(1);	
}

void Led_Dispaly() interrupt 1
{
	uchar i;
	//??????,???????,???????
	if (Current_Level == Dest_Level )
	{
		if (SBUF == 0x09) Dest_Level = 9;
		else if (SBUF == 0x08) Dest_Level = 8;
		else if (SBUF == 0x07) Dest_Level = 7;
		else if (SBUF == 0x06) Dest_Level = 6;
		else if (SBUF == 0x05) Dest_Level = 5;
		else if (SBUF == 0x04) Dest_Level = 4;
		else if (SBUF == 0x03) Dest_Level = 3;
		else if (SBUF == 0x02) Dest_Level = 2;
		else if (SBUF == 0x01) Dest_Level = 1;
	}
	TH0 = -4000/256;//4ms
	TL0 = -4000%256;
	i = Current_Level *8 + r + offset;
	P0 = ~Table[i];
	
	//????
	if (Current_Level < Dest_Level )
	{
		if ( ++r ==8)
		{//?????8??
				r =0;
			if( ++x ==4)
			{//???x??????
				x = 0;
				if(++offset ==8)
				{
					offset = 0;
					Current_Level++;				
				}
				
			}
		}
		
	}
	//????
	else if(Current_Level > Dest_Level )
	{
		if ( ++r ==8)
		{//?????8??
			r =0;
			if( ++x ==4)
			{//???x??????
				x = 0;
				if(--offset == -8)
				{
					offset = 0;
					Current_Level--;				
				}
				
			}
		}
		
	}
	//????,?????????
	else
	{
		if ( ++r ==8) r =0;		
	}
}

Processing 发送程序

import processing.serial.*;

Serial myPort; //创建串口对象
int level = 1; //初始化电梯当前楼层为1

void setup() {
  size(200, 200);
  myPort = new Serial(this, "COM3", 9600); //设置串口号和波特率
}

void draw() {
  background(255);
  fill(0);
  textSize(20);
  text("Current Level: " + level, 20, 50); //显示当前楼层
  text("Press 1-9 to select floor", 20, 100);
}

void keyPressed() {
  if (key >= '1' && key <= '9') { //如果按下的键是数字键1-9
    level = key - '0'; //将楼层设置为对应数字
    myPort.write(key); //向单片机发送选中的楼层
  }
}

程序说明:

  • 51 单片机程序使用定时器 0 产生 4ms 中断,在中断服务函数 Led_Dispaly() 中读取串口接收到的数据,并根据数据控制 LED 显示屏,模拟电梯的运行过程。
  • Processing 程序接收键盘输入的数字 1-9,并将数字发送给 51 单片机,控制电梯运行到对应楼层。
  • 以上程序需要修改串口号和波特率以适应您的硬件环境。
51 单片机接收程序和 Processing 发送程序示例

原文地址: https://www.cveoy.top/t/topic/k45u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录