feat(MCU课设): 菜单选择

This commit is contained in:
iridiumR 2022-06-05 21:03:15 +08:00
parent aae1585b5c
commit 5a7be07450
7 changed files with 850 additions and 649 deletions

File diff suppressed because it is too large Load diff

View file

@ -11,8 +11,8 @@ sbit CSB = P2 ^ 5;
void drawNUMBER() void drawNUMBER()
{ {
unsigned int j; unsigned int j;
for(j =0 ; j < 64; j++) for(j = 0 ; j < 64; j++)
{ {
@ -44,7 +44,7 @@ void drawNUMBER()
} }
for(j =0 ; j < 16; j++) for(j = 0 ; j < 16; j++)
{ {
@ -111,21 +111,21 @@ void drawNAME()
write(); write();
} }
} }
void drawMAINMENU() void drawMAINMENU(unsigned char i)
{ {
unsigned int j; unsigned int j;
for(j = 0; j < 32; j++) for(j = 0; j < 32; j++)
{ {
CSA = 0;
CSB = 1;
CSA = 1;
CSB = 0;
RS = 0; RS = 0;
RW = 0; RW = 0;
P1 = 0xb8 + 0; P1 = 0xb8 + 0;
write(); write();
P1 = 0X40 + j; P1 = 0X40 + 31 + j;
write(); //Ò³0ÁÐjÆÁA write(); //Ňł0ÁĐ31+jĆÁB
RS = 1; RS = 1;
RW = 0; RW = 0;
@ -136,12 +136,107 @@ void drawMAINMENU()
RW = 0; RW = 0;
P1 = 0xb8 + 1; P1 = 0xb8 + 1;
write(); write();
P1 = 0X40 + j; P1 = 0X40 + 31 + j;
write(); //Ò³1ÁÐjÆÁA write(); //Ňł1ÁĐ31+jĆÁB
RS = 1; RS = 1;
RW = 0; RW = 0;
P1 = MAINMANU_PAGE1[j - 1]; P1 = MAINMANU_PAGE1[j - 1];
write(); write();
CSA = 1;
CSB = 0;
RS = 0;
RW = 0;
P1 = 0xb8 + 2;
write();
P1 = 0X40 + j;
write(); //Ňł2ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==1)
P1 = ~MAINMANU_PAGE2[j - 1];
else
P1 = MAINMANU_PAGE2[j - 1];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 3;
write();
P1 = 0X40 + j;
write(); //Ňł3ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==1)
P1 = ~MAINMANU_PAGE3[j - 1];
else
P1 = MAINMANU_PAGE3[j - 1];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 4;
write();
P1 = 0X40 + j;
write(); //Ňł4ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==2)
P1 = ~MAINMANU_PAGE4[j - 1];
else
P1 = MAINMANU_PAGE4[j - 1];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 5;
write();
P1 = 0X40 + j;
write(); //Ňł5ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==2)
P1 = ~MAINMANU_PAGE5[j - 1];
else
P1 = MAINMANU_PAGE5[j - 1];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 6;
write();
P1 = 0X40 + j;
write(); //Ňł6ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==3)
P1 = ~MAINMANU_PAGE6[j - 1];
else
P1 = MAINMANU_PAGE6[j - 1];
write();
RS = 0;
RW = 0;
P1 = 0xb8 + 7;
write();
P1 = 0X40 + j;
write(); //Ňł7ÁĐjĆÁA
RS = 1;
RW = 0;
if(i==3)
P1 = ~MAINMANU_PAGE7[j - 1];
else
P1 = MAINMANU_PAGE7[j - 1];
write();
} }
} }

View file

@ -3,5 +3,5 @@
void drawNAME(); void drawNAME();
void drawNUMBER(); void drawNUMBER();
void drawMAINMENU(); void drawMAINMENU(unsigned char);
#endif #endif

View file

@ -1,17 +1,15 @@
#ifndef _IMG_H_ #ifndef _IMG_H_
#define _IMG_H_ #define _IMG_H_
//=================== 关于字库 ==================
//名字 //名字
code unsigned char NAME_PAGE0[] = code unsigned char NAME_PAGE0[] ={
{
0x10, 0x60, 0x02, 0x0C, 0xC0, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x10, 0x60, 0x02, 0x0C, 0xC0, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
0x20, 0x24, 0x24, 0xA4, 0xFE, 0x23, 0x22, 0x20, 0x00, 0xF8, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00, 0x20, 0x24, 0x24, 0xA4, 0xFE, 0x23, 0x22, 0x20, 0x00, 0xF8, 0x08, 0x08, 0x08, 0xF8, 0x00, 0x00,
}; };
code unsigned char NAME_PAGE1[] = code unsigned char NAME_PAGE1[] ={
{
0x04, 0x04, 0x7C, 0x03, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x04, 0x04, 0x7C, 0x03, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x08, 0x06, 0x01, 0xFF, 0x01, 0x06, 0x00, 0x00, 0x3F, 0x10, 0x10, 0x10, 0x3F, 0x00, 0x00 0x10, 0x08, 0x06, 0x01, 0xFF, 0x01, 0x06, 0x00, 0x00, 0x3F, 0x10, 0x10, 0x10, 0x3F, 0x00, 0x00
@ -41,17 +39,17 @@ code unsigned char NUMBER_PAGE1[]={
0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24, 0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
}; };
//学号 右 //学号 右
code unsigned char NUMBER_RPAGE0[]= code unsigned char NUMBER_RPAGE0[]={
{
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00, 0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
}; };
code unsigned char NUMBER_RPAGE1[]= code unsigned char NUMBER_RPAGE1[]={
{
0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00, 0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, 0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
}; };
//=================== 菜单字库 ==================
//第一行:菜单 //第一行:菜单
code unsigned char MAINMANU_PAGE0[]={ code unsigned char MAINMANU_PAGE0[]={
0x04,0x04,0x44,0xC4,0x4F,0x44,0x44,0xC4,0x24,0x24,0x2F,0xB4,0x24,0x04,0x04,0x00, 0x04,0x04,0x44,0xC4,0x4F,0x44,0x44,0xC4,0x24,0x24,0x2F,0xB4,0x24,0x04,0x04,0x00,
@ -62,33 +60,31 @@ code unsigned char MAINMANU_PAGE1[]={
0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00, 0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00,
}; };
//void writeData(unsigned char d) //第二行:方块
//{ code unsigned char MAINMANU_PAGE2[]={
// RS = 1; 0x08,0x08,0x08,0x08,0x08,0xF8,0x89,0x8E,0x88,0x88,0x88,0x88,0x08,0x08,0x08,0x00,
// RW = 0; 0x20,0x20,0x20,0xFF,0x20,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0xF8,0x00,0x00,
// P1 = d; };
//} code unsigned char MAINMANU_PAGE3[]={
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,
//void setCommand(unsigned char d) 0x10,0x30,0x10,0x0F,0x88,0x48,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x81,0x00,
//{ };
// RS = 0; //第三行:弹球
// RW = 0; code unsigned char MAINMANU_PAGE4[]={
// P1 = d; 0x02,0xE2,0x22,0x22,0x3E,0x00,0x00,0xF9,0x4A,0x4C,0xF8,0x4C,0x4A,0xF9,0x00,0x00,
//} 0x04,0x84,0x84,0xFC,0x84,0x84,0x10,0x50,0x90,0x10,0xFF,0x90,0x11,0x16,0x90,0x00,
};
//void setPage(unsigned char p) code unsigned char MAINMANU_PAGE5[]={
//{ 0x00,0x43,0x82,0x42,0x3E,0x00,0x10,0x13,0x12,0x12,0xFF,0x12,0x12,0x13,0x10,0x00,
// setCommand(0xb8 + p); 0x20,0x60,0x20,0x1F,0x10,0x10,0x10,0x08,0x45,0x82,0x7F,0x01,0x06,0x09,0x10,0x00,
//} };
//第四行:关于
//void setLine(unsigned char p) code unsigned char MAINMANU_PAGE6[]={
//{ 0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00,
// setCommand(0xc0 + p); 0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,
//} };
code unsigned char MAINMANU_PAGE7[]={
//void setY(unsigned char p) 0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00,
//{ 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
// setCommand(0x40 + p); };
//}
#endif #endif

View file

@ -4,7 +4,7 @@
unsigned char TH, TL; unsigned char TH, TL;
extern Menu *NOW; //꽉데寧濾 extern Menu *NOW; //꽉데寧濾
enum OPR opr = idle; //°´¼ü״̬ extern enum OPR opr; //°´¼ü״̬
unsigned char freshScreenTriger = 0; unsigned char freshScreenTriger = 0;
@ -85,6 +85,6 @@ int main()
while(1) while(1)
{ {
NOW->f(NOW, opr); NOW->f(NOW);
} }
} }

View file

@ -3,6 +3,7 @@
#include "delay.h" #include "delay.h"
#include "draw.h" #include "draw.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
Menu M_STARTUP; Menu M_STARTUP;
Menu M_MAINMENU;//寮꽉데 Menu M_MAINMENU;//寮꽉데
Menu M_PLAYMODE1; //띤쭈薑렘욥 Menu M_PLAYMODE1; //띤쭈薑렘욥
@ -11,20 +12,20 @@ Menu M_PLAYMODE1; //
Menu* NOW; //뎠품꽉데寧濾 Menu* NOW; //뎠품꽉데寧濾
Menu* LAST=NULL;//上一个状态的菜单 Menu* LAST = NULL; //上一个状态的菜单
enum OPR opr = idle;
static unsigned char local[10] = {0};
//놓迦꽉데 //놓迦꽉데
void m_startup(struct _menu* this, enum OPR opr) void m_startup(struct _menu* this)
{ {
if(LAST != &M_STARTUP) if(LAST != &M_STARTUP)
{ {
LAST = &M_STARTUP; LAST = &M_STARTUP;
drawNAME(); //삥齡츰俚 drawNAME(); //삥齡츰俚
delay(1000); delay(1000);
@ -40,20 +41,30 @@ void m_startup(struct _menu* this, enum OPR opr)
} }
void m_mainmenu(struct _menu* this, enum OPR opr) void m_mainmenu(struct _menu* this)
{ {
if(LAST != &M_MAINMENU) if(LAST != &M_MAINMENU)
{ {
local[0] = 0;
LAST = &M_MAINMENU; LAST = &M_MAINMENU;
drawMAINMENU(); drawMAINMENU(local[0]);
} }
if(opr == right)
{
local[0]++;
if(local[0] > 3)
local[0] = 3;
}
if(opr == left) if(opr == left)
{ {
if(local[0] != 0)
local[0]--;
}
if(opr != idle)
{
opr = idle; opr = idle;
NOW = &M_STARTUP; drawMAINMENU(local[0]);
clear();
} }
} }

View file

@ -4,10 +4,8 @@
typedef struct _menu typedef struct _menu
{ {
unsigned char *local;
unsigned char *len;
struct _menu* n; struct _menu* n;
void(*f)(struct _menu* this, enum OPR opr); void(*f)(struct _menu* this);
}Menu; }Menu;
void menuInit(); void menuInit();