为AT89C52RC单片机设计一个箱子存储页面, 大箱子有5个,编号为1-5,中箱子有6个编号为1-6,小箱子有7个编号为1-7, 开机时候,或者按返回键S16,进入主页面 首先显示大箱子 剩余 个数,显示 1---xx,xx为箱子剩余数量,0.5秒闪烁显示2秒后,显示中箱子 剩余 个数,显示2---xx,xx为箱子剩余数量,0.5秒闪烁显示2秒后,显示小箱子 剩余个数,显示 3---xx,xx为箱子剩余数量,0.5秒闪烁显示没有其他按键按下时,循环显示
时间: 2023-06-26 19:03:29 浏览: 101
以下是一个基本的AT89C52RC单片机箱子存储页面设计代码,你可以根据自己的需求进行修改。
```c
#include <reg52.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
uchar code bigBoxNum = 5; // 大箱子数量
uchar code midBoxNum = 6; // 中箱子数量
uchar code smallBoxNum = 7; // 小箱子数量
uchar bigBoxLeft = 5; // 剩余大箱子数量
uchar midBoxLeft = 6; // 剩余中箱子数量
uchar smallBoxLeft = 7; // 剩余小箱子数量
uchar currentPage = 0; // 当前页面,0为主页面,1为大箱子页面,2为中箱子页面,3为小箱子页面
void delay(uint xms) {
uint i, j;
for (i = xms; i > 0; i--) {
for (j = 112; j > 0; j--) {
;
}
}
}
void showMainPage() {
printf("\r\nHello World!\r\n"); // 主页面显示内容
}
void showBigBoxPage() {
printf("\r\nBig Box Left: %d\r\n", bigBoxLeft); // 大箱子页面显示内容
}
void showMidBoxPage() {
printf("\r\nMid Box Left: %d\r\n", midBoxLeft); // 中箱子页面显示内容
}
void showSmallBoxPage() {
printf("\r\nSmall Box Left: %d\r\n", smallBoxLeft); // 小箱子页面显示内容
}
void main() {
EA = 1; // 总中断开关
ES = 1; // 串口中断开关
TMOD = 0x20; // 定时器1工作方式2
TH1 = 0xfd; // 波特率9600
TL1 = 0xfd;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口工作方式1
while (1) {
if (currentPage == 0) {
showMainPage();
delay(500);
} else if (currentPage == 1) {
showBigBoxPage();
delay(500);
} else if (currentPage == 2) {
showMidBoxPage();
delay(500);
} else if (currentPage == 3) {
showSmallBoxPage();
delay(500);
}
}
}
void serial() interrupt 4 {
uchar c = SBUF; // 读取串口数据
RI = 0; // 清除接收中断标志位
if (c == 0x1B || c == 'S') { // 如果接收到ESC或S键
currentPage = 0; // 返回主页面
} else if (c == '1') { // 如果接收到1键
currentPage = 1; // 进入大箱子页面
} else if (c == '2') { // 如果接收到2键
currentPage = 2; // 进入中箱子页面
} else if (c == '3') { // 如果接收到3键
currentPage = 3; // 进入小箱子页面
}
}
```
在这个代码中,我们使用了定时器和串口中断来实现页面的切换以及显示内容的更新。在主循环中,根据当前页面的值来选择对应的显示函数。在串口中断中,根据接收到的数据来切换页面。具体细节你可以根据需要进行修改。
阅读全文