接收代码已经包含了串口通信的初始化和中断处理函数的实现,因此只需要在中断函数中解析接收到的数据,并将目标楼层转换为对应数字的模式即可。修改后的接收代码如下:

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

//定义数字0~9的取模 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 };

//定义全局变量 uchar Current_Level = 1, Dest_Level = 1; uint r = 0; char offset = 0; uchar val = 0;

//函数声明 void displayDigit();

void main() { //初始化串口通信 TMOD = 0x20; //定时器1工作方式为方式2 SCON = 0x50; //串口工作方式1,允许接收 PCON = 0x00; //波特率不加倍 TH1 = 0xFD; //计算波特率为9600 TL1 = 0xFD; TR1 = 1; //启动定时器1 ES = 1; //启动串口中断 EA = 1; //启动总中断

while (1) { displayDigit(); //调用显示函数 } }

//串口中断函数 void serial() interrupt 4 { if (RI == 1) { //当接收到数据时 val = SBUF; //读取数据 RI = 0; //清除接收中断标志位 if (val >= 1 && val <= 9) { //如果数据为1~9 Dest_Level = val; //将目标楼层设置为接收到的数据 } } }

//显示函数 void displayDigit() { uchar i = Current_Level * 8 + r + offset; //计算要显示的数字在Table数组中的位置 P0 = ~Table[i]; //将数字模式输出到点阵屏上

//上升显示 if (Current_Level < Dest_Level) { if (++r == 8) { //每个数字有八个字节,判断是否需要切换到下一个字节 r = 0; if (++offset == 8) { //完成一轮刷新后,偏移量增加,当前楼层加1 offset = 0; Current_Level++; } }

} //下降显示 else if (Current_Level > Dest_Level) { if (++r == 8) { //每个数字有八个字节,判断是否需要切换到下一个字节 r = 0; if (--offset == -8) { //完成一轮刷新后,偏移量减少,当前楼层减1 offset = 0; Current_Level--; } }

} //停止滚动,保持稳定的刷新显示 else { if (++r == 8) r = 0; //每个数字有八个字节,判断是否需要切换到下一个字节 }

import processingserial;Serial port;void setup size200 500; textSize150; textAlignCENTER CENTER; port = new Serialthis COM3 9600; Arduino板的端口号void draw background225; String floors = F1 F2 F3

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

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