📄 display.h
字号:
#ifndef __DISPLAY_H__
#define __DISPLAY_H__
//#include "includes.h"
/*
*********************************************************************************************************
* TYPE
*********************************************************************************************************
*/
typedef enum {
STATE_WELCOME,
STATE_WAITING,
STATE_ENJOY,
STATE_GOODBYE,
STATE_SLEEPING,
STATE_WORKING,
STATE_GO_AWAY,
STATE_INVALID,
}STATE_T;
typedef enum {
TYPE_BARBER,
TYPE_CUSTOMER,
}TYPE_T;
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define DISP_BACKGROUND DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY // Background color
#define DISP_CUSTOMER DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY // Color of customer
#define DISP_BARBER DISP_FGND_WHITE + DISP_BGND_BLACK // Color of barber
#define DISP_ERROR DISP_FGND_RED + DISP_BGND_LIGHT_GRAY // Color of error
#define ROW_BASE_CUSTOMER 3
#define ROW_BASE_BARBER 0
#define ROW_BASE_ERROR 15
#define ROW_START 4 // Row start number
#define ROW_ERROR 23 // Row to display error
#define INCREASE_COLOUMN 15
static void TaskStartDispInit(void);
static void TaskStartDisp(void);
static void Display_Info(INT8U num_ID, TYPE_T type, STATE_T state);
static void Display_Clear_Row(INT8U num_ID, TYPE_T type);
/*
*********************************************************************************************************
* INITIALIZE THE DISPLAY
*********************************************************************************************************
*/
static void TaskStartDispInit (void)
{
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, " Barber---Customer(stone) ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 11, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 12, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 13, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 22, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 23, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 24, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
PC_DispStr( 0, 25, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
}
/*
*********************************************************************************************************
* UPDATE THE DISPLAY
*********************************************************************************************************
*/
static void TaskStartDisp (void)
{
char s[80];
INT8U i;
sprintf(s, "%5d", OSTaskCtr); // Display #tasks running
PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
#if OS_TASK_STAT_EN > 0
sprintf(s, "%3d", OSCPUUsage); // Display CPU usage in %
PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
#endif
sprintf(s, "%5d", OSCtxSwCtr); // Display #context switches per second
PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
sprintf(s, "V%1d.%02d", OSVersion() / 100, OSVersion() % 100); //Display uC/OS-II's version number /
PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
switch (_8087) { // Display whether FPU present /
case 0:
PC_DispStr(71, 22, " NO FPU ", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 1:
PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 2:
PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 3:
PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
}
//for (i = 0; i < N_CHAIRS; i++){}
}
/*
*********************************************************************************************************
* DISPLAY_INFORMATION
*********************************************************************************************************
*/
static void Display_Info(INT8U num_ID, TYPE_T type, STATE_T state)
{
STATE_T disp_state = state;
TYPE_T work_type = type;
INT8U num_row = 0;
INT8U num_col = 0;
char s[80];
switch (work_type) {
case TYPE_BARBER:
num_row = ROW_START + ROW_BASE_BARBER + num_ID;
switch (disp_state) {
case STATE_SLEEPING:
num_col += 1 * INCREASE_COLOUMN;
sprintf(s, "Sleeping...");
PC_DispStr(num_col, num_row, s, DISP_BARBER);
break;
case STATE_WORKING:
num_col += 2 * INCREASE_COLOUMN;
sprintf(s, "Working...");
PC_DispStr(num_col, num_row, s, DISP_BARBER);
break;
default:
sprintf(s, "Barber(%d): ", num_ID);
PC_DispStr(num_col, num_row, s, DISP_BARBER);
}
break;
case TYPE_CUSTOMER:
num_row = ROW_START + ROW_BASE_CUSTOMER+ num_ID;
switch (disp_state) {
case STATE_GO_AWAY:
num_col += 1 * INCREASE_COLOUMN;
sprintf(s, "No chair, go away!!");
PC_DispStr(num_col, num_row, s, DISP_ERROR);
break;
case STATE_INVALID:
num_col = ROW_START + ROW_ERROR;
sprintf(s, "Invalid chair number!!");
PC_DispStr(num_col, num_row, s, DISP_ERROR);
break;
case STATE_WELCOME:
num_col += 1 * INCREASE_COLOUMN;
sprintf(s, "Welcome!!");
PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
break;
case STATE_WAITING:
num_col += 2 * INCREASE_COLOUMN;
sprintf(s, "Waiting...");
PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
break;
case STATE_ENJOY:
num_col += 3 * INCREASE_COLOUMN;
sprintf(s, "Enjoy...");
PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
break;
case STATE_GOODBYE:
num_col += 4 * INCREASE_COLOUMN;
sprintf(s, "Goodbye!!");
PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
break;
default:
sprintf(s, "Customer(%d): ", num_ID);
PC_DispStr(num_col, num_row, s, DISP_CUSTOMER);
}
break;
default:
num_row = ROW_START + ROW_ERROR;
sprintf(s, "Error: Invalid type!!");
PC_DispStr(num_col, num_row, s, DISP_ERROR);
}
}
static void Display_Clear_Row(INT8U num_ID, TYPE_T type)
{
TYPE_T work_type = type;
INT8U num_row = 0;
INT8U num_col = 0;
switch (work_type) {
case TYPE_BARBER:
num_row = ROW_START + ROW_BASE_BARBER + num_ID;
PC_DispStr(num_col, num_row, " ", DISP_BACKGROUND);
break;
case TYPE_CUSTOMER:
num_row = ROW_START + ROW_BASE_CUSTOMER+ num_ID;
PC_DispStr(num_col, num_row, " ", DISP_BACKGROUND);
break;
default:
num_row = num_ID;
PC_DispStr(num_col, num_row, " ", DISP_BACKGROUND);
}
}
#endif // __DISPLAY_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -