//8*8led点阵屏仿真电梯数字滚动显示 //processing作为上位机模拟楼层 //点击processing上相对应的楼层,点阵屏上的数字产生相应的滚动 //接收程序 #include <reg51.h>//包含头文件reg51.h #include <intrins.h> #define uchar unsigned char #define uint unsigned int

uchar code Table[]= //0~9的取模 { 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, val = 0;

void main() { Current_Level = 1; //从1开始显示

TMOD = 0x20;    //TMOD=0010 0000B,定时器1工作方式为方式2
SCON = 0x50;
PCON = 0x00;    //PCON中的SMOD=0
TH1 = 0xFD;
TL1 = 0xFD;    //波特率为9600b/s
TR1 = 1;        //启动T1,波特率发生器工作
while (1)
{
    while (RI == 0);    //查询是否接受到单片机甲的数据
    RI = 0;            //接受完毕一个字符,清零接受中断标志位
    val = SBUF;        //接受缓冲器的字符,即单片机甲的开关状态
    P1 = val;
    if (val >= 1 && val <= 9) {
        Dest_Level = Table[val - 1]; //目的的操作数为1~9
    }
}

}

void Led_Dispaly() { uchar i; i = Current_Level * 8 + r + offset; P0 = ~Table[i];

//上升显示
if (Current_Level < Dest_Level)
{
    if (++r == 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)
    {//每个数字有八个字节
        r = 0;
        if (++x == 4)
        {//完成x次刷新后前偏
            x = 0;
            if (--offset == -8)
            {
                offset = 0;
                Current_Level--;
            }

        }
    }

}
//停止滚动,保持稳定的刷新显示
else
{
    if (++r == 8) r = 0;
}

}

import processing.serial.*;

Serial port;

void setup() { port = new Serial(this, "COM3", 9600); //Arduino板的端口号 size(200, 500); textSize(150); }

void draw() { background(225);

String floors = "F9 F8 F7 F6 F5 F4 F3 F2 F1";
textSize(24);
fill(255, 0, 0);
textLeading(50);
text(floors, 20, 25, 40, 500);


fill(100);
rect(50, 0, 100, 50);

fill(100);
rect(50, 50, 100, 50);

fill(100);
rect(50, 100, 100, 50);

fill(100);
rect(50, 150, 100, 50);

fill(100);
rect(50, 200, 100, 50);

fill(100);
rect(50, 250, 100, 50);

fill(100);
rect(50, 300, 100, 50);

fill(100);
rect(50, 350, 100, 50);

fill(100);
rect(50, 400, 100, 50);

}

void mouseClicked() { if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 0) && (mouseY <= 50)) { println("9floor"); port.write(0x09); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 100)) { println("8floor"); port.write(0x08); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 100) && (mouseY <= 150)) { println("7floor"); port.write(0x07); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 150) && (mouseY <= 200)) { println("6floor"); port.write(0x06); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 200) && (mouseY <= 250)) { println("5floor"); port.write(0x05); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 250) && (mouseY <= 300)) { println("4floor"); port.write(0x04); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 300) && (mouseY <= 350)) { println("3floor"); port.write(0x03); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 350) && (mouseY <= 400)) { println("2floor"); port.write(0x02); } else if ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 400) && (mouseY <= 450)) { println("1floor"); port.write(0x01); }

8x8 LED点阵屏仿真电梯数字滚动显示 - 使用Processing控制

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

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